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

实现一个简单的推送

  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.      * @return string 
  14.      */ 
  15.     public function serve() 
  16.     { 
  17.         Log::info('request arrived.'); # 注意:Log 为 Laravel 组件,所以它记的日志去 Laravel 日志看,而不是 EasyWeChat 日志 
  18.  
  19.         $app = app('wechat.official_account'); 
  20.         $app->server->push(function($message){ 
  21.             return "hello everyone!"
  22.         }); 
  23.  
  24.         return $app->server->serve(); 
  25.     } 

处理事件

  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.      * @return string 
  16.      */ 
  17.     public function serve() 
  18.     { 
  19.         Log::info('request arrived.'); # 注意:Log 为 Laravel 组件,所以它记的日志去 Laravel 日志看,而不是 EasyWeChat 日志 
  20.  
  21.         $app = app('wechat.official_account'); 
  22.         $app->server->push(function($message){ 
  23.             case 'event'
  24.                     switch ($message['Event']) { 
  25.                         case 'subscribe':  //关注事件, 扫描带参数二维码事件(用户未关注时,进行关注后的事件推送) 
  26.                             return "hello everyone!"
  27.                             break
  28.                         case 'unsubscribe':  //取消关注事件 
  29.                             break
  30.                         case 'SCAN':  //扫描带参数二维码事件(用户已关注时的事件推送) 
  31.                             $obj = new SCAN(); //处理扫码相关业务逻辑 
  32.                             $info = $obj -> index($message); 
  33.                             Log::info($info); 
  34.                             return $info
  35.                             break
  36.                         default
  37.                             return $message['Event']; 
  38.                             break
  39.                     } 
  40.                     break
  41.         }); 
  42.  
  43.         return $app->server->serve(); 
  44.     } 

业务模块并推送模版消息

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

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

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

分享到: