You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
72 lines
2.9 KiB
72 lines
2.9 KiB
package com.hfkj.common.pay;
|
|
|
|
import com.hfkj.common.pay.entity.WeChatPayReqInfo;
|
|
import com.hfkj.common.pay.entity.WechatCallBackInfo;
|
|
import com.hfkj.common.pay.util.HttpReqUtil;
|
|
import com.hfkj.common.pay.util.SignatureUtil;
|
|
import com.hfkj.common.pay.util.XmlUtil;
|
|
import com.hfkj.service.pay.PayRecordService;
|
|
import org.slf4j.Logger;
|
|
import org.slf4j.LoggerFactory;
|
|
import org.springframework.stereotype.Component;
|
|
import org.springframework.web.bind.annotation.RequestMapping;
|
|
import org.springframework.web.bind.annotation.ResponseBody;
|
|
|
|
import javax.annotation.Resource;
|
|
import java.util.Map;
|
|
import java.util.SortedMap;
|
|
import java.util.TreeMap;
|
|
|
|
@Component
|
|
public class WechatPayUtil {
|
|
|
|
private static Logger log = LoggerFactory.getLogger(WechatPayUtil.class);
|
|
@Resource
|
|
private PayRecordService payRecordService;
|
|
|
|
/**
|
|
* @throws
|
|
* @Title: goAlipay
|
|
* @Description: 微信支付请求体
|
|
* @author: 魏真峰
|
|
* @param: [orderId]
|
|
* @return: java.lang.String
|
|
*/
|
|
@RequestMapping("/goWechatPay")
|
|
@ResponseBody
|
|
public SortedMap<Object,Object> goWechatPay(WeChatPayReqInfo weChatPayReqInfo, Map<String,String> map) throws Exception{
|
|
log.info("微信支付 -> 组装支付参数:开始");
|
|
|
|
String sign = SignatureUtil.createSign(weChatPayReqInfo, map.get("api_key"), "UTF-8");
|
|
weChatPayReqInfo.setSign(sign);
|
|
String unifiedXmL = XmlUtil.toSplitXml(weChatPayReqInfo);
|
|
|
|
String unifiedOrderResultXmL = HttpReqUtil.HttpsDefaultExecute("POST", map.get("unified_order_url"), null, unifiedXmL, null);
|
|
// 签名校验
|
|
SortedMap<Object,Object> sortedMap = null;
|
|
if (SignatureUtil.checkIsSignValidFromWeiXin(unifiedOrderResultXmL, map.get("api_key"), "UTF-8")) {
|
|
// 组装支付参数
|
|
WechatCallBackInfo wechatCallBackInfo = XmlUtil.getObjectFromXML(unifiedOrderResultXmL, WechatCallBackInfo.class);
|
|
Long timeStamp = System.currentTimeMillis()/1000;
|
|
sortedMap = new TreeMap<>();
|
|
sortedMap.put("appId",map.get("app_id"));
|
|
// sortedMap.put("partnerid",SysConst.getSysConfig().getMch_id());
|
|
// sortedMap.put("prepayid",wechatCallBackInfo.getPrepay_id());
|
|
sortedMap.put("nonceStr",wechatCallBackInfo.getNonce_str());
|
|
sortedMap.put("timeStamp",timeStamp.toString());
|
|
sortedMap.put("signType","MD5");
|
|
sortedMap.put("package", "prepay_id=" + wechatCallBackInfo.getPrepay_id());
|
|
String secondSign = SignatureUtil.createSign(sortedMap, map.get("api_key"), "UTF-8");
|
|
sortedMap.put("sign",secondSign);
|
|
|
|
|
|
log.info("微信支付 -> 组装支付参数:完成");
|
|
} else {
|
|
log.error("微信支付 -> 组装支付参数:支付信息错误");
|
|
log.error("错误信息:" + unifiedOrderResultXmL);
|
|
}
|
|
|
|
return sortedMap;
|
|
}
|
|
|
|
}
|
|
|