php+laravel 扫码二维码签到功能
发布:smiling 来源: PHP粉丝网 添加日期:2022-04-27 09:29:13 浏览: 评论:0
最近新开发个项目基于微信二维码来实现公司签到业务需求,需要做哪些相关配置呢,接下来通过本文给大家详细介绍下,对php二维码签到功能感兴趣的朋友一起学习下吧。
简介
为满足公司签到业务场景 最终敲定使用微信二维码来实现
微信公众号相关配置
在微信公众平台登陆上去后,点开开发中的基本配置看到的基本信息
微信公众平台配置
框架及拓展包
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(!emptyempty($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);
- }
- }
以上是我的使用心得 谢谢大家!
Tags: php+laravel扫码二维码签到
- 上一篇:Laravel中Kafka的使用详解
- 下一篇:最后一页
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)