前言
本编章主要是通过运行一个自费测试demo使其能够快速了解微信自费支付的实现流程, 也是个人实现微信自费demo之后的记录、总结官方文档:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1
一、准备操作
进行微信自费支付之前请先获得以下几项必要条件,公众号和商户号需要绑定
名称 | 字段名 | 示例值 | 描述 |
---|---|---|---|
公众号ID | appId | wxa1234abc456b13dc | 需要支付的公众号 |
商户号ID | mchId | 15312345681 | 支付收账的账号 |
商户号密钥 | mchKey | H793bz123456789abcdefg77FAd | 商户号密钥 |
域名 | isyoubao.cn | 微信支付使用的域名 | |
服务器 | 116.xxx.xx.81 | 发布项目的服务器 |
1.公众号ID
打开微信公众平台,登录对应公众号,在基本配置-公众号开发信息中获取
2.商户号
登录微信商户号:https://pay.weixin.qq.com
账户中心=》商户信息=》账户信息
3.商户号密钥
商户号密钥:账户中心=》API安全=》API密钥(需要保存,未保存忘记之后只能重置)
4.域名、服务器
用自己的域名或者服务器就好了,腾讯云,阿里云都可以
二、步入正题
1. 支付流程
初始化订单数据=》调用微信统一下单接口=》通过JS调起微信支付请求=》是否支付成功
2. 初始化订单数据
初始化数据其实就是创建一份模拟订单用于调用统一下单接口(可根据自己实际业务情况进行修改)
具体参数描述见:统一下单请求参数
WxPayUnifiedOrderRequest wxPay = new WxPayUnifiedOrderRequest();
wxPay.setAppid("wxa123abc45613dc");
wxPay.setTotalFee(1);
wxPay.setNonceStr(RandomUtils.getRandomStr());
wxPay.setOutTradeNo(RandomUtils.getRandomStr());
//用户openId,每个公众号下对应每个用户的唯一标识
wxPay.setOpenid("og6qg123456abcdefgWrllnyY");
wxPay.setBody("测试支付");
wxPay.setSpbillCreateIp("192.168.8.191");
wxPay.setNotifyUrl("https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind/2.9.5");
wxPay.setTradeType("JSAPI");
String sign1 = MakeSign.makeSign(wxPay);
wxPay.setSign(sign1);
3.获取wxService实例
该支付使用了第三方包,new出实例,得到他的实现WxPayServiceImpl
public WxPayService wxService() {
WxPayConfig payConfig = new WxPayConfig();
payConfig.setAppId("wxa0abcd12345613dc");
payConfig.setMchId("1531234561");
payConfig.setMchKey