当前位置:首页 > CMS教程 > 其它CMS > 列表

php+laravel 扫码二维码签到功能

发布:smiling 来源: PHP粉丝网  添加日期:2022-04-27 09:29:13 浏览: 评论:0 

最近新开发个项目基于微信二维码来实现公司签到业务需求,需要做哪些相关配置呢,接下来通过本文给大家详细介绍下,对php二维码签到功能感兴趣的朋友一起学习下吧。

简介

为满足公司签到业务场景 最终敲定使用微信二维码来实现

微信公众号相关配置

php+laravel 扫码二维码签到功能

在微信公众平台登陆上去后,点开开发中的基本配置看到的基本信息

微信公众平台配置

框架及拓展包

laravel

overtrue/laravel-wechat 

安装方式:composer require "overtrue/laravel-wechat:^6.0"

详细了解请看:laravel-wechat

配置文件及对应信息

  1. config/wechat.php 
  2.     /* 
  3.      * 公众号 
  4.      */ 
  5.     'official_account' => [ 
  6.         'default' => [ 
  7.             'app_id'  => env('WECHAT_OFFICIAL_ACCOUNT_APPID', 'your-app-id'),         // AppID 
  8.             'secret'  => env('WECHAT_OFFICIAL_ACCOUNT_SECRET', 'your-app-secret'),    // AppSecret 
  9.             'token'   => env('WECHAT_OFFICIAL_ACCOUNT_TOKEN', 'your-token'),           // Token 
  10.             'aes_key' => env('WECHAT_OFFICIAL_ACCOUNT_AES_KEY', ''),                 // EncodingAESKey 
  11.  
  12.         ], 
  13.     ], 

生成二维码

  1. <?php 
  2.  
  3. namespace App\Model\WeChat; 
  4.  
  5. use Illuminate\Database\Eloquent\Model; 
  6.  
  7. class Qrcode extends Model 
  8. { 
  9.     private static $app; 
  10.     public function __construct(){ 
  11.         self::$app = app('wechat.official_account'); 
  12.     } 
  13.       
  14.     /** 
  15.      * @title 生成临时二维码 
  16.      * @param $action_info 
  17.      * @param float|int $expire_seconds 
  18.      * @return $result 
  19.      * @return $result[ticket]  获取的二维码ticket,凭借此ticket可以在有效时间内换取二维码。 
  20.      * @return $result[expire_seconds]  该二维码有效时间,以秒为单位。 最大不超过2592000(即30天) 
  21.      * @return $result[url]  二维码图片解析后的地址,开发者可根据该地址自行生成需要的二维码图片 
  22.      * @return $result[url1]  通过ticket换取二维码后地址 
  23.      */ 
  24.     public function temporary($action_info,$expire_seconds = 30*24*60*60){ 
  25.         $result =  self::$app->qrcode->temporary($action_info, $expire_seconds); 
  26.         $ticket = $result['ticket']; 
  27.         $url = $this -> qrcode_url($ticket); 
  28.         $result['url1'] = $url; 
  29.         $result['action_info'] = $action_info; 
  30.         return $result; 
  31.     } 
  32.  
  33.     /** 
  34.      * @title 生成永久二维码 
  35.      * @param $action_info 
  36.      * @return $result 
  37.      * @return $result[ticket] 获取的二维码ticket,凭借此ticket可以在有效时间内换取二维码 
  38.      * @return $result[expire_seconds] 该二维码有效时间,以秒为单位。 最大不超过2592000(即30天) 
  39.      * @return $result[url] 二维码图片解析后的地址,开发者可根据该地址自行生成需要的二维码图片 
  40.      * @return $result[url1] 通过ticket换取二维码后地址 
  41.      */ 
  42.     public function forever($action_info){ 
  43.         $result =  self::$app->qrcode->forever($action_info); 
  44.         $ticket = $result['ticket']; 
  45.         $url = $this -> qrcode_url($ticket); 
  46.         $result['url1'] = $url; 
  47.         $result['action_info'] = $action_info; 
  48.         return $result; 
  49.     } 
  50.  
  51.     /** 
  52.      * @title 获取二维码url 
  53.      * @param $ticket 
  54.      * @return $url 二维码url 
  55.      */ 
  56.     public function qrcode_url($ticket){ 
  57.         $url = self::$app->qrcode->url($ticket); 
  58.         return $url; 
  59.     } 
  60. } 

实现一个简单的推送

  1. <?php 
  2.  
  3. namespace App\Http\Controllers; 
  4.  
  5. use App\Http\Controllers\Controller; 
  6. use Illuminate\Support\Facades\Log; 
  7.  
  8. class WeChatController extends Controller 
  9. { 
  10.  
  11.     /** 
  12.      * 处理微信的请求消息 
  13.      * 
  14.      * @return string 
  15.      */ 
  16.     public function serve() 
  17.     { 
  18.         Log::info('request arrived.'); # 注意:Log 为 Laravel 组件,所以它记的日志去 Laravel 日志看,而不是 EasyWeChat 日志 
  19.  
  20.         $app = app('wechat.official_account'); 
  21.         $app->server->push(function($message){ 
  22.             return "hello everyone!"; 
  23.         }); 
  24.  
  25.         return $app->server->serve(); 
  26.     } 
  27. } 

处理事件

  1. <?php 
  2.  
  3. namespace App\Http\Controllers; 
  4.  
  5. use App\Http\Controllers\Controller; 
  6. use Illuminate\Support\Facades\Log; 
  7. use Illuminate\Http\Request; 
  8. use App\Model\SCAN; 
  9.  
  10. class WeChatController extends Controller 
  11. { 
  12.  
  13.     /** 
  14.      * 处理微信的请求消息 
  15.      * 
  16.      * @return string 
  17.      */ 
  18.     public function serve() 
  19.     { 
  20.         Log::info('request arrived.'); # 注意:Log 为 Laravel 组件,所以它记的日志去 Laravel 日志看,而不是 EasyWeChat 日志 
  21.  
  22.         $app = app('wechat.official_account'); 
  23.         $app->server->push(function($message){ 
  24.             case 'event': 
  25.                     switch ($message['Event']) { 
  26.                         case 'subscribe':  //关注事件, 扫描带参数二维码事件(用户未关注时,进行关注后的事件推送) 
  27.                             return "hello everyone!"; 
  28.                             break; 
  29.                         case 'unsubscribe':  //取消关注事件 
  30.                             break; 
  31.                         case 'SCAN':  //扫描带参数二维码事件(用户已关注时的事件推送) 
  32.                             $obj = new SCAN(); //处理扫码相关业务逻辑 
  33.                             $info = $obj -> index($message); 
  34.                             Log::info($info); 
  35.                             return $info; 
  36.                             break; 
  37.                         default: 
  38.                             return $message['Event']; 
  39.                             break; 
  40.                     } 
  41.                     break; 
  42.         }); 
  43.  
  44.         return $app->server->serve(); 
  45.     } 
  46. } 

业务模块并推送模版消息

  1. <?php 
  2.  
  3. namespace App\Model; 
  4.  
  5. use Illuminate\Database\Eloquent\Model; 
  6. use Illuminate\Support\Facades\DB; 
  7.  
  8. class SCAN extends Model 
  9. { 
  10.     //扫码 
  11.     public function index($message){ 
  12.         $openid = $message['FromUserName']; 
  13.         $evenkey = $message['EventKey']; 
  14.         $preg = '/^aaa-/'; 
  15.         preg_match_all($preg,$evenkey,$evenkey_arr); 
  16.         if(!emptyempty($evenkey_arr[0])){ 
  17.             $new_evenkey = $evenkey_arr[0][0]; 
  18.             $reg = "/^$new_evenkey/"; 
  19.             $evenkey = trim(preg_replace($reg, ' ', $evenkey)); 
  20.             if($new_evenkey == "aaa-"){  //生成二维码时所传人的参数 
  21.                 $this -> operation($evenkey,$openid); 
  22.             } 
  23.         }else{ 
  24.             return; 
  25.         } 
  26.     } 
  27.  
  28.     /** 
  29.     * @param evenkey 参数 
  30.     * @param openid 要向哪个用户推送信息 
  31.     */ 
  32.     public function operation($evenkey,$openid) 
  33.     { 
  34.        //此处省略业务逻辑 根据一个状态判断 大家直接套用就好 
  35.        $status = 1; 
  36.        if($status == 1){ 
  37.            $this->success($openid); 
  38.        }else{ 
  39.            $this->error($openid); 
  40.        } 
  41.     } 
  42.  
  43.  
  44.     /** 
  45.     * @title 扫码成功 
  46.     * @param openid 用户openid 
  47.     */ 
  48.     public function success($openid){ 
  49.         $app = app('wechat.official_account'); 
  50.  
  51.         //这里可以填写您选择的公众号中模版消息的模版id 
  52.         $template_id = '';   
  53.           
  54.         //$data是模版中的详细内容 按照微信中的内容进行填写 下面只是一个例子 
  55.         $data = array( 
  56.             "first"  => '', 
  57.             "keyword1"   => '', 
  58.             "keyword2"  => '', 
  59.             "keyword3"  => date('Y-m-d H:i'), 
  60.             "keyword4" => '', 
  61.             "remark" => '' 
  62.         ); 
  63.  
  64.         //最后发送的信息 
  65.         $info = [ 
  66.             'touser' => $openid, 
  67.             'template_id' => $template_id, 
  68.             'url' => '', 
  69.             'data' => $data, 
  70.         ]; 
  71.  
  72.         return $app -> template_message ->send($info); 
  73.     } 
  74.  
  75.  
  76.     /** 
  77.     * @title 扫码失败 
  78.     * @param openid 用户openid 
  79.     */ 
  80.     public function error($openid){ 
  81.         $app = app('wechat.official_account'); 
  82.  
  83.         //这里可以填写您选择的公众号中模版消息的模版id 
  84.         $template_id = '';   
  85.           
  86.         //$data是模版中的详细内容 按照微信中的内容进行填写 下面只是一个例子 
  87.         $data = array( 
  88.             "first"  => '', 
  89.             "keyword1"   => '', 
  90.             "keyword2"  => '', 
  91.             "keyword3"  => date('Y-m-d H:i'), 
  92.             "keyword4" => '', 
  93.             "remark" => '' 
  94.         ); 
  95.  
  96.         //最后发送的信息 
  97.         $info = [ 
  98.             'touser' => $openid, 
  99.             'template_id' => $template_id, 
  100.             'url' => '', 
  101.             'data' => $data, 
  102.         ]; 
  103.  
  104.         return $app -> template_message ->send($info); 
  105.     } 
  106. } 

以上是我的使用心得 谢谢大家!

Tags: php+laravel扫码二维码签到

分享到: