需求解决方案步骤这里我们选择永久二维码代码见第二章
需求
用户通过微信扫码关注公众号获取红包解决方案
生成带参数二维码微信公众平台技术文档->账号管理->生成带参数的二维码微信公众平台技术文档->消息管理->接收消息-接收事件推送->扫描带参数二维码事件步骤
生成带参数的二维码扫码
是否关注公众号
已关注,则微信会将带场景值扫描事件推送给开发者,根据场景判断当前二维码是否失效
失效,公众号推送消息:当前二维码已失效未失效,获取当前扫码用户openid查询是否已经领取过红包
已领取,则公众号推送消息到微信用户通知今日已领取未领取
则调用发送红包接口,发送红包,发送成功,则存储当前微信用户信息,包含唯一 openid。设置当前扫描二维码失效
未关注,则用户可以关注公众号,关注后微信会将带场景值关注事件推送给开发者
根据场景值查询二维码是否失效
失效,公众号推送消息:当前二维码已失效未失效,获取当前扫码用户openid查询是否已经领取过红包
已领取,则公众号推送消息到微信用户通知今日已领取未领取
则调用发送红包接口,发送红包,发送成功,则存储当前微信用户信息,包含唯一 openid。设置当前扫描二维码失效生成带参数的二维码
目前有2种类型的二维码:
临时二维码,是有过期时间的,最长可以设置为在二维码生成后的30天(即2592000秒)后过期,但能够生成较多数量。临时二维码主要用于帐号绑定等不要求二维码永久保存的业务场景永久二维码,是无过期时间的,但数量较少(目前为最多10万个)。永久二维码主要用于适用于帐号绑定、用户来源统计等场景。用户扫描带场景值二维码时,可能推送以下两种事件:
用户还未关注公众号,则用户可以关注公众号,关注后微信会将带场景值关注事件推送给开发者。用户已经关注公众号,在用户扫描后会自动进入会话,微信也会将带场景值扫描事件推送给开发者。获取带参数的二维码的过程包括两步
首先创建二维码ticket然后凭借ticket到指定URL换取二维码
这里我们选择永久二维码
请求获取ticket:http请求方式
POST请求地址:
https://api./cgi-bin/qrcode/create?access_token=TOKENpost 数据格式 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_tokenaction_name :二维码类型action_info :二维码详细信息scene_str :场景值ID(字符串形式的ID),字符串类型,长度限制为1到64 首先,获取请求地址参数 TOKEN
请求方式
GET请求地址
https://api./cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET请求参数说明
grant_type :填写client_credentialappid:公众号APPIDsecret:公众号密钥成功返回说明 json
{
“access_token”:”ACCESS_TOKEN”,
“expires_in”:7200
}access_token 获取到的凭证expires_in 过期时间然后,将TOKEN添加到请求ticket地址,进行请求
成功返回说明
{
“ticket”:”xxx”,
“expire_seconds”:60,
“url”:”http:\/\/\/q\/xxx”
}参数说明
ticket :二维码ticket,凭借此ticket可以在有效时间内换取二维码expire_seconds:二维码有效时间,以秒为单位。 最大不超过2592000(即30天)url:二维码图片解析后的地址最后,通过ticket换取二维码
请求方式
GET请求地址【TICKET记得进行UrlEncode】
https://mp./cgi-bin/showqrcode?ticket=TICKET 返回说明
ticket正确情况下,http 返回码是200,是一张图片,可以直接展示或者下载。用户扫描带参数的二维码
用户未关注时,进行关注后的事件推送,xml数据包
<xml><ToUserName>接收人</ToUserName><FromUserName>发送人</FromUserName><CreateTime>创建时间,时间戳</CreateTime><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./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.)–>账户设置–>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>
代码见第二章
如果觉得《微信扫码关注公众号 公众号发放红包。一》对你有帮助,请点赞、收藏,并留下你的观点哦!