总体思路
- 对参数进行加密
- 发送请求,请求回来的参数进行验签
- 后续你自己的处理逻辑
1.对参数进行加密
//所用到的参数
Map<String,Object> params = new HashMap<String,String>(7);
params.put("appid","");
params.put("mch_id","");
//微信的订单号和商户订单号2选1
params.put("transaction_id","");
//params.put("out_trade_no","");
params.put("nonce_str","");
params.put("sign_type","");
String sign = getSign(params);
params.put("sign",sign );
//得到请求的参数
String xmlStr = XmlUtil.mapToXmlStr(convert, "xml");
//对参数进行加密
public String getSign(Map<String, Object> convert) {
//转换成key=value&key1=value1
String urlMap = WxUtil.sortMap(convert,"你的商户key");
//加密
return SecureUtil.md5(urlMap).toUpperCase();
}
发送请求对返回参数进行验签
//hutool里的XmlUtil
Map<String, Object> responseMap = XmlUtil.xmlToMap(responseXml);
//判断result_code和return_code
//取出返回来的sign用于比较
String resonseSign = responseMap.get("sign").toString();
//对返回的sign进行验签,验签不需要sign所以移除
responseMap.remove("sign");
//调用上面的getSign(Map<String, Object> convert)方法进行加密
String sign = getSign(responseMap);
//true为验证通过
boolean verifySign = sign.equals(resonseSign );
接下来就是看订单状态[trade_state]
trade_state有7种状态
SUCCESS—支付成功
REFUND—转入退款
NOTPAY—未支付
CLOSED—已关闭
REVOKED—已撤销(刷卡支付)
USERPAYING–用户支付中
PAYERROR–支付失败(其他原因,如银行返回失败)