携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第35天,点击查看活动详情
微信的二维码真是个神奇的东西。在我们开发中,应用也是很多~
用户扫描带场景值(参数)二维码时,可能推送以下两种事件:
如果用户还未关注公众号,则用户可以关注公众号,关注后微信会将带场景值关注事件推送给开发者。
如果用户已经关注公众号,在用户扫描后会自动进入会话,微信也会将带场景值扫描事件推送给开发者。
获取带参数的二维码的过程包括两步,首先创建二维码ticket,然后凭借ticket到指定URL换取二维码。
以上这部分是官方给我们的扫描带参数二维码的一个解释……嗯,很官方。看着感觉好难的样子,其实就那样。
逻辑部分,官方已经给出,我就不赘述了,读懂上边官方文档中的那段话的逻辑就好。
下边,有我在实际项目中应用的创建带参数二维码并且,在创建成功之后下载到本地的一个方法,具体的,代码中都有注释。
/**
* @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
欢迎访问我的小程序:打开微信->发现->小程序->搜索“时间里的”