JAVA服務端訪問統一下單接口:
遇見的問題:
1.xml格式錯誤
首先明確自己是那種支付方式,我是APP支付方式。
1>要知道傳哪些參數
可以看一下《統一下單》的必填參數。其他可以不管,但是必填參數必須要。
header.setParameter("appid", WEIXIN_APPID);
header.setParameter("mch_id", WEIXIN_MCH_ID);
//header.setParameter("device_info", WEIXIN_DEVICE_INFO);
header.setParameter("nonce_str", WEIXIN_NONCE_STR);
header.setParameter("body", WEIXIN_BODY);
header.setParameter("out_trade_no", WEIXIN_OUT_TRADE_NO);
header.setParameter("total_fee", WEIXIN_TOTAL_FEE);
// header.setParameter("spbill_create_ip", request.getRemoteAddr());
// header.setParameter("spbill_create_ip", userIp);
header.setParameter("spbill_create_ip", "外網IP");
header.setParameter("notify_url", WEIXIN_NOTIFY_URL);
header.setParameter("trade_type", WEIXIN_TRADE_TYPE);
//header.setParameter("openid", WEIXIN_OPENID);
String signStr = createSign("UTF-8", header.getAllParameters());
System.out.println("統一下單signStr:" + signStr);
//header.setParameter("sign", signStr);
String xmlBody = buildXML(header.getAllParameters(), signStr);
System.out.println("統一下單xmlBody:" + xmlBody);
2>建立簽名字符串
可以看一下《createSign 微信支付生成簽名的算法方法》
3>生成簽證
可以看一下《微信支付sign簽名算法 規則》
4>創建請求報文
可以看一下《微信統一下單 創建請求報文的方法》特別注意一下。sign必須是報文的最后一項值。不然會報xml格式錯誤。還有就是請求的編碼必須是UTF-8。不然會有亂碼。
2.sign簽證錯誤
1>簽證校驗不通過
一個就是傳的參數必須要必填。
第二個就是sign必須要在xml的最后面
不然sign校驗不通過
3.返回給APP端,支付失敗,支付取消等情況
1>支付失敗的原因
clientHandler.setParameter("appid", WEIXIN_APPID);
clientHandler.setParameter("noncestr", noncestr);
clientHandler.setParameter("package", "Sign=WXPay");
clientHandler.setParameter("partnerid", WEIXIN_MCH_ID);
clientHandler.setParameter("prepayid", prepayid);
clientHandler.setParameter("timestamp", timestamp);
sign生成必須要這些參數。
不然支付會失敗。不能起調微信支付界面。