其实接入就是个封装的过程,把平台设置好了,封装好参数,避免着点坑就能接头,记录下吧
小程序支付比公众号支付简单,最后还是调h5的过程看下官方交互图:
开发文档:https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=9_1
关于一些基础的坑可以看我以前的记录,用的是ijpay:
引入pom(具体我也忘了需要几个了,如果缺的话去maven库找一下就行了)主要用IJPay:
<dependency>
<groupId>com.github.javen205</groupId>
<artifactId>IJPay</artifactId>
<version>1.0</version>
</dependency>
发送http应该需要
<dependency>
<groupId>com.squareup.okhttp</groupId>
<artifactId>okhttp</artifactId>
<version>2.7.5</version>
</dependency>
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>3.8.0</version>
</dependency>
<dependency>
<groupId>com.squareup.okio</groupId>
<artifactId>okio</artifactId>
<version>1.11.0</version>
</dependency>
上代码:
@ResponseBody
@RequestMapping(value = "/xcxpay.do", method = RequestMethod.GET)
public String xcxpay(HttpServletRequest request,HttpServletResponse response){
System.out.println("小程序支付------start");
String ip = IpKit.getRealIp(request);
WxPayApiConfigKit.putApiConfig(getApiConfig());
Map<String,String> params = WxPayApiConfigKit.getWxPayApiConfig()
.setOpenId("okPwj0bujNVEIlWSaF28wuaXvE")
.setAttach("测试")
.setBody("支付测试")
.setSpbillCreateIp(ip)
.setTotalFee("100")
.setTradeType(WxPayApi.TradeType.JSAPI)
.setNotifyUrl(notify_url)
.setOutTradeNo(String.valueOf(System.currentTimeMillis()))
.build();
System.out.println("params-->"+params);
String xmlResult = WxPayApi.pushOrder(false,params);
System.out.println("xmlResult - - - - -- "+xmlResult);
Map<String,String> result = PaymentKit.xmlToMap(xmlResult);
String return_code = result.get("return_code");
String return_msg = result.get("return_msg");
System.out.println("return_code--->"+return_code);
System.out.println("return_msg--->"+return_msg);
if (!PaymentKit.codeIsOK(return_code)){
log.info("return_code is null");
return null;
}
String result_code = result.get("result_code");
if (!PaymentKit.codeIsOK(result_code)){
log.info("result_code is null");
return null;
}
// 以下字段在return_code 和result_code都为SUCCESS的时候有返回
String prepay_id = result.get("prepay_id");
System.out.println("prepay_id-->"+prepay_id);
//封装调起微信支付的参数https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=7_7&index=5
Map<String, String> packageParams = new HashMap<String, String>();
packageParams.put("appId",WxPayApiConfigKit.getWxPayApiConfig().getAppId());
packageParams.put("timeStamp",System.currentTimeMillis() / 1000 + "");
packageParams.put("nonceStr", System.currentTimeMillis() + "");
packageParams.put("package", "prepay_id="+prepay_id);
packageParams.put("signType", "MD5");
String packageSign = PaymentKit.createSign(packageParams, WxPayApiConfigKit.getWxPayApiConfig().getPaternerKey());
packageParams.put("sign", packageSign);
String jsonStr = JsonKit.toJson(packageParams);
System.out.println("小程序支付的参数:-->"+jsonStr);
return jsonStr;
}
设置下appid等
public static WxPayApiConfig getApiConfig() {
return WxPayApiConfig.New()
.setAppId(appID)
.setMchId(mchID)
.setPaternerKey(partnerKey)
.setPayModel(WxPayApiConfig.PayModel.BUSINESSMODEL);
}
打了一些log确认一下走的路程,亲测 最后生成的json字符串如下,返回给前端即可:
{
"sign":"BCCC09AEF136443C820E71DE3A61F",
"appId":"wx15b96f75ebaf",
"timeStamp":"15211737",
"signType":"MD5",
"package":"prepay_id=wx201803221455382110426732635",
"nonceStr":"15217070"
}
前端调起支付:
文档:https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=7_7&index=5
回调和h5支付一样,注意去重,具体看h5支付:http://blog.csdn.net/goligory/article/details/78392505