php+laravel 掃碼二維碼簽到功能
簡介
為滿足公司簽到業(yè)務(wù)場景 最終敲定使用微信二維碼來實現(xiàn)
微信公眾號相關(guān)配置
在微信公眾平臺登陸上去后,點開開發(fā)中的基本配置看到的基本信息
框架及拓展包
laravel overtrue/laravel-wechat 安裝方式:composer require "overtrue/laravel-wechat:^6.0"
詳細了解請看:laravel-wechat
配置文件及對應(yīng)信息
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可以在有效時間內(nèi)換取二維碼。 * @return $result[expire_seconds] 該二維碼有效時間,以秒為單位。 最大不超過2592000(即30天) * @return $result[url] 二維碼圖片解析后的地址,開發(fā)者可根據(jù)該地址自行生成需要的二維碼圖片 * @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可以在有效時間內(nèi)換取二維碼 * @return $result[expire_seconds] 該二維碼有效時間,以秒為單位。 最大不超過2592000(即30天) * @return $result[url] 二維碼圖片解析后的地址,開發(fā)者可根據(jù)該地址自行生成需要的二維碼圖片 * @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; } }
實現(xiàn)一個簡單的推送
<?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': //關(guān)注事件, 掃描帶參數(shù)二維碼事件(用戶未關(guān)注時,進行關(guān)注后的事件推送) return "hello everyone!"; break; case 'unsubscribe': //取消關(guān)注事件 break; case 'SCAN': //掃描帶參數(shù)二維碼事件(用戶已關(guān)注時的事件推送) $obj = new SCAN(); //處理掃碼相關(guān)業(yè)務(wù)邏輯 $info = $obj -> index($message); Log::info($info); return $info; break; default: return $message['Event']; break; } break; }); return $app->server->serve(); } }
業(yè)務(wù)模塊并推送模版消息
<?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-"){ //生成二維碼時所傳人的參數(shù) $this -> operation($evenkey,$openid); } }else{ return; } } /** * @param evenkey 參數(shù) * @param openid 要向哪個用戶推送信息 */ public function operation($evenkey,$openid) { //此處省略業(yè)務(wù)邏輯 根據(jù)一個狀態(tài)判斷 大家直接套用就好 $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是模版中的詳細內(nèi)容 按照微信中的內(nèi)容進行填寫 下面只是一個例子 $data = array( "first" => '', "keyword1" => '', "keyword2" => '', "keyword3" => date('Y-m-d H:i'), "keyword4" => '', "remark" => '' ); //最后發(fā)送的信息 $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是模版中的詳細內(nèi)容 按照微信中的內(nèi)容進行填寫 下面只是一個例子 $data = array( "first" => '', "keyword1" => '', "keyword2" => '', "keyword3" => date('Y-m-d H:i'), "keyword4" => '', "remark" => '' ); //最后發(fā)送的信息 $info = [ 'touser' => $openid, 'template_id' => $template_id, 'url' => '', 'data' => $data, ]; return $app -> template_message ->send($info); } }
以上是我的使用心得 謝謝大家!
到此這篇關(guān)于php+laravel 掃碼二維碼簽到功能的文章就介紹到這了,更多相關(guān)php二維碼簽到內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解在YII2框架中使用UEditor編輯器發(fā)布文章
這篇文章主要介紹了在YII2框架中使用UEditor編輯器發(fā)布文章,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-11-11win7計劃任務(wù)定時執(zhí)行PHP腳本設(shè)置圖解
這篇文章主要介紹了win7計劃任務(wù)定時執(zhí)行PHP腳本設(shè)置圖解,需要的朋友可以參考下2014-05-05