最近进行微信刷卡支付的功能开发:
开发环境:SpringBoot+H2+Java
1:申请微信服务号。
2:登录服务号开通微信支付功能。详情性查看官方文档(公司的服务号在我之前已经申请了)https://pay.weixin.qq.com/guide/webbased_payment.shtml
3:登录微信支付平台 设置/获取API密钥:
4:下载证书并安装:证书密码平台登录密码。
5:下载刷卡支付SDK:https://pay.weixin.qq.com/wiki/doc/api/micropay.php?chapter=11_1。
或者直接在maven工程里添加:
<dependency>
<groupId>com.github.wxpay</groupId>
<artifactId>wxpay-sdk</artifactId>
<version>0.0.3</version>
</dependency>
6:新建MyConfig
public class MyConfig implements WXPayConfig
设置基本参数(参数必须设置正确)
public String getAppID() { return "wx8888888888888888";//公众号获取的AppID } public String getMchID() { return "12888888";//商务号 } public String getKey() { return "88888888888888888888888888888888";//API密钥 }
7:根据API文档,设置相应的参数进行WXPlay的调用:https://pay.weixin.qq.com/wiki/doc/api/micropay.php?chapter=9_10&index=1
经过测试除了“撤销订单”接口返回数据说签名错误之外其它接口都正常。如果需要可使用“申请退款”来替代。实现方法都很简单,需要什么参数就传什么。
8:微信支付需要你根据要求进行刷卡支付的验收:官方说明:https://pay.weixin.qq.com/wiki/doc/api/micropay.php?chapter=23_1
(1)进行验收时使用:wxPay=new WXPay(config,true,true);进行实例化
(1)进行验收前首先调用:https://api.mch.weixin.qq.com/sandboxnew/pay/getsignkey接口获得沙箱密钥。
(2)获取到的沙箱密钥代替MyConfig中的getKey()里的数据。
(3)根据里面的金额进行刷卡、然后查询订单。等待几秒或者刷新自己就会看到测试结果。(有延时)
(4)最后一项可能有BUG,无论怎样都没法进入验证流程,反正最后一个是可选也就暂时不管了。
官方并没有提供获取沙漏密钥的方法,自己添加方法去实现:
//获取沙箱签名密钥
public static final String GETSIGNKEY_URL_SUFFIX="/pay/getsignkey";
public static final String SANDBOX_GETSIGNKEY_URL_SUFFIX="/sandboxnew/pay/getsignkey";
/**
* 获取沙箱Key
* @param reqData
* @param connectTimeoutMs
* @param readTimeoutMs
* @return
* @throws Exception
*/
public Map<String,String> GetSignKey(Map<String, String> reqData, int connectTimeoutMs, int readTimeoutMs) throws Exception{
String url;
if (this.useSandbox) {
url = WXPayConstants.SANDBOX_GETSIGNKEY_URL_SUFFIX;
}
else {
url = WXPayConstants.GETSIGNKEY_URL_SUFFIX;
}
String respXml = this.requestWithoutCert(url, this.fillRequestData(reqData), connectTimeoutMs, readTimeoutMs);
System.out.println(respXml);
return this.processResponseXml(respXml);
}
/**
* 获取沙箱Key
* @param reqData
* @param connectTimeoutMs
* @param readTimeoutMs
* @return
* @throws Exception
*/
public Map<String,String> GetSignKey(Map<String, String> reqData) throws Exception {
return this.GetSignKey(reqData, this.config.getHttpConnectTimeoutMs(), this.config.getHttpReadTimeoutMs());
}
9:验收测试结束后:把MyConfig中的getKey()改回正确的API密钥,使用:wxPay=new WXPay(config);进行实例化。
到这一步就完成了刷卡支付的开发了。至于其它业务就需要你自己去开发了。