微信支付开发总结
其实整体来讲做微信支付不难,由于第一次开发,前面一两天需要阅读它官方的开发文档和下载sdk看看它官方提供的源码,不得不吐槽一下,官方文档做的不是很好,有些问题讲得不够详细,并且提供的sandbox测试,一直出现网络超时的问题,只有让测试方用真实支付进行测试
首先是看微信的文档,了解它支付的整个流程
官方网址:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_1
JSAPI支付流程图:
流程认识:
第一步:就是将生成支付的金额页面或者是支付需要扫的二维码
例如:
第二步:
①用户通过操作前端页面向后台发送下单请求,传入支付金额等所必须的参数,
②随后后台调用微信的统一下单API进行,并对API响应的参数,进行金额,签名等进行验证,所有验证通过后,
③给前端返回所需要的参数,前端给微信发送请求,将后台返回的参数进行配置,配置成功即能进行支付操作
①请求参数(必填中‘是’的参数,统一下单时必须传)
例如参数:
<xml>
<appid>wx2421b1c4370ec43b</appid>
<attach>支付测试</attach>
<body>JSAPI支付测试</body>
<mch_id>10000100</mch_id>
<detail><![CDATA[{ "goods_detail":[ { "goods_id":"iphone6s_16G", "wxpay_goods_id":"1001", "goods_name":"iPhone6s 16G", "quantity":1, "price":528800, "goods_category":"123456", "body":"苹果手机" }, { "goods_id":"iphone6s_32G", "wxpay_goods_id":"1002", "goods_name":"iPhone6s 32G", "quantity":1, "price":608800, "goods_category":"123789", "body":"苹果手机" } ] }]]></detail>
<nonce_str>1add1a30ac87aa2db72f57a2375d8fec</nonce_str>
<notify_url>http://wxpay.wxutil.com/pub_v2/pay/notify.v2.php</notify_url>
<openid>oUpF8uMuAJO_M2pxb1Q9zNjWeS6o</openid>
<out_trade_no>1415659990</out_trade_no>
<spbill_create_ip>14.23.150.211</spbill_create_ip>
<total_fee>1</total_fee>
<trade_type>JSAPI</trade_type>
<sign>0CB01533B8C1EF103065174F50BCA001</sign>
</xml>
- 代码:
String notifyUrl = portalURL + ":" + serverPort + "/recharge/notify";
AppConfig config = new AppConfig();
WXPay wxpay = new WXPay(config, notifyUrl, false, false);
Map<String, String> data = new TreeMap<>();
//put
data.put("appid", appId);
data.put("mch_id", mchId);
data.put("body", prepareOrderBean.getBody() + new Date());
data.put("product_id", "12");
data.put("device_info", "WEB");
data.put("fee_type", "CNY");
data.put("nonce_str", PayCommonUtil.CreateNoncestr());
data.put("notify_url", notifyUrl);
data.put("openid", prepareOrderBean.getOpenId());
data.put("out_trade_no", prepareOrderBean.getOutTradeNo());
data.put("spbill_create_ip", "123.12.12.123");
data.put("total_fee", "1");
data.put("trade_type", "JSAPI");
//调用统一下单api
Map<String, String> unifiedOrder = wxpay.unifiedOrder(data);
下单成功后会返应的一些参数,例如:
<xml>
<return_code><![CDATA[SUCCESS]]></return_code>
<return_msg><![CDATA[OK]]></return_msg>
<appid><![CDATA[wx2421b1c4370ec43b]]></appid>
<mch_id><![CDATA[10000100]]></mch_id>
<nonce_str><![CDATA[IITRi