微信扫描带参数的二维码事件推送返回 qrscene_0

最近在处理微信扫码关注公众号登录的需求时,遇到了扫描微信生成的带参数二维码后,事件推送中EventKey一直是0qrscene_0的问题。

首先确定的是在向微信申请二维码时,没有生成过 0 的参数,而且事件推送中的Ticket是正确的。

下面是错误的事件推送数据包:

  • 用户未关注时,进行关注后
<xml>
<ToUserName><![CDATA[gh_a786fbe98353]]></ToUserName>
<FromUserName><![CDATA[oW5Ux6ceqP-b0C-72qHEWZYk8Cr8]]></FromUserName>
<CreateTime>1648535359</CreateTime>
<MsgType><![CDATA[event]]></MsgType>
<Event><![CDATA[subscribe]]></Event>
<EventKey><![CDATA[qrscene_0]]></EventKey>
<Ticket><![CDATA[gQGv7zwAAAAAAAAAAS5odHRwOi8vd2VpeGluLnFxLmNvbS9xLzAydzVld0FUcmxjTkYxcEhEMnh5MVEAAgQvp0JiAwQ8AAAA]]></Ticket>
</xml>
  • 用户已关注时
<xml>
<ToUserName><![CDATA[gh_a786fbe98353]]></ToUserName>
<FromUserName><![CDATA[oW5Ux6ceqP-b0C-72qHEWZYk8Cr8]]></FromUserName>
<CreateTime>1648535169</CreateTime>
<MsgType><![CDATA[event]]></MsgType>
<Event><![CDATA[SCAN]]></Event>
<EventKey><![CDATA[0]]></EventKey>
<Ticket><![CDATA[gQHQ7zwAAAAAAAAAAS5odHRwOi8vd2VpeGluLnFxLmNvbS9xLzAySDFsdEEycmxjTkYxcVdDMmh5MTQAAgR_pkJiAwQ8AAAA]]></Ticket>
</xml>

按理说在用户未关注时,进行关注后EventKey的值为以qrscene_为前缀,加上二维码的参数值,而用户已关注时,EventKey的值为创建二维码时的二维码scene_id

于是将申请创建二维码ticket接口的 POST 数据打印了一下,发现了端倪

微信文档中的格式是这样的:

{
    "expire_seconds": 604800,
    "action_name": "QR_SCENE",
    "action_info": {
        "scene": {
            "scene_id": 123
        }
    }
}

而我发起的类似于:

{
    "expire_seconds": 604800,
    "action_name": "QR_SCENE",
    "action_info": {
        "scene_id": 123
    }
}

action_info 中缺少了scene字段,加上后进行验证可以收到正确的EventKey了。

<xml>
<ToUserName><![CDATA[gh_a786fbe98353]]></ToUserName>
<FromUserName><![CDATA[oW5Ux6ceqP-b0C-72qHEWZYk8Cr8]]></FromUserName>
<CreateTime>1648537854</CreateTime>
<MsgType><![CDATA[event]]></MsgType>
<Event><![CDATA[SCAN]]></Event>
<EventKey><![CDATA[100001]]></EventKey>
<Ticket><![CDATA[gQHu7zwAAAAAAAAAAS5odHRwOi8vd2VpeGluLnFxLmNvbS9xLzAyN3NrdkF1cmxjTkYxb1FOMk55MTQAAgT4sEJiAwQ8AAAA]]></Ticket>
</xml>
<xml>
<ToUserName><![CDATA[gh_a786fbe98353]]></ToUserName>
<FromUserName><![CDATA[oW5Ux6ceqP-b0C-72qHEWZYk8Cr8]]></FromUserName>
<CreateTime>1648535766</CreateTime>
<MsgType><![CDATA[event]]></MsgType>
<Event><![CDATA[subscribe]]></Event>
<EventKey><![CDATA[qrscene_100001]]></EventKey>
<Ticket><![CDATA[gQFU8DwAAAAAAAAAAS5odHRwOi8vd2VpeGluLnFxLmNvbS9xLzAyNm55YUFEcmxjTkYxb2NGMjF5MU8AAgTQqEJiAwQ8AAAA]]></Ticket>
</xml>

另外还需要注意的是:用户未关注扫带参数的二维码和已关注扫描带参数的二维码,传过来的EventEventKey是不一样:

Event一个是subscribe一个是SCAN,而EventKey一个带前缀qrscene_一个不带,需要进行区分处理。

1 条评论

发表评论

*

  • 您好,朋友:
    见字如面,
    I’M 李海博客,是最老的一批九零后。
    我通过 [虫洞] 页面随机穿越而来。
    祝您诸事顺遂,万事安康。
    期待和您再次相遇。
    毕竟,苍生众相,有趣的灵魂,可不多…
    ——I’M 李海博客。