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

Commit 16fee3db authored by anjiabin's avatar anjiabin

提交unionpay代码

parent 8aed8bc2
...@@ -37,7 +37,7 @@ public class DragonConstant { ...@@ -37,7 +37,7 @@ public class DragonConstant {
} }
public enum DeviceFromEnum{ public enum DeviceFromEnum{
WEB("web",""),WAP("wap","") WEB("web",""),WAP("wap",""),WAPPAGE("wappage","")
,APP("app",""),JS("js",""),APPLET("applet",""); ,APP("app",""),JS("js",""),APPLET("applet","");
private String code; private String code;
private String message; private String message;
......
...@@ -36,6 +36,8 @@ public class DragonPayBaseRespDto implements Serializable { ...@@ -36,6 +36,8 @@ public class DragonPayBaseRespDto implements Serializable {
private PayData payData; private PayData payData;
private String payType;
@Data @Data
@JsonInclude(JsonInclude.Include.NON_NULL) @JsonInclude(JsonInclude.Include.NON_NULL)
public static class PayData{ public static class PayData{
......
...@@ -35,6 +35,7 @@ liquidnet: ...@@ -35,6 +35,7 @@ liquidnet:
appId: wx3498304dda39c5a1 appId: wx3498304dda39c5a1
partnerKey: itIuO65O9yKmemOu3S8g1S4orqvCGwXK partnerKey: itIuO65O9yKmemOu3S8g1S4orqvCGwXK
unionpay: unionpay:
merchantId: 777290058194736
gateway-url: https://gateway.test.95516.com gateway-url: https://gateway.test.95516.com
certs-path: /Users/anjiabin/certs certs-path: /Users/anjiabin/certs
...@@ -91,6 +91,7 @@ public abstract class AbstractAlipayStrategy implements IAlipayStrategy { ...@@ -91,6 +91,7 @@ public abstract class AbstractAlipayStrategy implements IAlipayStrategy {
*/ */
protected DragonPayBaseRespDto buildCommonRespDto(DragonPayBaseReqDto dragonPayBaseReqDto){ protected DragonPayBaseRespDto buildCommonRespDto(DragonPayBaseReqDto dragonPayBaseReqDto){
DragonPayBaseRespDto respDto = new DragonPayBaseRespDto(); DragonPayBaseRespDto respDto = new DragonPayBaseRespDto();
respDto.setPayType(dragonPayBaseReqDto.getPayType());
respDto.setCode(dragonPayBaseReqDto.getCode()); respDto.setCode(dragonPayBaseReqDto.getCode());
respDto.setOrderCode(dragonPayBaseReqDto.getOrderCode()); respDto.setOrderCode(dragonPayBaseReqDto.getOrderCode());
DragonPayBaseRespDto.PayData payData = new DragonPayBaseRespDto.PayData(); DragonPayBaseRespDto.PayData payData = new DragonPayBaseRespDto.PayData();
......
package com.liquidnet.service.dragon.channel.strategy.impl; package com.liquidnet.service.dragon.channel.strategy.impl;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alipay.api.AlipayApiException;
import com.alipay.api.internal.util.AlipaySignature;
import com.liquidnet.common.exception.LiquidnetServiceException; import com.liquidnet.common.exception.LiquidnetServiceException;
import com.liquidnet.commons.lang.util.DateUtil;
import com.liquidnet.commons.lang.util.StringUtil;
import com.liquidnet.service.base.ResponseDto; import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.dragon.biz.DragonServiceCommonBiz; import com.liquidnet.service.dragon.biz.DragonServiceCommonBiz;
import com.liquidnet.service.dragon.channel.alipay.biz.AlipayBiz;
import com.liquidnet.service.dragon.channel.alipay.constant.AlipayConstant; import com.liquidnet.service.dragon.channel.alipay.constant.AlipayConstant;
import com.liquidnet.service.dragon.channel.alipay.strategy.AlipayStrategyContext;
import com.liquidnet.service.dragon.channel.strategy.annotation.StrategyPayChannelHandler; import com.liquidnet.service.dragon.channel.strategy.annotation.StrategyPayChannelHandler;
import com.liquidnet.service.dragon.channel.strategy.biz.DragonPayBiz; import com.liquidnet.service.dragon.channel.strategy.biz.DragonPayBiz;
import com.liquidnet.service.dragon.channel.unionpay.biz.UnionpayBiz;
import com.liquidnet.service.dragon.channel.unionpay.strategy.UnionpayStrategyContext;
import com.liquidnet.service.dragon.constant.DragonConstant; import com.liquidnet.service.dragon.constant.DragonConstant;
import com.liquidnet.service.dragon.constant.DragonErrorCodeEnum; import com.liquidnet.service.dragon.constant.DragonErrorCodeEnum;
import com.liquidnet.service.dragon.dto.DragonOrdersDto; import com.liquidnet.service.dragon.dto.DragonOrdersDto;
...@@ -23,11 +19,9 @@ import com.liquidnet.service.dragon.service.impl.DragonOrderRefundsServiceImpl; ...@@ -23,11 +19,9 @@ import com.liquidnet.service.dragon.service.impl.DragonOrderRefundsServiceImpl;
import com.liquidnet.service.dragon.utils.DataUtils; import com.liquidnet.service.dragon.utils.DataUtils;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import java.time.LocalDateTime;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
...@@ -45,13 +39,13 @@ import java.util.Map; ...@@ -45,13 +39,13 @@ import java.util.Map;
@StrategyPayChannelHandler(DragonConstant.PayChannelEnum.UNIONPAY) @StrategyPayChannelHandler(DragonConstant.PayChannelEnum.UNIONPAY)
public class PayChannelStrategyUnionpayImpl extends AbstractPayChannelStrategyImpl { public class PayChannelStrategyUnionpayImpl extends AbstractPayChannelStrategyImpl {
@Autowired @Autowired
private AlipayStrategyContext alipayStrategyContext; private UnionpayStrategyContext unionpayStrategyContext;
@Autowired @Autowired
private DataUtils dataUtils; private DataUtils dataUtils;
@Autowired @Autowired
private AlipayBiz alipayBiz; private UnionpayBiz unionpayBiz;
@Autowired @Autowired
private DragonPayBiz dragonPayBiz; private DragonPayBiz dragonPayBiz;
...@@ -62,29 +56,18 @@ public class PayChannelStrategyUnionpayImpl extends AbstractPayChannelStrategyIm ...@@ -62,29 +56,18 @@ public class PayChannelStrategyUnionpayImpl extends AbstractPayChannelStrategyIm
@Autowired @Autowired
private DragonOrderRefundsServiceImpl dragonOrderRefundsService; private DragonOrderRefundsServiceImpl dragonOrderRefundsService;
@Value("${liquidnet.dragon.alipay.appId}")
private String appId;
@Value("${liquidnet.dragon.alipay.merchantPubKey}")
private String merchantPubKey;
@Value("${liquidnet.dragon.alipay.merchantPrivateKey}")
private String merchantPrivateKey;
@Value("${liquidnet.dragon.alipay.signtType}")
private String signtType;
@Value("${liquidnet.dragon.alipay.charset}")
private String charset;
@Override @Override
public ResponseDto<DragonPayBaseRespDto> dragonPay(DragonPayBaseReqDto dragonPayBaseReqDto) { public ResponseDto<DragonPayBaseRespDto> dragonPay(DragonPayBaseReqDto dragonPayBaseReqDto) {
return alipayStrategyContext.getStrategy(dragonPayBaseReqDto.getDeviceFrom()).dragonPay(dragonPayBaseReqDto); return unionpayStrategyContext.getStrategy(dragonPayBaseReqDto.getDeviceFrom()).dragonPay(dragonPayBaseReqDto);
} }
@Override @Override
public String dragonNotify(HttpServletRequest request,String payType,String deviceFrom) { public String dragonNotify(HttpServletRequest request,String payType,String deviceFrom) {
log.info("alipay-->notify-->begin payType:{} deviceFrom:{}",payType,deviceFrom); log.info("unionpay-->notify-->begin payType:{} deviceFrom:{}",payType,deviceFrom);
Map<String, String[]> requestParams = request.getParameterMap(); Map<String, String[]> requestParams = request.getParameterMap();
Map<String, String> notifyMap = new HashMap<String, String>(); Map<String, String> notifyMap = new HashMap<String, String>();
notifyMap = alipayBiz.parseNotifyMsg(requestParams); notifyMap = unionpayBiz.parseNotifyMsg(requestParams);
log.info("dragonNotify-->alipay json : {}", JSON.toJSONString(notifyMap)); log.info("dragonNotify-->unionpay json : {}", JSON.toJSONString(notifyMap));
log.info("接收到{}支付结果{}", payType, notifyMap); log.info("接收到{}支付结果{}", payType, notifyMap);
...@@ -111,43 +94,43 @@ public class PayChannelStrategyUnionpayImpl extends AbstractPayChannelStrategyIm ...@@ -111,43 +94,43 @@ public class PayChannelStrategyUnionpayImpl extends AbstractPayChannelStrategyIm
} }
try { try {
if (AlipaySignature.rsaCheckV1(notifyMap, merchantPubKey, "UTF-8", "RSA2")){ // if (AlipaySignature.rsaCheckV1(notifyMap, merchantPubKey, "UTF-8", "RSA2")){
String tradeStatus = notifyMap.get("trade_status"); // String tradeStatus = notifyMap.get("trade_status");
boolean notifyResult = false; // boolean notifyResult = false;
//
if (AlipayConstant.AlipayTradeStateEnum.TRADE_SUCCESS.name().equals(tradeStatus) // if (AlipayConstant.AlipayTradeStateEnum.TRADE_SUCCESS.name().equals(tradeStatus)
||AlipayConstant.AlipayTradeStateEnum.TRADE_FINISHED.name().equals(tradeStatus)) { // ||AlipayConstant.AlipayTradeStateEnum.TRADE_FINISHED.name().equals(tradeStatus)) {
//
String gmtPaymentStr = notifyMap.get("gmt_payment");// 付款时间 // String gmtPaymentStr = notifyMap.get("gmt_payment");// 付款时间
LocalDateTime timeEnd = null; // LocalDateTime timeEnd = null;
if (!StringUtil.isEmpty(gmtPaymentStr)) { // if (!StringUtil.isEmpty(gmtPaymentStr)) {
timeEnd = DateUtil.Formatter.yyyyMMddHHmmss.parse(gmtPaymentStr); // timeEnd = DateUtil.Formatter.yyyyMMddHHmmss.parse(gmtPaymentStr);
} // }
notifyResult = this.completeSuccessOrder(dragonOrdersDto, notifyMap.get("trade_no"), timeEnd, notifyMap.toString()); // notifyResult = this.completeSuccessOrder(dragonOrdersDto, notifyMap.get("trade_no"), timeEnd, notifyMap.toString());
} else { // } else {
notifyResult = this.completeFailOrder(dragonOrdersDto, notifyMap.toString()); // notifyResult = this.completeFailOrder(dragonOrdersDto, notifyMap.toString());
} // }
if(notifyResult){ // if(notifyResult){
returnStr = "success"; // returnStr = "success";
} // }
} else {// 验证失败 // } else {// 验证失败
log.error("alipay notify fail code:{} msg:{} ",DragonErrorCodeEnum.TRADE_ALIPAY_SIGN_ERROR.getCode(),DragonErrorCodeEnum.TRADE_ALIPAY_SIGN_ERROR.getMessage()); // log.error("unionpay notify fail code:{} msg:{} ",DragonErrorCodeEnum.TRADE_ALIPAY_SIGN_ERROR.getCode(),DragonErrorCodeEnum.TRADE_ALIPAY_SIGN_ERROR.getMessage());
return returnStr; // return returnStr;
} // }
} catch (AlipayApiException e) { } catch (Exception e) {
log.error("alipay notify fail 验签失败:e:{}" , e); log.error("unionpay notify fail 验签失败:e:{}" , e);
log.error("alipay notify fail 验签失败:code:{} msg:{}" ,DragonErrorCodeEnum.TRADE_ALIPAY_SIGN_ERROR.getCode(),DragonErrorCodeEnum.TRADE_ALIPAY_SIGN_ERROR.getMessage()); log.error("unionpay notify fail 验签失败:code:{} msg:{}" ,DragonErrorCodeEnum.TRADE_ALIPAY_SIGN_ERROR.getCode(),DragonErrorCodeEnum.TRADE_ALIPAY_SIGN_ERROR.getMessage());
} }
log.info("返回支付通道{}信息{}", payType, returnStr); log.info("返回支付通道{}信息{}", payType, returnStr);
log.info("alipay-->notify-->end payType:{} deviceFrom:{}",payType,deviceFrom); log.info("unionpay-->notify-->end payType:{} deviceFrom:{}",payType,deviceFrom);
return returnStr; return returnStr;
} }
@Override @Override
public DragonPayOrderQueryRespDto checkOrderStatus(String code) { public DragonPayOrderQueryRespDto checkOrderStatus(String code) {
DragonOrdersDto ordersDto = dataUtils.getPayOrderByCode(code); DragonOrdersDto ordersDto = dataUtils.getPayOrderByCode(code);
Map<String, Object> resultMap = alipayBiz.tradeQuery(code); Map<String, Object> resultMap = unionpayBiz.tradeQuery(code);
DragonPayOrderQueryRespDto respDto = dragonPayBiz.buildPayOrderQueryRespDto(ordersDto); DragonPayOrderQueryRespDto respDto = dragonPayBiz.buildPayOrderQueryRespDto(ordersDto);
if ("10000".equals(resultMap.get("code"))) { if ("10000".equals(resultMap.get("code"))) {
// 当返回状态为“TRADE_FINISHED”交易成功结束和“TRADE_SUCCESS”支付成功时更新交易状态 // 当返回状态为“TRADE_FINISHED”交易成功结束和“TRADE_SUCCESS”支付成功时更新交易状态
......
...@@ -10,24 +10,6 @@ package com.liquidnet.service.dragon.channel.unionpay.constant; ...@@ -10,24 +10,6 @@ package com.liquidnet.service.dragon.channel.unionpay.constant;
* @date 2021/11/8 18:12 * @date 2021/11/8 18:12
*/ */
public class UnionpayConstant { public class UnionpayConstant {
public enum UnionpayTradeStateEnum { //默认配置的是UTF-8
TRADE_CLOSED ("TRADE_CLOSED","交易关闭"), public static String encoding = "UTF-8";
TRADE_FINISHED ("TRADE_FINISHED","支付完成"),
TRADE_SUCCESS ("TRADE_SUCCESS","支付成功"),
WAIT_BUYER_PAY ("WAIT_BUYER_PAY","交易创建"),
FAIL("","支付失败");
private String code;
private String message;
UnionpayTradeStateEnum(String code, String message) {
this.code = code;
this.message = message;
}
public String getCode() {
return code;
}
}
} }
package com.liquidnet.service.dragon.channel.unionpay.req;
import lombok.Data;
/**
* @author AnJiabin <anjiabin@zhengzai.tv>
* @version V1.0
* @Description: TODO
* @class: UnionpayBaseReq
* @Package com.liquidnet.service.dragon.channel.unionpay.req
* @Copyright: LightNet @ Copyright (c) 2021
* @date 2021/11/10 11:20
*/
@Data
public class UnionpayBaseReq {
/***银联全渠道系统,产品参数***/
private String version;
private String encoding;
private String signMethod;
private String txnType;
private String txnSubType;
private String bizType;
private String channelType;
/***商户接入参数***/
private String merId;
private String accessType;
private String orderId;
private String txnTime;
private String txnAmt;
private String currencyCode;
private String backUrl;
/***app支付接入***/
private String accType; //
/***wap支付接入***/
private String riskRateInfo;
private String frontUrl;
private String payTimeout;
}
...@@ -4,28 +4,19 @@ import com.alibaba.fastjson.JSON; ...@@ -4,28 +4,19 @@ import com.alibaba.fastjson.JSON;
import lombok.Data; import lombok.Data;
import java.io.Serializable; import java.io.Serializable;
import java.math.BigDecimal;
/** /**
* @author AnJiabin <anjiabin@zhengzai.tv> * @author AnJiabin <anjiabin@zhengzai.tv>
* @version V1.0 * @version V1.0
* @Description: TODO * @Description: TODO
* @class: AlipayTradePayReq * @class: UnionpayTradePayReq
* @Package com.liquidnet.service.dragon.channel.alipay.req * @Package com.liquidnet.service.dragon.channel.unionpay.req
* @Copyright: LightNet @ Copyright (c) 2021 * @Copyright: LightNet @ Copyright (c) 2021
* @date 2021/7/9 17:50 * @date 2021/7/9 17:50
*/ */
@Data @Data
public class UnionpayTradePayReq implements Serializable, Cloneable{ public class UnionpayTradePayReq extends UnionpayBaseReq implements Serializable, Cloneable{
private static final long serialVersionUID = -5827961038383330701L; private static final long serialVersionUID = -5827961038383330701L;
private String productCode;
private BigDecimal totalAmount;
private String subject;
private String body;
private String outTradeNo;
private String timeExpire;
private String notifyUrl;
private String timestamp;
@Override @Override
public String toString(){ public String toString(){
return JSON.toJSONString(this); return JSON.toJSONString(this);
......
package com.liquidnet.service.dragon.channel.unionpay.strategy.impl; package com.liquidnet.service.dragon.channel.unionpay.strategy.impl;
import com.liquidnet.commons.lang.util.DateUtil; import com.alibaba.fastjson.JSON;
import com.liquidnet.service.base.ResponseDto; import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.dragon.biz.DragonServiceCommonBiz; import com.liquidnet.service.dragon.biz.DragonServiceCommonBiz;
import com.liquidnet.service.dragon.channel.alipay.req.AlipayTradePayReq;
import com.liquidnet.service.dragon.channel.strategy.biz.DragonPayBiz; import com.liquidnet.service.dragon.channel.strategy.biz.DragonPayBiz;
import com.liquidnet.service.dragon.channel.unionpay.req.UnionpayTradePayReq;
import com.liquidnet.service.dragon.channel.unionpay.sdk.SDKConfig;
import com.liquidnet.service.dragon.channel.unionpay.sdk.SDKConstants;
import com.liquidnet.service.dragon.channel.unionpay.strategy.IUnionpayStrategy; import com.liquidnet.service.dragon.channel.unionpay.strategy.IUnionpayStrategy;
import com.liquidnet.service.dragon.dto.DragonPayBaseReqDto; import com.liquidnet.service.dragon.dto.DragonPayBaseReqDto;
import com.liquidnet.service.dragon.dto.DragonPayBaseRespDto; import com.liquidnet.service.dragon.dto.DragonPayBaseRespDto;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import java.math.BigDecimal;
import java.util.Map; import java.util.Map;
/** /**
...@@ -29,34 +33,27 @@ public abstract class AbstractUnionPayStrategy implements IUnionpayStrategy { ...@@ -29,34 +33,27 @@ public abstract class AbstractUnionPayStrategy implements IUnionpayStrategy {
private DragonPayBiz dragonPayBiz; private DragonPayBiz dragonPayBiz;
@Autowired @Autowired
private DragonServiceCommonBiz dragonServiceCommonBiz; private SDKConfig sdkConfig;
@Autowired
private DragonServiceCommonBiz dragonServiceCommonBiz;
protected String productCode = "QUICK_WAP_PAY"; @Value("${liquidnet.dragon.unionpay.merchantId}")
private String merchantId;
@Override @Override
public ResponseDto<DragonPayBaseRespDto> dragonPay(DragonPayBaseReqDto dragonPayBaseReqDto) { public ResponseDto<DragonPayBaseRespDto> dragonPay(DragonPayBaseReqDto dragonPayBaseReqDto) {
//设置productCode
setProductCode(); //构造公共请求参数
UnionpayTradePayReq payReq = this.buildRequestParamMap(dragonPayBaseReqDto);
AlipayTradePayReq alipayTradePayReq = AlipayTradePayReq.getNew(); //构造个性化参数
alipayTradePayReq.setProductCode(this.productCode); payReq = this.appendRequestParam(payReq,dragonPayBaseReqDto);
alipayTradePayReq.setTotalAmount(dragonPayBaseReqDto.getPrice());
alipayTradePayReq.setSubject(dragonPayBaseReqDto.getName());
alipayTradePayReq.setBody(dragonPayBaseReqDto.getDetail());
//dragon中支付编号
alipayTradePayReq.setOutTradeNo(dragonPayBaseReqDto.getCode());
//设置订单过期时间
String timeExpire = DateUtil.format(DateUtil.Formatter.yyyyMMddHHmmss.parse(dragonPayBaseReqDto.getCreateDate()).plusMinutes(Long.parseLong(dragonPayBaseReqDto.getExpireTime())),DateUtil.Formatter.yyyyMMddHHmmss);
alipayTradePayReq.setTimeExpire(timeExpire);
alipayTradePayReq.setNotifyUrl(this.getNotifyUrl());
alipayTradePayReq.setTimestamp(dragonPayBaseReqDto.getCreateDate());
//调用支付 //调用支付
long startTime = System.currentTimeMillis(); long startTime = System.currentTimeMillis();
Map<String, Object> result = this.executePay(alipayTradePayReq); Map<String, String> result = this.executePay(payReq);
// log.info("dragonPay:alipay:"+dragonPayBaseReqDto.getDeviceFrom()+" response xmlStr: {} ", JSON.toJSONString(result)); log.debug("dragonPay:unionpay:"+dragonPayBaseReqDto.getDeviceFrom()+" response xmlStr: {} ", JSON.toJSONString(result));
log.info("alipay-dragonPay->耗时:{}",(System.currentTimeMillis() - startTime)+"毫秒"); log.info("unionpay-dragonPay->耗时:{}",(System.currentTimeMillis() - startTime)+"毫秒");
//拼接返回参数 //拼接返回参数
DragonPayBaseRespDto respDto = buildCommonRespDto(dragonPayBaseReqDto); DragonPayBaseRespDto respDto = buildCommonRespDto(dragonPayBaseReqDto);
respDto = this.buildResponseDto(respDto,result); respDto = this.buildResponseDto(respDto,result);
...@@ -69,20 +66,48 @@ public abstract class AbstractUnionPayStrategy implements IUnionpayStrategy { ...@@ -69,20 +66,48 @@ public abstract class AbstractUnionPayStrategy implements IUnionpayStrategy {
/** /**
* 支付请求 * 支付请求
* @param alipayTradePayReq * @param payReq
* @return * @return
*/ */
protected abstract Map<String, Object> executePay(AlipayTradePayReq alipayTradePayReq); protected abstract Map<String, String> executePay(UnionpayTradePayReq payReq);
/** /**
* 设置productCode * 设置notifyUrl
*/ */
protected abstract void setProductCode(); protected abstract String getNotifyUrl();
/** /**
* 设置notifyUrl * 构造请求参数
* @param dragonPayBaseReqDto
* @return
*/ */
protected abstract String getNotifyUrl(); protected UnionpayTradePayReq buildRequestParamMap(DragonPayBaseReqDto dragonPayBaseReqDto){
UnionpayTradePayReq payReq = UnionpayTradePayReq.getNew();
payReq.setVersion(sdkConfig.getVersion());
payReq.setEncoding(SDKConstants.UTF_8_ENCODING);
payReq.setSignMethod(sdkConfig.getSignMethod());
payReq.setTxnType("01");
payReq.setTxnSubType("01");
payReq.setBizType("000201");
payReq.setChannelType("08");
payReq.setMerId(merchantId);
payReq.setAccessType("0");
payReq.setOrderId(dragonPayBaseReqDto.getCode());
payReq.setTxnTime(dragonPayBaseReqDto.getCreateDate());
payReq.setTxnAmt(dragonPayBaseReqDto.getPrice().multiply(BigDecimal.valueOf(100L)).intValue()+"");
payReq.setCurrencyCode("156");
payReq.setBackUrl(this.getNotifyUrl());
return payReq;
};
/**
* 追加请求参数
* @param payReq
* @return
*/
abstract UnionpayTradePayReq appendRequestParam(UnionpayTradePayReq payReq,DragonPayBaseReqDto dragonPayBaseReqDto);
/** /**
* 构造公共返回参数 * 构造公共返回参数
...@@ -91,6 +116,7 @@ public abstract class AbstractUnionPayStrategy implements IUnionpayStrategy { ...@@ -91,6 +116,7 @@ public abstract class AbstractUnionPayStrategy implements IUnionpayStrategy {
*/ */
protected DragonPayBaseRespDto buildCommonRespDto(DragonPayBaseReqDto dragonPayBaseReqDto){ protected DragonPayBaseRespDto buildCommonRespDto(DragonPayBaseReqDto dragonPayBaseReqDto){
DragonPayBaseRespDto respDto = new DragonPayBaseRespDto(); DragonPayBaseRespDto respDto = new DragonPayBaseRespDto();
respDto.setPayType(dragonPayBaseReqDto.getPayType());
respDto.setCode(dragonPayBaseReqDto.getCode()); respDto.setCode(dragonPayBaseReqDto.getCode());
respDto.setOrderCode(dragonPayBaseReqDto.getOrderCode()); respDto.setOrderCode(dragonPayBaseReqDto.getOrderCode());
DragonPayBaseRespDto.PayData payData = new DragonPayBaseRespDto.PayData(); DragonPayBaseRespDto.PayData payData = new DragonPayBaseRespDto.PayData();
...@@ -101,6 +127,6 @@ public abstract class AbstractUnionPayStrategy implements IUnionpayStrategy { ...@@ -101,6 +127,6 @@ public abstract class AbstractUnionPayStrategy implements IUnionpayStrategy {
/** /**
* 构造返回参数 * 构造返回参数
*/ */
abstract DragonPayBaseRespDto buildResponseDto(DragonPayBaseRespDto payBaseRespDto,Map<String, Object> respResult); abstract DragonPayBaseRespDto buildResponseDto(DragonPayBaseRespDto payBaseRespDto,Map<String, String> respResult);
} }
package com.liquidnet.service.dragon.channel.unionpay.strategy.impl; package com.liquidnet.service.dragon.channel.unionpay.strategy.impl;
import com.liquidnet.service.dragon.channel.alipay.biz.AlipayBiz; import com.liquidnet.commons.lang.util.StringUtil;
import com.liquidnet.service.dragon.channel.alipay.req.AlipayTradePayReq; import com.liquidnet.service.dragon.channel.unionpay.biz.UnionpayBiz;
import com.liquidnet.service.dragon.channel.unionpay.req.UnionpayTradePayReq;
import com.liquidnet.service.dragon.channel.unionpay.strategy.annotation.StrategyUnionpayHandler; import com.liquidnet.service.dragon.channel.unionpay.strategy.annotation.StrategyUnionpayHandler;
import com.liquidnet.service.dragon.constant.DragonConstant; import com.liquidnet.service.dragon.constant.DragonConstant;
import com.liquidnet.service.dragon.dto.DragonPayBaseReqDto;
import com.liquidnet.service.dragon.dto.DragonPayBaseRespDto; import com.liquidnet.service.dragon.dto.DragonPayBaseRespDto;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -17,7 +19,7 @@ import java.util.Map; ...@@ -17,7 +19,7 @@ import java.util.Map;
* @author AnJiabin <anjiabin@zhengzai.tv> * @author AnJiabin <anjiabin@zhengzai.tv>
* @version V1.0 * @version V1.0
* @Description: TODO * @Description: TODO
* @class: AlipayStrategyWapImpl * @class: UnionpayStrategyAppImpl
* @Package com.liquidnet.service.dragon.channel.unionpay.strategy.impl * @Package com.liquidnet.service.dragon.channel.unionpay.strategy.impl
* @Copyright: LightNet @ Copyright (c) 2021 * @Copyright: LightNet @ Copyright (c) 2021
* @date 2021/11/08 18:34 * @date 2021/11/08 18:34
...@@ -26,9 +28,6 @@ import java.util.Map; ...@@ -26,9 +28,6 @@ import java.util.Map;
@Component @Component
@StrategyUnionpayHandler(DragonConstant.DeviceFromEnum.APP) @StrategyUnionpayHandler(DragonConstant.DeviceFromEnum.APP)
public class UnionpayStrategyAppImpl extends AbstractUnionPayStrategy { public class UnionpayStrategyAppImpl extends AbstractUnionPayStrategy {
@Value("${liquidnet.dragon.alipay.gataway-url}")
private String alipayGatewayUrl;
@Value("${liquidnet.dragon.url}") @Value("${liquidnet.dragon.url}")
private String notifyUrl; private String notifyUrl;
...@@ -36,26 +35,30 @@ public class UnionpayStrategyAppImpl extends AbstractUnionPayStrategy { ...@@ -36,26 +35,30 @@ public class UnionpayStrategyAppImpl extends AbstractUnionPayStrategy {
StringRedisTemplate stringRedisTemplate; StringRedisTemplate stringRedisTemplate;
@Autowired @Autowired
private AlipayBiz alipayBiz; private UnionpayBiz unionpayBiz;
@Override @Override
protected Map<String, Object> executePay(AlipayTradePayReq alipayTradePayReq) { protected Map<String, String> executePay(UnionpayTradePayReq payReq) {
return alipayBiz.tradeAppPay(alipayTradePayReq); return unionpayBiz.tradeAppPay(payReq);
} }
protected void setProductCode() { @Override
this.productCode = "QUICK_MSECURITY_PAY"; protected String getNotifyUrl() {
return notifyUrl + "/notify/unionpay/app";
} }
@Override @Override
protected String getNotifyUrl() { UnionpayTradePayReq appendRequestParam(UnionpayTradePayReq payReq, DragonPayBaseReqDto dragonPayBaseReqDto) {
// notifyUrl = "/notify/app/alipay/1"; payReq.setAccType("01");
return notifyUrl + "/notify/alipay/app"; payReq.setChannelType("08");
return payReq;
} }
@Override @Override
DragonPayBaseRespDto buildResponseDto(DragonPayBaseRespDto payBaseRespDto, Map<String, Object> respResult) { DragonPayBaseRespDto buildResponseDto(DragonPayBaseRespDto payBaseRespDto, Map<String, String> respResult) {
payBaseRespDto.getPayData().setOrderStr(respResult.get("body").toString()); if(StringUtil.isNotNull(respResult)&&respResult.get("tn")!=null){
payBaseRespDto.getPayData().setPrepayId(respResult.get("tn"));
}
return payBaseRespDto; return payBaseRespDto;
} }
} }
package com.liquidnet.service.dragon.channel.unionpay.strategy.impl; package com.liquidnet.service.dragon.channel.unionpay.strategy.impl;
import com.liquidnet.service.dragon.channel.alipay.biz.AlipayBiz; import com.liquidnet.commons.lang.util.DateUtil;
import com.liquidnet.service.dragon.channel.alipay.req.AlipayTradePayReq; import com.liquidnet.commons.lang.util.JsonUtils;
import com.liquidnet.commons.lang.util.StringUtil;
import com.liquidnet.service.dragon.channel.unionpay.biz.UnionpayBiz;
import com.liquidnet.service.dragon.channel.unionpay.req.UnionpayTradePayReq;
import com.liquidnet.service.dragon.channel.unionpay.sdk.SDKConfig;
import com.liquidnet.service.dragon.channel.unionpay.strategy.annotation.StrategyUnionpayHandler; import com.liquidnet.service.dragon.channel.unionpay.strategy.annotation.StrategyUnionpayHandler;
import com.liquidnet.service.dragon.constant.DragonConstant; import com.liquidnet.service.dragon.constant.DragonConstant;
import com.liquidnet.service.dragon.dto.DragonPayBaseReqDto;
import com.liquidnet.service.dragon.dto.DragonPayBaseRespDto; import com.liquidnet.service.dragon.dto.DragonPayBaseRespDto;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -17,8 +22,8 @@ import java.util.Map; ...@@ -17,8 +22,8 @@ import java.util.Map;
* @author AnJiabin <anjiabin@zhengzai.tv> * @author AnJiabin <anjiabin@zhengzai.tv>
* @version V1.0 * @version V1.0
* @Description: TODO * @Description: TODO
* @class: AlipayStrategyWapImpl * @class: UnionpayStrategyWapImpl
* @Package com.liquidnet.service.dragon.channel.alipay.strategy.impl * @Package com.liquidnet.service.dragon.channel.unionpay.strategy.impl
* @Copyright: LightNet @ Copyright (c) 2021 * @Copyright: LightNet @ Copyright (c) 2021
* @date 2021/7/10 14:34 * @date 2021/7/10 14:34
*/ */
...@@ -26,9 +31,6 @@ import java.util.Map; ...@@ -26,9 +31,6 @@ import java.util.Map;
@Service @Service
@StrategyUnionpayHandler(DragonConstant.DeviceFromEnum.WAP) @StrategyUnionpayHandler(DragonConstant.DeviceFromEnum.WAP)
public class UnionpayStrategyWapImpl extends AbstractUnionPayStrategy { public class UnionpayStrategyWapImpl extends AbstractUnionPayStrategy {
@Value("${liquidnet.dragon.alipay.gataway-url}")
private String alipayGatewayUrl;
@Value("${liquidnet.dragon.url}") @Value("${liquidnet.dragon.url}")
private String notifyUrl; private String notifyUrl;
...@@ -36,26 +38,39 @@ public class UnionpayStrategyWapImpl extends AbstractUnionPayStrategy { ...@@ -36,26 +38,39 @@ public class UnionpayStrategyWapImpl extends AbstractUnionPayStrategy {
StringRedisTemplate stringRedisTemplate; StringRedisTemplate stringRedisTemplate;
@Autowired @Autowired
private AlipayBiz alipayBiz; private UnionpayBiz unionpayBiz;
@Autowired
private SDKConfig sdkConfig;
@Override @Override
protected Map<String, Object> executePay(AlipayTradePayReq alipayTradePayReq) { protected Map<String, String> executePay(UnionpayTradePayReq payReq) {
return alipayBiz.tradeWapPay(alipayTradePayReq); return unionpayBiz.tradeWapPay(payReq);
} }
protected void setProductCode() { @Override
this.productCode = "QUICK_WAP_PAY"; protected String getNotifyUrl() {
return notifyUrl + "/notify/unionpay/wap";
} }
@Override @Override
protected String getNotifyUrl() { UnionpayTradePayReq appendRequestParam(UnionpayTradePayReq payReq, DragonPayBaseReqDto dragonPayBaseReqDto) {
// notifyUrl = "/notify/wap/alipay/1"; //设置订单过期时间
return notifyUrl + "/notify/alipay/wap"; String timeExpire = DateUtil.format(DateUtil.Formatter.yyyyMMddHHmmss.parse(dragonPayBaseReqDto.getCreateDate()).plusMinutes(Long.parseLong(dragonPayBaseReqDto.getExpireTime())),DateUtil.Formatter.yyyyMMddHHmmss);
payReq.setChannelType("07");
payReq.setRiskRateInfo(dragonPayBaseReqDto.getName());
payReq.setFrontUrl(dragonPayBaseReqDto.getReturnUrl());
payReq.setPayTimeout(timeExpire);
return payReq;
} }
@Override @Override
DragonPayBaseRespDto buildResponseDto(DragonPayBaseRespDto payBaseRespDto, Map<String, Object> respResult) { DragonPayBaseRespDto buildResponseDto(DragonPayBaseRespDto payBaseRespDto, Map<String, String> respResult) {
payBaseRespDto.getPayData().setRedirectUrl(alipayGatewayUrl + "?" + respResult.get("body"));
payBaseRespDto.getPayData().setRedirectUrl(sdkConfig.getFrontTransUrl());
if(StringUtil.isNotNull(respResult)){
payBaseRespDto.getPayData().setOrderStr(JsonUtils.toJson(respResult));
}
return payBaseRespDto; return payBaseRespDto;
} }
} }
package com.liquidnet.service.dragon.channel.unionpay.strategy.impl;
import com.liquidnet.commons.lang.util.DateUtil;
import com.liquidnet.service.dragon.channel.unionpay.biz.UnionpayBiz;
import com.liquidnet.service.dragon.channel.unionpay.constant.UnionpayConstant;
import com.liquidnet.service.dragon.channel.unionpay.req.UnionpayTradePayReq;
import com.liquidnet.service.dragon.channel.unionpay.sdk.AcpService;
import com.liquidnet.service.dragon.channel.unionpay.sdk.SDKConfig;
import com.liquidnet.service.dragon.channel.unionpay.strategy.annotation.StrategyUnionpayHandler;
import com.liquidnet.service.dragon.constant.DragonConstant;
import com.liquidnet.service.dragon.dto.DragonPayBaseReqDto;
import com.liquidnet.service.dragon.dto.DragonPayBaseRespDto;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;
import java.util.Map;
/**
* @author AnJiabin <anjiabin@zhengzai.tv>
* @version V1.0
* @Description: TODO
* @class: UnionpayStrategyWapImpl
* @Package com.liquidnet.service.dragon.channel.unionpay.strategy.impl
* @Copyright: LightNet @ Copyright (c) 2021
* @date 2021/7/10 14:34
*/
@Slf4j
@Service
@StrategyUnionpayHandler(DragonConstant.DeviceFromEnum.WAPPAGE)
public class UnionpayStrategyWapPageImpl extends AbstractUnionPayStrategy {
@Value("${liquidnet.dragon.url}")
private String notifyUrl;
@Autowired
StringRedisTemplate stringRedisTemplate;
@Autowired
private UnionpayBiz unionpayBiz;
@Autowired
private SDKConfig sdkConfig;
@Override
protected Map<String, String> executePay(UnionpayTradePayReq payReq) {
return unionpayBiz.tradeWapPay(payReq);
}
@Override
protected String getNotifyUrl() {
return notifyUrl + "/notify/unionpay/wap";
}
@Override
UnionpayTradePayReq appendRequestParam(UnionpayTradePayReq payReq, DragonPayBaseReqDto dragonPayBaseReqDto) {
//设置订单过期时间
String timeExpire = DateUtil.format(DateUtil.Formatter.yyyyMMddHHmmss.parse(dragonPayBaseReqDto.getCreateDate()).plusMinutes(Long.parseLong(dragonPayBaseReqDto.getExpireTime())),DateUtil.Formatter.yyyyMMddHHmmss);
payReq.setChannelType("07");
payReq.setRiskRateInfo(dragonPayBaseReqDto.getName());
payReq.setFrontUrl(dragonPayBaseReqDto.getReturnUrl());
payReq.setPayTimeout(timeExpire);
return payReq;
}
@Override
DragonPayBaseRespDto buildResponseDto(DragonPayBaseRespDto payBaseRespDto, Map<String, String> respResult) {
String requestFrontUrl = sdkConfig.getFrontTransUrl(); //获取请求银联的前台地址:对应属性文件acp_sdk.properties文件中的acpsdk.frontTransUrl
String html = AcpService.createAutoFormHtml(requestFrontUrl, respResult, UnionpayConstant.encoding); //生成自动跳转的Html表单
log.info("打印请求HTML,此为请求报文,为联调排查问题的依据:"+html);
payBaseRespDto.getPayData().setRedirectUrl(html);
return payBaseRespDto;
}
}
...@@ -133,6 +133,7 @@ public abstract class AbstractWepayStrategy implements IWepayStrategy { ...@@ -133,6 +133,7 @@ public abstract class AbstractWepayStrategy implements IWepayStrategy {
DragonPayBaseRespDto respDto = new DragonPayBaseRespDto(); DragonPayBaseRespDto respDto = new DragonPayBaseRespDto();
respDto.setCode(dragonPayBaseReqDto.getCode()); respDto.setCode(dragonPayBaseReqDto.getCode());
respDto.setOrderCode(dragonPayBaseReqDto.getOrderCode()); respDto.setOrderCode(dragonPayBaseReqDto.getOrderCode());
respDto.setPayType(dragonPayBaseReqDto.getPayType());
DragonPayBaseRespDto.PayData payData = new DragonPayBaseRespDto.PayData(); DragonPayBaseRespDto.PayData payData = new DragonPayBaseRespDto.PayData();
payData.setAppId(respWepayDto.getAppid()); payData.setAppId(respWepayDto.getAppid());
payData.setNonceStr(nonceStr); payData.setNonceStr(nonceStr);
......
...@@ -44,7 +44,7 @@ public class PayController { ...@@ -44,7 +44,7 @@ public class PayController {
@ApiOperation("Dragon支付") @ApiOperation("Dragon支付")
@ApiResponse(code = 200, message = "接口返回对象参数") @ApiResponse(code = 200, message = "接口返回对象参数")
@ApiImplicitParams({ @ApiImplicitParams({
@ApiImplicitParam(type = "form", required = true, dataType = "String", name = "payType", value = "支付类型:alipay,wepay,iappay", example = "alipay"), @ApiImplicitParam(type = "form", required = true, dataType = "String", name = "payType", value = "支付类型:alipay,wepay,unionpay,applepay", example = "unionpay"),
@ApiImplicitParam(type = "form", required = true, dataType = "String", name = "deviceFrom", value = "设备来源:web,wap,app,js,apple", example = "wap"), @ApiImplicitParam(type = "form", required = true, dataType = "String", name = "deviceFrom", value = "设备来源:web,wap,app,js,apple", example = "wap"),
@ApiImplicitParam(type = "form", required = true, dataType = "String", name = "type", value = "业务类型:TICKET,PRODUCT,COST,MBEANS,LIVE,VIDEO,VIP,CLUB,STRAWBERRY", example = "TICKET"), @ApiImplicitParam(type = "form", required = true, dataType = "String", name = "type", value = "业务类型:TICKET,PRODUCT,COST,MBEANS,LIVE,VIDEO,VIP,CLUB,STRAWBERRY", example = "TICKET"),
@ApiImplicitParam(type = "form", required = true, dataType = "String", name = "price", value = "支付金额", example = "0.1"), @ApiImplicitParam(type = "form", required = true, dataType = "String", name = "price", value = "支付金额", example = "0.1"),
...@@ -53,8 +53,8 @@ public class PayController { ...@@ -53,8 +53,8 @@ public class PayController {
@ApiImplicitParam(type = "form", required = true, dataType = "String", name = "orderCode", value = "订单编号", example = "ORDER0001"), @ApiImplicitParam(type = "form", required = true, dataType = "String", name = "orderCode", value = "订单编号", example = "ORDER0001"),
@ApiImplicitParam(type = "form", required = true, dataType = "String", name = "clientIp", value = "客户端ip", example = "127.0.0.1"), @ApiImplicitParam(type = "form", required = true, dataType = "String", name = "clientIp", value = "客户端ip", example = "127.0.0.1"),
@ApiImplicitParam(type = "form", required = true, dataType = "String", name = "notifyUrl", value = "通知url", example = "devdragon.zhengzai.tv"), @ApiImplicitParam(type = "form", required = true, dataType = "String", name = "notifyUrl", value = "通知url", example = "devdragon.zhengzai.tv"),
@ApiImplicitParam(type = "form", required = true, dataType = "String", name = "createDate", value = "订单创建时间", example = "2021-07-13 13:00:00"), @ApiImplicitParam(type = "form", required = true, dataType = "String", name = "createDate", value = "订单创建时间", example = "2021-11-10 13:00:00"),
@ApiImplicitParam(type = "form", required = true, dataType = "String", name = "expireTime", value = "订单过期时间", example = "5"), @ApiImplicitParam(type = "form", required = true, dataType = "String", name = "expireTime", value = "订单过期时间", example = "1000"),
}) })
@ResponseBody @ResponseBody
public ResponseDto<DragonPayBaseRespDto> dragonPay( public ResponseDto<DragonPayBaseRespDto> dragonPay(
......
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