微信支付订单查询:
- 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并发送请求报文