微信支付訂單查詢:
- weconfig 中已設定好相應配置參數
- 相應工具類已寫好
- 官方文檔 微信訂單查詢接口API
/*
* 微信支付查詢方法
*
* @see com.AlipayWeChatPay.service.weChatPayService#query(java.util.Map)
*/
@Override
@Nullable
public String query(Map<String, String> params) throws Exception {
// 商品訂單号和微信訂單号
String out_trade_no = params.get("out_trade_no");
String transaction_id = params.get("transaction_id");
if (StringUtils.isBlank(out_trade_no) && StringUtils.isBlank(transaction_id)) {
return "微信訂單号和商品訂單号不能都為空";
}
// 時間,生成随機數
String currTime = PayForUtil.getCurrTime();
String strTime = currTime.substring(8, currTime.length());
String strRandom = PayForUtil.buildRandom(4) + "";
String nonce_str = strTime + strRandom;
// 參數封裝
SortedMap<Object, Object> packageParams = new TreeMap<Object, Object>();
packageParams.put("appid", weChatPayConfig.APP_ID);
packageParams.put("mch_id", weChatPayConfig.MCH_ID);
packageParams.put("nonce_str", nonce_str);
if (!StringUtils.isBlank(out_trade_no)) {
packageParams.put("out_trade_no", out_trade_no);
}
if (!StringUtils.isBlank(transaction_id)) {
packageParams.put("transaction_id", transaction_id);
}
String sign = PayForUtil.createSign("UTF-8", packageParams, weChatPayConfig.API_KEY); // 擷取簽名
packageParams.put("sign", sign);
String resquestXML = PayForUtil.getRequestXml(packageParams);
lg.info("請求參數封包:" + resquestXML);
String responseXml = httpUtil.postData(weChatPayConfig.QUERY_URL, resquestXML);
Map map = XMLUtil.xmlToMap(responseXml);
lg.info("微信支付響應參數的封包" + responseXml);
lg.info(map);
String result = (String) map.get("trade_state_desc");
return result;
}
weChatPayConfig.QUERY_URL 是微信訂單查詢的位址
PayForUtil.getRequestXml() 将map轉換為xml請求封包
微信其他接口API的調用方法與此類似,大多都是将參數封裝,生成sign并發送請求封包