出于兴趣写了一个纯支付的模块,有兴趣的同学可以去看看(戳我)
———————————分隔线———————————–
微信APP支付大致的流程和支付宝APP支付有很大不同(想了解支付宝APP支付的同学点这里),其中略坑的一点就是MD5加密的方法需要自己写,好在微信官方给出了测试地址。
前置准备
微信的东西比支付宝要复杂一点,要先去注册开发者账号,然后一系列巴拉巴拉……,然后得到下面列出的我们开发需要的参数,下面的参数中TOKEN和CERT_PATH是需要退款和设计到其他功能才需要的,如果只做APP支付功能的同学可以忽略。
- APP_ID : 服务号的应用ID
- APP_SECRET : 服务号的应用密钥
- TOKEN : 服务号的配置token
- MCH_ID : 商户号
- API_KEY : API密钥
- SIGN_TYPE : 签名加密方式
- CERT_PATH : 微信支付证书名称、
支付流程
具体的流程大概就是后台拿到(或生成)自己的订单号后,拿着一堆参数按ASCII码(即abc…)排序后用MD5加密后调用微信的服务器地址拿到一个prepayId,再将prepayId和当前的参数再次排序和加密(二次加密)生成sign后返回前端进行支付,支付完成后,微信的后台会回调我们的后台接口。
Java代码
maven依赖
`<!-- 微信支付依赖 -->
<dependency>
<groupId>org.xmlpull</groupId>
<artifactId>xmlpull</artifactId>
<version>1.1.3.1 </version>
</dependency>
<dependency>
<groupId>net.sf.json-lib</groupId>
<artifactId>json-lib</artifactId>
<version>2.3</version>
<classifier>jdk15</classifier>
</dependency>
<!-- https://mvnrepository.com/artifact/com.thoughtworks.xstream/xstream -->
<dependency>
<groupId>com.thoughtworks.xstream</groupId>
<artifactId>xstream</artifactId>
<version>1.4.5</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.ning/async-http-client -->
<dependency>
<groupId>com.ning</groupId>
<artifactId>async-http-client</artifactId>
<version>1.8.13</version>
</dependency>`
Java代码
@ResponseBody
@RequestMapping(value="/wxpaySign",method=RequestMethod.POST)
public JsonResult getWXPaySign(double totalAmount,String userId,String out_trade_no,String ip)
throws JDOMException, IOException{
//预备参数
WXPayDTO wxPayDTO = new WXPayDTO();
String subject = "******";
String body = "******";
String nonceStr = setNonceStr();
long timeStamp = (long)CommonUtil.getSecondTimestamp(new Date());
String packageStr = "Sign=WXPay";
String total_fee = String