微信的二维码真是个神奇的东西。在我们开发中,应用也是很多~
用户扫描带场景值(参数)二维码时,可能推送以下两种事件:
如果用户还未关注公众号,则用户可以关注公众号,关注后微信会将带场景值关注事件推送给开发者。
如果用户已经关注公众号,在用户扫描后会自动进入会话,微信也会将带场景值扫描事件推送给开发者。
获取带参数的二维码的过程包括两步,首先创建二维码ticket,然后凭借ticket到指定URL换取二维码。
以上这部分是官方给我们的扫描带参数二维码的一个解释……嗯,很官方。看着感觉好难的样子,其实就那样。
逻辑部分,官方已经给出,我就不赘述了,读懂上边官方文档中的那段话的逻辑就好。
下边,有我在实际项目中应用的创建带参数二维码并且,在创建成功之后下载到本地的一个方法,具体的,代码中都有注释。
php
复制代码
/** * @name: 创建签到/签出/学生二维码 * @desc: 描述 * @author: camellia * @date: 20201201 * @email: guanchao_gc@qq.com * @param: $open_id string 1234@@@sign_in 1234@@@sign_out 1234@@@scan_add */ public function createQrCode($open_id) { // 获取 access_token 代码 $access_token = $this->access_token(); $ch = curl_init("https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=$access_token"); $jsondata['expire_seconds'] = 86400; $jsondata['action_name'] = 'QR_STR_SCENE'; $jsondata['action_info']['scene']['scene_str'] = $open_id; $jsondata['action_info']['scene']['scene_sign'] = 'sign_in'; $data = json_encode($jsondata); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $res = curl_exec($ch); $tickarr = json_decode($res, true); $url = $this->createQrCodeByTick($tickarr['ticket']); return $url; } /** * @name: 创建签到/签出/学生二维码 * @desc: 描述 * @author: camellia * @date: 20210917 * @email: guanchao_gc@qq.com * @param: $ticket string 唯一字符串 */ public function createQrCodeByTick($ticket) { $url = "https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=" . urlencode($ticket); $imageInfo = $this->downLoadWeiXinQrcode($url); $filename = 'qrcode_' . date("Y-m-d_H_i_s") . '.jpg'; $filepath = './uploads/openQrcode/' . $filename; $local_file = fopen($filepath, 'w'); if (false !== $local_file) { if (false !== fwrite($local_file, $imageInfo['body'])) { fclose($local_file); } } $url = getenv('APP_URL') . "/xxxxxx/xxx/xxxxxxxxx/public/ " . $filename; return $url; } /** * @name: 下载微信生成的二维码 * @author: camellia * @date: 2021-12-08 * @email: guanchao_gc@qq.com * @param: $url string 二维码链接 */ public function downLoadWeiXinQrcode($url) { $ch = curl_init($url); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_NOBODY, 0); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $package = curl_exec($ch); $httpinfo = curl_getinfo($ch); curl_close($ch); return array_merge( array('body' => $package), array('header' => $httpinfo) ); }
上边的代码中,获取access_token的方法使用的是我封装的公共方法,详情请移步《微信公众号开发(二)微信公众号的access_token》
除了这部分,其他的应该不需要做太多的修改就可以使用了。
有好的建议吗,请在下方输入你的评论。
欢迎访问个人博客 guanchao.site
欢迎访问我的小程序:打开微信->发现->小程序->搜索“时间里的”