临时二维码请求说明 必须携带参数 expire_seconds
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"}}}
永久二维码请求说明
http请求方式: POST URL: https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=TOKEN POST数据格式:json POST数据例子:{"action_name": "QR_LIMIT_SCENE", "action_info": {"scene": {"scene_id": 123}}} 或者也可以使用以下POST数据创建字符串形式的二维码参数: {"action_name": "QR_LIMIT_STR_SCENE", "action_info": {"scene": {"scene_str": "test"}}}
参数 | 说明 |
---|---|
expire_seconds | 该二维码有效时间,以秒为单位。 最大不超过2592000(即30天),此字段如果不填,则默认有效期为30秒。 |
action_name | 二维码类型,QR_SCENE为临时的整型参数值,QR_STR_SCENE为临时的字符串参数值,QR_LIMIT_SCENE为永久的整型参数值,QR_LIMIT_STR_SCENE为永久的字符串参数值 |
action_info | 二维码详细信息 |
scene_id | 场景值ID,临时二维码时为32位非0整型,永久二维码时最大值为100000(目前参数只支持1--100000) |
scene_str | 场景值ID(字符串形式的ID),字符串类型,长度限制为1到64 |
// 创建二维
$barcode = array(
'expire_seconds' => 2592000,
'action_name' => 'QR_STR_SCENE',
'action_info' => array(
'scene' => array(
// action_name 参数为 QR_SCENE 时为临时的整型参数值 使用 scene_id
'scene_id' => 1572,
// action_name 参数为 QR_STR_SCENE为临时的字符串参数值 使用 scene_str
'scene_str' => "oid_dasdasd",
),
)
);
正确的Json返回结果:
{"ticket":"gQH47joAAAAAAAAAASxodHRwOi8vd2VpeGluLnFxLmNvbS9xL2taZ2Z3TVRtNzJXV1Brb3ZhYmJJAAIEZ23sUwMEmm
3sUw==","expire_seconds":60,"url":"http://weixin.qq.com/q/kZgfwMTm72WWPkovabbI"}
参数 | 说明 |
---|---|
ticket | 获取的二维码ticket,凭借此ticket可以在有效时间内换取二维码。 |
expire_seconds | 该二维码有效时间,以秒为单位。 最大不超过2592000(即30天)。 |
url | 二维码图片解析后的地址,开发者可根据该地址自行生成需要的二维码图片 |
HTTP GET请求(请使用https协议)
https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=TICKET
提醒:TICKET记得进行UrlEncode
即可直接显示图片
扫码识别后跳转到公众号 将数据推送到 配置的api
返回的数据内容 有两种情况
第一种情况就是用户未关注的情况下 返回数据
tousername=gh_a2e329ac4fee;
// 用户openid
fromusername=owzrh5mbCgCa7akxfZR7Dj86tsUA;
createtime=1629625491;
// 消息类型 事件
msgtype=event;
// 订阅 事件
event=subscribe;
// 事件key 二维码扫识别时 并关注公众号 微信端会在将设置 scene_str 或 scene_id 设置的值 拼接上qescene_ 一起传入
eventkey=qrscene_oid_asda;
// 图片 ticketticket=gQH57zwAAAAAAAAAAS5odHRwOi8vd2VpeGluLnFxLmNvbS9xLzAyU2w1TmMtM1dmeEMxb2RqOXh4Y28AAgQNBiJhAwQAjScA;
// 用户openid
from=owzrh5mbCgCa7akxfZR7Dj86tsUA;
// 公众号原始id
to=gh_a2e329ac4fee;
time=1629625491;
type=text;
// 传过来的参数 scene_id 或 scene_str
scene=oid_dasdasd;
redirection=1;
// 来源 关注公众号
source=subscribe;
第二种情况 用户已经关注公众号
tousername=gh_a2e329ac4fee;
fromusername=owzrh5pLYQwSMMWS1InUlkMnAqMI;
createtime=1629624394;
msgtype=event;
// 扫码事件
event=SCAN;
// 传过来的参数 scene_str 或 scene_id 设置的值
eventkey=oid_asda; ticket=gQH57zwAAAAAAAAAAS5odHRwOi8vd2VpeGluLnFxLmNvbS9xLzAyU2w1TmMtM1dmeEMxb2RqOXh4Y28AAgQNBiJhAwQAjScA;
from=owzrh5pLYQwSMMWS1InUlkMnAqMI;
to=gh_a2e329ac4fee;
time=1629624394;
type=text;
// scene_str 或 scene_id 设置的值
scene=oid_asda;
redirection=1;
// 来源 二维码
source=qr;
// 判断是否是扫码 事件
if ($message['event'] == 'SCAN' || $message['event'] == "subscribe"){
$status = true;
// 判断关注是否是通过二维码扫码 跳转
if (strpos($message['scene'],'oid_') === false){
$status = false;
}
$oid = substr($message['scene'],4,strlen($message['scene']));
$content = "您的订单号为:".$oid;
if($status){
$account_api = WeAccount::create($_GET['id']);
$custom = array(
// 用户openid
'touser' => $message['fromusername'],
// 销售类型
'msgtype' => 'text',
'text' => array(
// 发送内容 url 编码
'content' => urlencode($content),
)
);
// 客服消息接口
$result = $account_api->sendCustomNotice($custom);
}
}