您好,登錄后才能下訂單哦!
怎么在php中使用laravel 實現一個二維碼簽到功能?相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。
框架及拓展包
laravel overtrue/laravel-wechat 安裝方式:composer require "overtrue/laravel-wechat:^6.0"
詳細了解請看:laravel-wechat
配置文件及對應信息
config/wechat.php /* * 公眾號 */ 'official_account' => [ 'default' => [ 'app_id' => env('WECHAT_OFFICIAL_ACCOUNT_APPID', 'your-app-id'), // AppID 'secret' => env('WECHAT_OFFICIAL_ACCOUNT_SECRET', 'your-app-secret'), // AppSecret 'token' => env('WECHAT_OFFICIAL_ACCOUNT_TOKEN', 'your-token'), // Token 'aes_key' => env('WECHAT_OFFICIAL_ACCOUNT_AES_KEY', ''), // EncodingAESKey ], ],
生成二維碼
<?php namespace App\Model\WeChat; use Illuminate\Database\Eloquent\Model; class Qrcode extends Model { private static $app; public function __construct(){ self::$app = app('wechat.official_account'); } /** * @title 生成臨時二維碼 * @param $action_info * @param float|int $expire_seconds * @return $result * @return $result[ticket] 獲取的二維碼ticket,憑借此ticket可以在有效時間內換取二維碼。 * @return $result[expire_seconds] 該二維碼有效時間,以秒為單位。 最大不超過2592000(即30天) * @return $result[url] 二維碼圖片解析后的地址,開發者可根據該地址自行生成需要的二維碼圖片 * @return $result[url1] 通過ticket換取二維碼后地址 */ public function temporary($action_info,$expire_seconds = 30*24*60*60){ $result = self::$app->qrcode->temporary($action_info, $expire_seconds); $ticket = $result['ticket']; $url = $this -> qrcode_url($ticket); $result['url1'] = $url; $result['action_info'] = $action_info; return $result; } /** * @title 生成永久二維碼 * @param $action_info * @return $result * @return $result[ticket] 獲取的二維碼ticket,憑借此ticket可以在有效時間內換取二維碼 * @return $result[expire_seconds] 該二維碼有效時間,以秒為單位。 最大不超過2592000(即30天) * @return $result[url] 二維碼圖片解析后的地址,開發者可根據該地址自行生成需要的二維碼圖片 * @return $result[url1] 通過ticket換取二維碼后地址 */ public function forever($action_info){ $result = self::$app->qrcode->forever($action_info); $ticket = $result['ticket']; $url = $this -> qrcode_url($ticket); $result['url1'] = $url; $result['action_info'] = $action_info; return $result; } /** * @title 獲取二維碼url * @param $ticket * @return $url 二維碼url */ public function qrcode_url($ticket){ $url = self::$app->qrcode->url($ticket); return $url; } }
實現一個簡單的推送
<?php namespace App\Http\Controllers; use App\Http\Controllers\Controller; use Illuminate\Support\Facades\Log; class WeChatController extends Controller { /** * 處理微信的請求消息 * * @return string */ public function serve() { Log::info('request arrived.'); # 注意:Log 為 Laravel 組件,所以它記的日志去 Laravel 日志看,而不是 EasyWeChat 日志 $app = app('wechat.official_account'); $app->server->push(function($message){ return "hello everyone!"; }); return $app->server->serve(); } }
處理事件
<?php namespace App\Http\Controllers; use App\Http\Controllers\Controller; use Illuminate\Support\Facades\Log; use Illuminate\Http\Request; use App\Model\SCAN; class WeChatController extends Controller { /** * 處理微信的請求消息 * * @return string */ public function serve() { Log::info('request arrived.'); # 注意:Log 為 Laravel 組件,所以它記的日志去 Laravel 日志看,而不是 EasyWeChat 日志 $app = app('wechat.official_account'); $app->server->push(function($message){ case 'event': switch ($message['Event']) { case 'subscribe': //關注事件, 掃描帶參數二維碼事件(用戶未關注時,進行關注后的事件推送) return "hello everyone!"; break; case 'unsubscribe': //取消關注事件 break; case 'SCAN': //掃描帶參數二維碼事件(用戶已關注時的事件推送) $obj = new SCAN(); //處理掃碼相關業務邏輯 $info = $obj -> index($message); Log::info($info); return $info; break; default: return $message['Event']; break; } break; }); return $app->server->serve(); } }
業務模塊并推送模版消息
<?php namespace App\Model; use Illuminate\Database\Eloquent\Model; use Illuminate\Support\Facades\DB; class SCAN extends Model { //掃碼 public function index($message){ $openid = $message['FromUserName']; $evenkey = $message['EventKey']; $preg = '/^aaa-/'; preg_match_all($preg,$evenkey,$evenkey_arr); if(!empty($evenkey_arr[0])){ $new_evenkey = $evenkey_arr[0][0]; $reg = "/^$new_evenkey/"; $evenkey = trim(preg_replace($reg, ' ', $evenkey)); if($new_evenkey == "aaa-"){ //生成二維碼時所傳人的參數 $this -> operation($evenkey,$openid); } }else{ return; } } /** * @param evenkey 參數 * @param openid 要向哪個用戶推送信息 */ public function operation($evenkey,$openid) { //此處省略業務邏輯 根據一個狀態判斷 大家直接套用就好 $status = 1; if($status == 1){ $this->success($openid); }else{ $this->error($openid); } } /** * @title 掃碼成功 * @param openid 用戶openid */ public function success($openid){ $app = app('wechat.official_account'); //這里可以填寫您選擇的公眾號中模版消息的模版id $template_id = ''; //$data是模版中的詳細內容 按照微信中的內容進行填寫 下面只是一個例子 $data = array( "first" => '', "keyword1" => '', "keyword2" => '', "keyword3" => date('Y-m-d H:i'), "keyword4" => '', "remark" => '' ); //最后發送的信息 $info = [ 'touser' => $openid, 'template_id' => $template_id, 'url' => '', 'data' => $data, ]; return $app -> template_message ->send($info); } /** * @title 掃碼失敗 * @param openid 用戶openid */ public function error($openid){ $app = app('wechat.official_account'); //這里可以填寫您選擇的公眾號中模版消息的模版id $template_id = ''; //$data是模版中的詳細內容 按照微信中的內容進行填寫 下面只是一個例子 $data = array( "first" => '', "keyword1" => '', "keyword2" => '', "keyword3" => date('Y-m-d H:i'), "keyword4" => '', "remark" => '' ); //最后發送的信息 $info = [ 'touser' => $openid, 'template_id' => $template_id, 'url' => '', 'data' => $data, ]; return $app -> template_message ->send($info); } }
一、phpStudy,是一個新手入門最常用的開發環境。二、WampServer,WampServer也同樣的也是和phpStudy一樣操作簡單對小白比較友好。三、XAMPP,XAMPP(Apache+MySQL+PHP+PERL)是一個功能強大的建站集成軟件包;四、MAMP,MAMP分為兩種MAMP和MAMP Pro for Mac。五、寶塔面板,寶塔面板是一款服務器管理軟件,支持windows和linux系統。六、UPUPW,UPUPW是目前Windows平臺下最具特色的Web服務器PHP套件。
看完上述內容,你們掌握怎么在php中使用laravel 實現一個二維碼簽到功能的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。