您的位置:首页 > 移动开发 > 微信开发

微信扫码关注公众号,公众号发放红包。一

2017-09-09 15:07 267 查看
需求

解决方案

步骤

这里我们选择永久二维码

代码见第二章

需求

用户通过微信扫码关注公众号获取红包

解决方案

生成带参数二维码

微信公众平台技术文档->账号管理->生成带参数的二维码

微信公众平台技术文档->消息管理->接收消息-接收事件推送->扫描带参数二维码事件

步骤

生成带参数的二维码

扫码

是否关注公众号

已关注,则微信会将带场景值扫描事件推送给开发者,根据场景判断当前二维码是否失效

失效,公众号推送消息:当前二维码已失效

未失效,获取当前扫码用户openid查询是否已经领取过红包

已领取,则公众号推送消息到微信用户通知今日已领取

未领取

则调用发送红包接口,发送红包,发送成功,则存储当前微信用户信息,包含唯一 openid。

设置当前扫描二维码失效

未关注,则用户可以关注公众号,关注后微信会将带场景值关注事件推送给开发者

根据场景值查询二维码是否失效

失效,公众号推送消息:当前二维码已失效

未失效,获取当前扫码用户openid查询是否已经领取过红包

已领取,则公众号推送消息到微信用户通知今日已领取

未领取

则调用发送红包接口,发送红包,发送成功,则存储当前微信用户信息,包含唯一 openid。

设置当前扫描二维码失效

生成带参数的二维码

目前有2种类型的二维码:

临时二维码,是有过期时间的,最长可以设置为在二维码生成后的30天(即2592000秒)后过期,但能够生成较多数量。临时二维码主要用于帐号绑定等不要求二维码永久保存的业务场景

永久二维码,是无过期时间的,但数量较少(目前为最多10万个)。永久二维码主要用于适用于帐号绑定、用户来源统计等场景。

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

用户还未关注公众号,则用户可以关注公众号,关注后微信会将带场景值关注事件推送给开发者。

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

获取带参数的二维码的过程包括两步

首先创建二维码ticket

然后凭借ticket到指定URL换取二维码

这里我们选择永久二维码

请求获取ticket:

http请求方式

POST

请求地址:

https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=TOKEN

post 数据格式 json

{

“action_name”: “QR_LIMIT_SCENE”,

“action_info”: {“scene”: {“scene_id”: 123}}

}

创建字符串形式的二维码参数:

{

“action_name”: “QR_LIMIT_STR_SCENE”,

“action_info”: {“scene”: {“scene_str”: “test”}}

}

参数说明

请求地址的TOKEN参数

微信公众平台技术文档->开始开发->获取access_token

action_name :二维码类型

action_info :二维码详细信息

scene_str :场景值ID(字符串形式的ID),字符串类型,长度限制为1到64

首先,获取请求地址参数 TOKEN

请求方式

GET

请求地址

https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET

请求参数说明

grant_type :填写client_credential

appid:公众号APPID

secret:公众号密钥

成功返回说明 json

{

“access_token”:”ACCESS_TOKEN”,

“expires_in”:7200

}

access_token 获取到的凭证

expires_in 过期时间

然后,将TOKEN添加到请求ticket地址,进行请求

成功返回说明

{

“ticket”:”xxx”,

“expire_seconds”:60,

“url”:”http:\/\/weixin.qq.com\/q\/xxx”

}

参数说明

ticket :二维码ticket,凭借此ticket可以在有效时间内换取二维码

expire_seconds:二维码有效时间,以秒为单位。 最大不超过2592000(即30天)

url:二维码图片解析后的地址

最后,通过ticket换取二维码

请求方式

GET

请求地址【TICKET记得进行UrlEncode】

https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=TICKET

返回说明

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

用户扫描带参数的二维码

用户未关注时,进行关注后的事件推送,xml数据包

<xml>
<ToUserName>接收人</ToUserName>
<FromUserName>发送人</FromUserName>
<CreateTime>创建时间,时间戳</CreateTime&
4000
gt;
<MsgType>消息类型【event】</MsgType>
<Event>事件类型【subscribe】</Event>
<EventKey>事件KEY值,qrscene_为前缀【scan事件无此前缀,】</EventKey>
<Ticket>二维码的ticket</Ticket>
</xml>


用户已关注时的事件推送

<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[FromUser]]></FromUserName>
<CreateTime>123456789</CreateTime>
<MsgType><![CDATA[event]]></MsgType>
<Event><![CDATA[SCAN]]></Event>
<EventKey><![CDATA[SCENE_VALUE]]></EventKey>
<Ticket><![CDATA[TICKET]]></Ticket>
</xml>


*:EventKey也就是生成二维码时的场景ID,比如生成二维码时传的场景ID为 A,那么此处EventKey 则为 A

知道了这个EventKEY值,

查询当前二维码是否失效

知道了ToUserName也就是接收人openid

查询当前微信唯一openid是否存在

如果当前二维码未失效,并且当前 openid 不存在数据库中,那么则可以调用发送红包接口进行红包发送。

发送红包【发送普通红包】

微信商户平台->现金红包->发放普通红包

发送红包金额范围1-200元

如果有企业号的话,建议使用微信商户平台->企业付款,毕竟 1块钱起步太贵了…

这里只介绍普通红包

请求方式

POST

请求地址

https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack

使用证书必须

请求参数

去文档看吧

微信商户平台->现金红包->发放普通红包

<xml>
<sign><![CDATA[红包签名key]]></sign>
<mch_billno><![CDATA[订单号]]></mch_billno>
<mch_id><![CDATA[商户号]]></mch_id>
<wxappid><![CDATA[公众号APPID]]></wxappid>
<send_name><![CDATA[发送方名称]]><send_name>
<re_openid><![CDATA[接收人openid]]></re_openid>
<total_amount><![CDATA[红包金额]]></total_amount>
<total_num><![CDATA[红包数量]]></total_num>
<wishing><![CDATA[恭喜发财]]></wishing>
<client_ip><![CDATA[调用接口的机器Ip地址]]></client_ip>
<act_name><![CDATA[活动名称]]></act_name>
<remark><![CDATA[备注]]></remark>
<scene_id><![CDATA[场景值,非必须]]></scene_id>
<consume_mch_id><![CDATA[资金授权商户号,非必须]]></consume_mch_id>
<nonce_str><![CDATA[随机字符串]]></nonce_str>
<risk_info>活动信息,非必须</risk_info>
</xml>


红包签名算法

接口规则->安全规范

这里请求的时候要带上请求证书

证书说明地址

证书下载地址

微信商户平台(pay.weixin.qq.com)–>账户设置–>API安全–>证书下载

使用证书

使用商户证书

◆ apiclient_cert.p12是商户证书文件,除PHP外的开发均使用此证书文件

◆ 商户如果使用.NET环境开发,请确认Framework版本大于2.0,必须在操作系统上双击安装证书apiclient_cert.p12后才能被正常调用。

◆ 商户证书调用或安装都需要使用到密码,该密码的值为微信商户号(mch_id)

成功返回说明,xml

<xml>
<return_code><![CDATA[SUCCESS]]></return_code>
<return_msg><![CDATA[发放成功.]]></return_msg>
<result_code><![CDATA[SUCCESS]]></result_code>
<err_code><![CDATA[0]]></err_code>
<err_code_des><![CDATA[发放成功.]]></err_code_des>
<mch_billno><![CDATA[00100104xxx]]></mch_billno>
<mch_id>10010404</mch_id>
<wxappid><![CDATA[wx6fa7e3bab7e15415]]></wxappid>
<re_openid><![CDATA[onqOjjmM1tad-3ROpncN-yUfa6uI]]></re_openid>
<total_amount>1</total_amount>
</xml>


代码见第二章

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息