php+laravel 掃碼二維碼簽到功能
阿新 • • 發佈:2021-05-17
簡介
為滿足公司簽到業務場景 最終敲定使用微信二維碼來實現
微信公眾號相關配置
在微信公眾平臺登陸上去後,點開開發中的基本配置看到的基本資訊
框架及拓展包
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[uwww.cppcns.comrl] 二維碼圖片解析後的地址,開發者可根據該地址自行生成需要的二維碼圖片 * @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': //關注事件,掃描帶引數二維碼事件(使用者未關注時,進行關注後的事件推送) www.cppcns.com 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 openi程式設計客棧d 使用者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" => '',"keyword3" => date('Y-m-d H:i'程式設計客棧),]; return $app -> template_message ->send($info); } }www.cppcns.com
以上是我的使用心得 謝謝大家!
到此這篇關於php+laravel 掃碼二維碼簽到功能的文章就介紹到這了,更多相關php二維碼簽到內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!