概述
本demo,实现通过调用微信api接口发送公众号现金红包以及查询红包状态功能,应用场景是服务商替子商户发送现金红包(子商户模式)。普通商户模式也能使用,接口一致,参数调整一下就可以。所有功能代码都已封装好,替换完参数就可以直接运行。代码下载: http://www.demodashi.com/demo/15390.html
一、前言
微信红包分为普通红包和裂变红包,发放方式分为普通商户模式以及子商户模式,下面代码是以子商户模式发放普通红包写的。具体怎么选择看业务场景,代码原理是一样的,只是接口不一致,传参不同。
微信红包默认为1到200元,场景下为1-499元(调接口时参数必须传场景id),这些只需要平台设置,不需要申请。
其最小额度为0.3元,最大额度为4999元,这些需要向微信申请。(不一定能申请下来)
读代码之前最好对服务商,普通商户,特约商户等有个基本概念。最好先研究一遍文档,微信的文档写的还是很详细的。实在不明白可以打客服电话。
二、先看效果图
三、准备工作
开始前一定要准备好测试条件:
1、已有服务商账号,必须已经开通了服务商现金红包功能。产品中心--特约商户授权产品--运营工具--服务商现金红包
2、已申请特约商户,必须已经开通了现金红包功能。产品中心--我的产品--运营工具--现金红包
3、服务商和特约商户完成绑定授权
详细流程见开发文档: https://pay.weixin.qq.com/wiki/doc/api/tools/cash_coupon_sl.php?chapter=13_3&index=2
4、获取重要参数
包括:服务商id、服务商对应公众号appid、api密钥(服务商平台--账户中心--api安全--api密钥)、
api证书、特约商户号(子商户号)、子商户绑定的公众号appid、用户openid(子商户公众号下的)
关于准备工作的注意事项:
1、特约商户的申请以及授权绑定都需要审核,大概一到三天。
2、特约商户开通现金红包功能是有要求的,T+7账户能立即开通,其余的需要有90天的入驻以及30天的连续流水交易才能开通
3、特约商户绑定公众号时,两者主体必须一致,如果公众号绑定过其他商户,则特约商户的费率必须和这个商户一致
4、用户必须关注特约商户绑定的公众号,红包也是从这个公众号发出,钱是从特约商户账户出,红包发送记录是在服务商后台查
四、程序实现
项目代码截图:
以下摘部分重要代码说明过程:
1、服务商相关配置 application.yml
1 2 3 4 5 6 7 8 9 10 11 |
|
2、服务商对应的配置类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
|
3、调用测试类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
|
4、服务实现类,包含发送红包服务、以及红包状态查询服务
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 |
|
上面代码涉及到几个工具类:
HttpClientSSL.java http请求加微信证书,封装请求用的
WeiXinUtil.java 微信通用工具方法,生成订单号,拼接参数,生成签名等
XmlUtils.java 重写Xstream添加支持<![CDATA[]]>,封装接口的请求体使用
HttpClientSSL.java如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 |
|
WeiXinUtil.java如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 |
|
五、结束语
上面只是一些简单的逻辑实现,工具类不仅适用于发红包以及查红包,其他微信api也适用。
这里只是发红包以及查红包的接口实现,具体业务情景下,这些记录都是要入库的,而且对于红包的状态要考虑清楚,例如红包是否发送成功,用户是否领取成功(24小时没领取会退回),对于发送失败的订单是否要使用原订单号重发(防止资金重复发放)等。