zoukankan      html  css  js  c++  java
  • 微信公众平台生成带场景参数二维码

    最近公司需要做一个智能试衣镜,微信导流是一个核心功能。就是用户扫描试衣镜上的二维码进入我们的公众号。为了唯一标识照片,需要动态生成二维码,该试衣镜后续的每张照片都会和一个二维码绑定。用户进入扫描二维码进入我们的公众号后,会携带二维码的参数值,我们的微信公众号后台程序就找到这些的照片,然后通过点击图片用户认证过程来实现照片和用户绑定。为了改善体验,我们还使用AI识别用户进入退出试衣镜行为,一个用户为一个session。同时增加用户手势识别等功能,以方便用户更换衣服实时查看用户试衣效果。

    微信场景二维码

    为了满足用户渠道推广分析的需要,微信公众平台提供了动态生成带参数二维码的接口。用户扫描后,公众号后台程序可以接收到事件推送。

    场景二维码分别两类:

    二维码:

    有过期时间,最大为1800秒,但能够生成较多数量

    永久二维码:

    无过期时间,数量较少(目前参数只支持1--100000)。

    两种二维码分别适用于帐号绑定、用户来源统计等场景。考虑到照片数量繁多,我们使用临时二维码实现,永久绑定通过用户微信认证绑定实现。

    用户扫描带场景值二维码时,后台服务器可接收到如下两种事件:

    如果用户还未关注公众号,扫码后则用户跳转到关注也面,关注后微信会将带场景值关注事件推送给开发者,此时开发者可主动推送刚刚的照片Url, 在URL请求用户授权,进而将用户信息和照片信息绑定,进而形成永久绑定。

    如果用户已经关注公众号,在用户扫描后会自动进入会话,微信也会将带场景值扫描事件推送给开发者。

    获取带参数的二维码的过程包括两步:首先创建二维码ticket,然后凭借ticket到指定URL换取二维码,这些操作都需要通过后台服务器实现。

    创建二维码ticket
    每次创建二维码ticket需要提供一个开发者自行设定的参数(scene_id),分别介绍临时二维码和永久二维码的创建二维码ticket过程。

    临时二维码请求说明
    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
    返回说明

    正确的Json返回结果:

    {"ticket":"gQH47joAAAAAAAAAASxodHRwOi8vd2VpeGluLnFxLmNvbS9xL2taZ2Z3TVRtNzJXV1Brb3ZhYmJJAAIEZ23sUwMEmm
    3sUw==","expire_seconds":60,"url":"http://weixin.qq.com/q/kZgfwMTm72WWPkovabbI"}
    参数 说明
    ticket 获取的二维码ticket,凭借此ticket可以在有效时间内换取二维码。
    expire_seconds 该二维码有效时间,以秒为单位。 最大不超过2592000(即30天)。
    url 二维码图片解析后的地址,开发者可根据该地址自行生成需要的二维码图片

    通过ticket换取二维码

    获取二维码ticket后,开发者可用ticket换取二维码图片。请注意,本接口无须登录态即可调用。

    请求说明

    HTTP GET请求(请使用https协议)https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=TICKET
    提醒:TICKET记得进行UrlEncode
    返回说明

    ticket正确情况下,http 返回码是200,是一张图片,可以直接展示或者下载。

    HTTP头(示例)如下:
    Accept-Ranges:bytes
    Cache-control:max-age=604800
    Connection:keep-alive
    Content-Length:28026
    Content-Type:image/jpg
    Date:Wed, 16 Oct 2013 06:37:10 GMT
    Expires:Wed, 23 Oct 2013 14:37:10 +0800
    Server:nginx/1.4.1
    错误情况下(如ticket非法)返回HTTP错误码404。

    扫描场景二维码事件

    用户扫描带场景值二维码时,可能推送以下两种事件:

    如果用户还未关注公众号,则用户可以关注公众号,关注后微信会将带场景值关注事件推送给开发者。
    如果用户已经关注公众号,则微信会将带场景值扫描事件推送给开发者。
    关注公众号事件推送
    当用户在商品主页中关注公众号,微信会推送该事件到商户填写的URL。推送的内容包括关注用户的基本信息、时间、关注场景及对应的码信息。

    推送XML示例

    <xml>
    <ToUserName><![CDATA[gh_fbe8a958756e]]></ToUserName>
    <FromUserName><![CDATA[otAzGjrS4AYCmeJM1GhEOcHXXTAo]]></FromUserName>
    <CreateTime>1433259128</CreateTime>
    <MsgType><![CDATA[event]]></MsgType>
    <Event><![CDATA[subscribe]]></Event>
    <EventKey><![CDATA[scene|keystandard|keystr|extinfo]></EventKey>
    </xml>
    推送参数说明

    参数 说明
    ToUserName 商户的公众号原始id。
    FromUserName 用户的openid。
    CreateTime 消息创建时间(整型)。
    MsgType 消息类型,event。
    Event 事件类型,subscribe为关注公众号事件。
    EventKey ”分割。①scene表示场景:scanbarcode为扫码场景,scanimage为扫封面(图像)场景。②keystandard表示商品编码标准:barcode为条码。③keystr表示商品编码内容。④extinfo表示调用“获取商品二维码接口”时传入的extinfo,为标识参数。

    在获取到该事件时可主动推送带图片缩略图的消息,点击进入我们的页面或者小程序进一步绑定用户获取用户信息

    进入公众号事件推送
    当用户从商品主页进入公众号会话时,微信会推送该事件到商户填写的URL。推送的内容包括用户的基本信息、时间、关注场景及对应的条码信息。

    推送XML示例

    <xml>
    <ToUserName><![CDATA[gh_fbe8a958756e]]></ToUserName>
    <FromUserName><![CDATA[otAzGjrS4AYCmeJM1GhEOcHXXTAo]]></FromUserName>
    <CreateTime>1433259128</CreateTime>
    <MsgType><![CDATA[event]]></MsgType>
    <Event><![CDATA[user_scan_product_enter_session]]></Event>
    <KeyStandard><![CDATA[ena13]]></KeyStandard>
    <KeyStr><![CDATA[6954767461373]]></KeyStr>
    <ExtInfo><![CDATA[]]></ExtInfo>
    </xml>
    推送参数说明

    参数 说明
    ToUserName 商户的公众号原始id。
    FromUserName 用户的openid。
    CreateTime 消息创建时间(整型)。
    MsgType 消息类型,event。
    Event 事件类型,user_scan_product_enter_session为进入公众号事件。
    KeyStandard 商品编码标准。
    KeyStr 商品编码内容。
    ExtInfo 调用“获取商品二维码接口”时传入的extinfo,为标识参数。
    后续流程和上面一样

    微信公众号后台服务程序实现

    推荐使用webot这个开源框架

    新用户关注事件处理代码

    已关注用户扫描事件处理代码

    /**************************************************
    * 本文来自CSDN博主"一点码客",喜欢请顶部点击关注
    * 转载请标明出处:http://blog.csdn.net/itchosen
    ***************************************************/
    ————————————————
    版权声明:本文为CSDN博主「一点码客」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/itchosen/article/details/78738521

  • 相关阅读:
    linux常用命令
    mysql 开发基础系列20 事务控制和锁定语句(上)
    sql server 性能调优之 资源等待 CXPACKET
    mysql 开发基础系列19 触发器
    mysql 开发基础系列18 存储过程和函数(下)
    mysql 开发基础系列17 存储过程和函数(上)
    sql server 性能调优之 资源等待PAGEIOLATCH
    mysql 开发基础系列16 视图
    mysql 开发基础系列15 索引的设计和使用
    sql server 性能调优之 当前用户请求分析 (1)
  • 原文地址:https://www.cnblogs.com/Alex80/p/15340223.html
Copyright © 2011-2022 走看看