主要代码:
service接口
ServiceCommonInfo<Object> orderQuery(WxPayDto dto, HttpServletRequest request) throws Exception;
service接口实现
/**
* @Author: xxs
* @param dto
* @param request
* @Date: 2021/8/2 16:19
* @Description: 订单查询
* @Version: 2.9
* @Return: void
*/
@Override
public ServiceCommonInfo<Object> orderQuery(WxPayDto dto, HttpServletRequest request) throws Exception {
String payOrderNo = dto.getPayOrderNo();
//这里主要是确认自己系统存储订单状态是否是已支付,如果是就不用查询啦
String nonce_str = CommUtils.getRandomStringByLength(32);
Map<String, String> packageParams = new HashMap<>();
packageParams.put("appid", appId);
packageParams.put("mch_id",mch_id);
packageParams.put("nonce_str", nonce_str);
packageParams.put("out_trade_no", payOrderNo);
packageParams = CommUtils.paraFilter(packageParams);
String prestr = CommUtils.createLinkString(packageParams);
String sign = CommUtils.sign(prestr, key, "utf-8").toUpperCase();
packageParams.put("sign", sign);
logger.info("查询订单请求签名:" + sign );
String xml = "<xml version='1.0' encoding='gbk'>" + "<appid>" + appId + "</appid>"
+ "<mch_id>" + mch_id + "</mch_id>"
+ "<nonce_str>" + nonce_str + "</nonce_str>"
+ "<out_trade_no>" + payOrderNo + "</out_trade_no>"
+ "<nonce_str>" + nonce_str + "</nonce_str>"
+ "<sign>" + sign + "</sign>"
+ "</xml>";
String result = CommUtils.httpRequest(WeChatConstants.orderQueryUrl, "POST", xml);
Map map = CommUtils.doXMLParse(result);
Object returnCode = map.get("return_code");
Object result_code = map.get("result_code");
logger.info("查询订单return_code:" + returnCode+",result_code:"+result_code );
String statusStr = "";
Integer status = null;
if("SUCCESS".equals(returnCode) && "SUCCESS".equals(result_code)){
Object trade_state = map.get("trade_state");
String time_end = (String) map.get("time_end");//支付完成时间
Map<String,Object> mapData = new HashMap<>();
if ("SUCCESS".equals(trade_state)){
logger.info("支付成功,outTradeNo:"+payOrderNo);
statusStr = "订单支付成功";
status = CommonConstants.PAY_STATUS_YES;
}
if ("REFUND".equals(trade_state)){
logger.info("转入退款,outTradeNo:"+payOrderNo);
statusStr = "订单转入退款";
}
if ("NOTPAY".equals(trade_state)){
logger.info("未支付,outTradeNo:"+payOrderNo);
statusStr = "订单未支付";
status = CommonConstants.PAY_STATUS_NO;
}
if ("CLOSED".equals(trade_state)){
logger.info("已关闭,outTradeNo:"+payOrderNo);
statusStr = "订单已关闭";
status = CommonConstants.PAY_STATUS_CLOSE;
}
if ("REVOKED".equals(trade_state)){
logger.info("已撤销(刷卡支付),outTradeNo:"+payOrderNo);
statusStr = "已撤销(刷卡支付)";
}
if ("USERPAYING".equals(trade_state)){
logger.info("用户支付中,outTradeNo:"+payOrderNo);
statusStr = "用户支付中";
status = CommonConstants.PAY_STATUS_ING;
}
if ("PAYERROR".equals(trade_state)){
logger.info("支付失败(其他原因,如银行返回失败),outTradeNo:"+payOrderNo);
statusStr = "订单支付失败(其他原因,如银行返回失败)";
status = CommonConstants.PAY_STATUS_FAIL;
}
//业务处理
mapData.put("status",status);
return ServiceCommonInfo.success(statusStr, mapData);
}
return ServiceCommonInfo.serviceFail("查询失败", null);
}