扫码阅读
手机扫码阅读

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

31 2024-01-25

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

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

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

  • 用户未关注时,进行关注后
<xml> <ToUserName>ToUserName> <FromUserName>FromUserName> <CreateTime>1648535359CreateTime> <MsgType>MsgType> <Event>Event> <EventKey>EventKey> <Ticket>Ticket> xml> 
  • 用户已关注时
<xml> <ToUserName>ToUserName> <FromUserName>FromUserName> <CreateTime>1648535169CreateTime> <MsgType>MsgType> <Event>Event> <EventKey>EventKey> <Ticket>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>ToUserName> <FromUserName>FromUserName> <CreateTime>1648537854CreateTime> <MsgType>MsgType> <Event>Event> <EventKey>EventKey> <Ticket>Ticket> xml> 
<xml> <ToUserName>ToUserName> <FromUserName>FromUserName> <CreateTime>1648535766CreateTime> <MsgType>MsgType> <Event>Event> <EventKey>EventKey> <Ticket>Ticket> xml> 

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

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

原文链接: http://mp.weixin.qq.com/s?__biz=MzAwOTgzNjY4MA==&mid=2247484342&idx=2&sn=1792ab9fe43d994ad217038d5e861f20&chksm=9b58c251ac2f4b473f77dbbdcdd6bcf700a895a12bda958fa186e9d3010e858ba1c89fbf6efc#rd