代码参考自慕课网视频:https://www.imooc.com/learn/621
代码GitHub地址:https://github.com/xiaoming000/wechat.git
为了满足用户渠道推广分析和用户帐号绑定等场景的需要,公众平台提供了生成带参数二维码的接口。使用该接口可以获得多个带不同场景值的二维码,用户扫描后,公众号可以接收到事件推送。
官方文档地址:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1443433542
带参数的二维码二位码分为临时二维码和永久二维码,永久二维码有数量限制;
这里生成二维码对已关注的用户返回消息的实例;
<?php
require "public.php";
// http请求方式: POST
// URL: https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=TOKEN
// POST数据格式:json
// POST数据例子:{"expire_seconds": 604800, "action_name": "QR_SCENE", "action_info": {"scene": {"scene_id": 123}}}
// 或者也可以使用以下POST数据创建字符串形式的二维码参数:
// {"expire_seconds": 604800, "action_name": "QR_STR_SCENE", "action_info": {"scene": {"scene_str": "test"}}}
$fun = new PublicFunction();
$access_token = $fun -> getWxAccessToken();
$url = "https://api.weixin.qq.com/cgi-bin/getcallbackip?access_token=".$access_token;
$res = $fun -> http_curl($url);
// var_dump($access_token);
$url = "https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=".$access_token;
$arr = array(
"expire_seconds" => 604800,
"action_name" => "QR_SCENE",
"action_info" => array(
"scene" => array(
"scene_id" => 123
)
)
);
$post_arr = json_encode($arr);
$res = $fun -> http_curl($url, 'post', 'json', $post_arr);
// var_dump($res);
// 通过ticket换取二维码
$ticket = $res['ticket'];
$url = "https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=".urlencode($ticket);
// $res = $fun -> http_curl($url);
// var_dump($res);
echo '<img src="'.$url.'" />';
// 永久二维码就是post数组上不一样
二维码扫码已关注用户返回消息
官方文档地址(接收事件推送):https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140454
//判断该数据包是否是订阅的事件推送
if (strtolower($postObj->MsgType) == 'event') {
//如果是关注 subscribe事件
if (strtolower($postObj->Event) == 'subscribe') {
$info = array(
'toUser' => $postObj->FromUserName,
'fromUser' => $postObj->ToUserName,
'time' => time(),
'msgType' => 'text',
'content' => '欢迎关注我的微信公众号!'
);
$response -> res_text($info);
}// if end
// 二维码关注,用户已关注事件
if (strtolower($postObj->Event) == 'scan') {
$info = array(
'toUser' => $postObj->FromUserName,
'fromUser' => $postObj->ToUserName,
'time' => time(),
'msgType' => 'text',
'content' => '二维码关注!'
);
$response -> res_text($info);
}// if end
}//if end