记得上下班打卡 | git大法好,push需谨慎

Commit 6156a814 authored by zhengfuxin's avatar zhengfuxin

修改微信 查询接口

parent 8df86bbf
......@@ -53,7 +53,7 @@ public abstract class AbstractPayChannelStrategyImpl implements IPayChannelStrat
* @param bankReturnMsg
*/
@Transactional(rollbackFor = Exception.class)
protected boolean completeSuccessOrder(DragonOrdersDto dragonOrdersDto, String bankTrxNo, LocalDateTime timeEnd, String bankReturnMsg) {
public boolean completeSuccessOrder(DragonOrdersDto dragonOrdersDto, String bankTrxNo, LocalDateTime timeEnd, String bankReturnMsg) {
log.info("订单支付成功!");
dragonOrdersDto.setPaymentAt(timeEnd);
dragonOrdersDto.setPaymentId(bankTrxNo);// 设置银行流水号
......@@ -71,7 +71,7 @@ public abstract class AbstractPayChannelStrategyImpl implements IPayChannelStrat
* @param dragonOrdersDto
* @param bankReturnMsg
*/
protected boolean completeFailOrder(DragonOrdersDto dragonOrdersDto, String bankReturnMsg) {
public boolean completeFailOrder(DragonOrdersDto dragonOrdersDto, String bankReturnMsg) {
log.info("订单支付失败!");
// dragonOrdersDto.setPaymentAt(timeEnd);
// dragonOrdersDto.setPaymentId(bankTrxNo);// 设置银行流水号
......
......@@ -63,6 +63,35 @@ public class WepayBiz{
log.error(e.getMessage());
}
return respMap;
}
public Map<String, String> tradeQueryString(String outTradeNo, String appid) {
log.info("WepayBiz.tradeQuery-->> request outTradeNo:{} appid:{} ",outTradeNo,appid);
Map<String, String> respMap = new HashMap<>();
SortedMap<String, Object> paramMap = new TreeMap<>();
paramMap.put("appid", appid);
paramMap.put("mch_id", merchantId);
String nonce_str = PayWepayUtils.getInstance().getNonceStr();
paramMap.put("nonce_str", nonce_str);
paramMap.put("out_trade_no", outTradeNo);
String sign = PayWepayUtils.getInstance().createSign(paramMap);
paramMap.put("sign", sign);
String data = PayWepayUtils.getInstance().getRequestXml(paramMap);
try{
HttpPost httpost = new HttpPost("https://api.mch.weixin.qq.com/pay/orderquery");
httpost.setEntity(new StringEntity(data, "UTF-8"));
CloseableHttpResponse response = PayWepayUtils.getInstance().getHttpClient().execute(httpost);
HttpEntity entity = response.getEntity();
//接受到返回信息
String xmlStr = EntityUtils.toString(response.getEntity(), "UTF-8");
EntityUtils.consume(entity);
log.info("WepayBiz.tradeQuery-->> response xmlStr: {} ",xmlStr);
respMap = XmlUtil.xmlToMapString(xmlStr);
}catch (Exception e){
log.error(e.getMessage());
}
return respMap;
}
}
package com.liquidnet.service.dragon.channel.wepay.strategy.impl;
import com.liquidnet.common.exception.LiquidnetServiceException;
import com.liquidnet.commons.lang.util.JsonUtils;
import com.liquidnet.service.dragon.channel.strategy.biz.DragonPayBiz;
import com.liquidnet.service.dragon.channel.strategy.impl.PayChannelStrategyWepayImpl;
import com.liquidnet.service.dragon.channel.wepay.biz.WepayBiz;
import com.liquidnet.service.dragon.channel.wepay.resp.WepayPayRespDto;
import com.liquidnet.service.dragon.channel.wepay.strategy.annotation.StrategyWepayHandler;
import com.liquidnet.service.dragon.constant.DragonConstant;
import com.liquidnet.service.dragon.constant.DragonErrorCodeEnum;
import com.liquidnet.service.dragon.dto.DragonOrdersDto;
import com.liquidnet.service.dragon.dto.DragonPayBaseReqDto;
import com.liquidnet.service.dragon.dto.DragonPayBaseRespDto;
import com.liquidnet.service.dragon.dto.DragonPayOrderQueryRespDto;
import com.liquidnet.service.dragon.utils.DataUtils;
import com.liquidnet.service.dragon.utils.PayWepayUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
import java.util.Map;
import java.util.SortedMap;
import java.util.TreeMap;
......@@ -29,6 +40,14 @@ import java.util.TreeMap;
public class WepayStrategyMicropayImpl extends AbstractWepayStrategy {
@Value("${liquidnet.dragon.url}")
private String notifyUrl;
@Autowired
private DataUtils dataUtils;
@Autowired
private WepayBiz wepayBiz;
@Autowired
private DragonPayBiz dragonPayBiz;
@Autowired
private PayChannelStrategyWepayImpl payChannelStrategyWepay;
@Override
SortedMap<String, Object> appendRequestParam(SortedMap<String, Object> requestMap,DragonPayBaseReqDto dragonPayBaseReqDto) {
......@@ -63,11 +82,44 @@ public class WepayStrategyMicropayImpl extends AbstractWepayStrategy {
@Override
protected String getNotifyUrl() {
return notifyUrl + "/notify/wepay/app";
return notifyUrl + "";
}
@Override
protected String getAppid() {
return PayWepayUtils.getInstance().getAPP_ID();
}
@Override
public DragonPayOrderQueryRespDto checkOrderStatus(String code) {
DragonOrdersDto ordersDto = dataUtils.getPayOrderByCode(code);
//持久化通知记录
// 根据银行订单号获取支付信息
DragonOrdersDto dragonOrdersDto = dataUtils.getPayOrderByCode(code);
if (dragonOrdersDto == null) {
throw new LiquidnetServiceException(DragonErrorCodeEnum.TRADE_ERROR_NOT_EXISTS.getCode(),DragonErrorCodeEnum.TRADE_ERROR_NOT_EXISTS.getMessage());
}
if (DragonConstant.PayStatusEnum.STATUS_PAID.getCode().equals(dragonOrdersDto.getStatus())) {
throw new LiquidnetServiceException(DragonErrorCodeEnum.TRADE_ERROR_HAS_PAID.getCode(),DragonErrorCodeEnum.TRADE_ERROR_HAS_PAID.getMessage());
}
Map<String, String> resultMap = wepayBiz.tradeQueryString(code,this.getAppid());
DragonPayOrderQueryRespDto respDto = dragonPayBiz.buildPayOrderQueryRespDto(ordersDto);
Object returnCode = resultMap.get("return_code");
// 查询失败
if (null == returnCode || "FAIL".equals(returnCode)) {
throw new LiquidnetServiceException(DragonErrorCodeEnum.TRADE_WEPAY_QUERY_ERROR.getCode(),DragonErrorCodeEnum.TRADE_WEPAY_QUERY_ERROR.getMessage());
}
// 当trade_state为SUCCESS时才返回result_code
if ("SUCCESS".equals(resultMap.get("trade_state"))) {
if(PayWepayUtils.getInstance().notifySign(resultMap, resultMap.get("sign"))){
// 修改订单状态等。
payChannelStrategyWepay.completeSuccessOrder(dragonOrdersDto,resultMap.get("transaction_id"), LocalDateTime.now(),resultMap.toString());
respDto.setStatus(Integer.valueOf(DragonConstant.PayStatusEnum.STATUS_PAID.getCode()));
}else{
payChannelStrategyWepay.completeFailOrder(dragonOrdersDto,resultMap.toString());
}
}
return respDto;
}
}
......@@ -131,6 +131,25 @@ public class XmlUtil{
}
return xmlMap;
}
public static Map<String, String> xmlToMapString(String xmlDoc) throws DocumentException {
// 创建一个新的字符串
StringReader read = new StringReader(xmlDoc);
// 创建新的输入源SAX 解析器将使用 InputSource 对象来确定如何读取 XML 输入
InputSource source = new InputSource(read);
// 创建一个新的SAXBuilder
SAXReader saxReader = new SAXReader();
Map<String, String> xmlMap = new HashMap<String, String>();
Document doc = saxReader.read(source); // 通过输入源构造一个Document
Element root = doc.getRootElement(); // 取的根元素
List<Element> elements = root.elements(); // 得到根元素所有子元素的集合(根元素的子节点,不包括孙子节点)
for (Element et : elements) {
xmlMap.put(et.getName(), et.getText());
}
return xmlMap;
}
// /**
// * 从xml文件读取报文
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment