在美宜佳消费的时候,觉得美宜佳的优惠卷直接在我出示付款码的时候可以帮我核销并进行相应的减免金额很神奇,之后在网上查询了2天基本没有人有说到这个事情,或者不了解这整个的业务逻辑,所以今天笔者耗费了3天时间(2天在查资料)将这整个流程打通。详情见下面:(如果有什么不合理的地方可以联系笔者进行修改)
流程:扫码微信支付码->获取微信 支付授权码->将微信授权码通过接口发送至微信->查询结果:返回的openid(最重要)->根据openid查询相应公众账号下的卡券列表->根据code查询卡券状态->根据card_id查询卡券详情->根据详情计算最终支付金额->发起微信支付->返回支付成功后根据code核销卡券
备注:通过授权码查询公众号Openid,调用查询后,该授权码只能由此商户号发起扣款,直至授权码更新
接口列表:
取付款码openid :
接口:https://pay.weixin.qq.com/wiki/doc/api/micropay.php?chapter=9_13&index=9
参数:
字段名 | 变量名 | 类型 | 必填 | 描述 |
---|---|---|---|---|
公众账号ID | appid | 是 | String(32) | 微信分配的公众账号ID |
商户号 | mch_id | 是 | String(32) | 微信支付分配的商户号 |
授权码 | auth_code | 是 | String(128) | 扫码支付授权码,设备读取用户微信中的条码或者二维码信息 |
随机字符串 | nonce_str | 是 | String(32) | 随机字符串,不长于32位 |
签名 | sign | 是 | String(32) | 签名 |
具体文档地址:https://pay.weixin.qq.com/wiki/doc/api/micropay.php?chapter=9_13&index=9
根据openid查询卡券
接口:https://api.weixin.qq.com/card/user/getcardlist?access_token=TOKE
参数:
参数名 | 必填 | 类型 | 示例值 | 描述 |
---|---|---|---|---|
openid | 是 | string(64) | 1231231 | 需要查询的用户openid |
card_id | 否 | string(32) | pFS7Fjg8kV1IdDz01xxxxx | 卡券ID。不填写时默认查询当前appid下的卡券。 |
具体文档地址:https://developers.weixin.qq.com/doc/offiaccount/Cards_and_Offer/
Managing_Coupons_Vouchers_and_Cards.html#1
card_id查询卡券详情
接口: https://api.weixin.qq.com/card/get?access_token=TOKE
参数:
参数名 | 必填 | 类型 | 示例值 | 描述 |
---|---|---|---|---|
card_id | 是 | string(32) | pFS7Fjg8kV1IdDz01r4SQwMkuCKc | 卡券ID。 |
具体文档地址:https://developers.weixin.qq.com/doc/offiaccount/Cards_and_Offer/
Managing_Coupons_Vouchers_and_Cards.html#2
根据code查询卡券状态
接口:https://api.weixin.qq.com/card/code/get?access_token=TOKE
参数:
参数名 | 必填 | 类型 | 示例值 | 描述 |
---|---|---|---|---|
code | 是 | string(20) | 110201201245 | 单张卡券的唯一标准。 |
card_id | 否 | string(32) | pFS7Fjg8kV1I dDz01r4SQwMkuCKc | 卡券ID代表一类卡券。自定义code卡券必填。 |
check_consume | 否 | bool | true | 是否校验code核销状态,填入true和false时的code异常状态返回数据不同。 |
具体文档地址:https://developers.weixin.qq.com/doc/offiaccount/Cards_and_Offer/
Managing_Coupons_Vouchers_and_Cards.html#1
根据code核销卡券
接口:https://api.weixin.qq.com/card/code/consume?access_token=TOKEN
参数:
参数名 | 必填 | 类型 | 示例值 | 描述 |
---|---|---|---|---|
card_id | 否 | string(32) | pFS7Fjg8kV1Id Dz01r4SQwMkuCKc | 卡券ID。创建卡券时use_custom_code填写true时必填。非自定义Code不必填写。 |
code | 是 | string(20) | 1231231 | 需核销的Code码。 |
具体文档地址:https://developers.weixin.qq.com/doc/offiaccount/Cards_and_Offer/
Managing_Coupons_Vouchers_and_Cards.html#1
具体步骤:
1.下载微信商户平台中开发文档的demo 这里笔者下载的是Java版的
地址:https://pay.weixin.qq.com/wiki/doc/api/micropay.php?chapter=11_1
2.下载之后,导入eclipse中:
3.导入eclipse之后,需要将WXPayConfig类实例化,先将WXPayConfig类里面的抽象方法加上public 再实例化
MyConfig.java
WXPayConfig.java
4.将wxPay.java文件中的fillRequestData中的
// reqData.put("sign_type", WXPayConstants.MD5);
// if (SignType.MD5.equals(this.signType)) {
// reqData.put("sign_type", WXPayConstants.MD5);
// } else if (SignType.HMACSHA256.equals(this.signType)) {
// reqData.put("sign_type", WXPayConstants.HMACSHA256);
// }注释掉
OK 微信SDK修改完毕,可以进行扫码,请求获取openid
获取到的openid之后,根据openid查询卡券获取当前公众号下领取的优惠卷或者会员卡等
OK,至此通过付款码获取微信公众号卡卷,并核销已完成,如果需要在这个过程中加上微信支付的话,可以在获取卡券详情的之后,将微信支付的金额进行计算之后发起微信支付,微信支付成功之后,再核销卡券;
卡券核销,创建等都可以再微信公众号开发文档中找到;
最后附上笔者修改之后的SDK,希望可以帮上你;
未经授权,不得转载本篇文章
本文作者:黄文勇
本文链接:https://www.3dcw.cn/index.php/archives/373/
最后修改时间:2020-05-29 17:46:10
本站未注明转载的文章均为原创,并采用 CC BY-NC-SA 4.0 授权协议,转载请注明来源,谢谢!
核销后:
{
"errcode":0,
"errmsg":"ok",
"card":{
"card_id":"pFS7Fjg8kV1IdDz01r4SQwMkuCKc"
},
"openid":"oFS7Fjl0WsZ9AMZqrI80nbIq8xrA"
}
可以收到以上信息