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

Commit fdbe495a authored by 姜秀龙's avatar 姜秀龙

feat(order): 微信支付按 deviceFrom 切换 DouDou/mootoo/wenque 小程序 appid

新增 dragon-api WepayAppletPaySupport;业务支付走 order 内嵌 dragon 包,
appletdoudou/appletmootoo/appletwenque 映射统一下单 appid,并同步查单与退款。
Co-authored-by: 's avatarCursor <cursoragent@cursor.com>
parent 9b358925
......@@ -48,7 +48,7 @@ public class DragonConstant {
public enum DeviceFromEnum{
WEB("web",""),WAP("wap",""),WAPPAGE("wappage","")
,APP("app",""),JS("js",""),APPLET("applet",""),APPLETB("appletb",""),MICROPAY("micropay","");
,APP("app",""),JS("js",""),APPLET("applet",""),APPLETB("appletb",""),APPLET_DOUDOU("appletdoudou",""),APPLET_MOOTOO("appletmootoo",""),APPLET_WENQUE("appletwenque",""),MICROPAY("micropay","");
private String code;
private String message;
DeviceFromEnum(String code, String message) {
......
package com.liquidnet.service.dragon.support;
import com.liquidnet.service.dragon.dto.DragonPayBaseReqDto;
/**
* 微信小程序支付:deviceFrom / appIdType 与微信 appid 映射。
*/
public final class WepayAppletPaySupport {
public static final String DEVICE_APPLETB = "appletb";
public static final String DEVICE_APPLET_DOUDOU = "appletdoudou";
public static final String DEVICE_APPLET_MOOTOO = "appletmootoo";
public static final String DEVICE_APPLET_WENQUE = "appletwenque";
public static final String APP_ID_TYPE_B = "b";
public static final String APP_ID_TYPE_DOUDOU = "doudou";
public static final String APP_ID_TYPE_MOOTOO = "mootoo";
public static final String APP_ID_TYPE_WENQUE = "wenque";
private static final String APPLET_DEFAULT = "wx4732efeaa2b08086";
private static final String APPLET_B = "wxe3a093ce7278d5b1";
private static final String APPLET_DOUDOU = "wxa4b24c3ed55e4e18";
private static final String APPLET_MOOTOO = "wxe86ab49478ec3ee9";
private static final String APPLET_WENQUE = "wxacbe59cb64cb3ed4";
private WepayAppletPaySupport() {
}
public static boolean requiresWechatOpenId(String deviceFrom) {
if (deviceFrom == null) {
return false;
}
return "js".equalsIgnoreCase(deviceFrom)
|| "applet".equalsIgnoreCase(deviceFrom)
|| DEVICE_APPLETB.equalsIgnoreCase(deviceFrom)
|| DEVICE_APPLET_DOUDOU.equalsIgnoreCase(deviceFrom)
|| DEVICE_APPLET_MOOTOO.equalsIgnoreCase(deviceFrom)
|| DEVICE_APPLET_WENQUE.equalsIgnoreCase(deviceFrom);
}
/**
* 将 appletdoudou 等 deviceFrom 规范为 applet,并写入 appIdType。
*/
public static void applyAppletDeviceFrom(DragonPayBaseReqDto dto) {
if (dto == null || dto.getDeviceFrom() == null) {
return;
}
String deviceFrom = dto.getDeviceFrom();
if (DEVICE_APPLETB.equals(deviceFrom)) {
dto.setDeviceFrom("applet");
dto.setAppIdType(APP_ID_TYPE_B);
} else if (DEVICE_APPLET_DOUDOU.equals(deviceFrom)) {
dto.setDeviceFrom("applet");
dto.setAppIdType(APP_ID_TYPE_DOUDOU);
} else if (DEVICE_APPLET_MOOTOO.equals(deviceFrom)) {
dto.setDeviceFrom("applet");
dto.setAppIdType(APP_ID_TYPE_MOOTOO);
} else if (DEVICE_APPLET_WENQUE.equals(deviceFrom)) {
dto.setDeviceFrom("applet");
dto.setAppIdType(APP_ID_TYPE_WENQUE);
}
}
public static boolean usesMerchantB(String appIdType) {
return APP_ID_TYPE_B.equals(appIdType);
}
public static boolean usesMerchantBByPaymentType(String paymentType) {
return paymentType != null && paymentType.contains("APPLETB");
}
public static String resolveAppletAppIdByAppIdType(String appIdType) {
if (appIdType == null || appIdType.trim().isEmpty()) {
return APPLET_DEFAULT;
}
switch (appIdType) {
case APP_ID_TYPE_B:
return APPLET_B;
case APP_ID_TYPE_DOUDOU:
return APPLET_DOUDOU;
case APP_ID_TYPE_MOOTOO:
return APPLET_MOOTOO;
case APP_ID_TYPE_WENQUE:
return APPLET_WENQUE;
default:
return APPLET_DEFAULT;
}
}
public static String resolveAppletAppIdByPaymentType(String paymentType) {
if (paymentType == null) {
return APPLET_DEFAULT;
}
if (paymentType.contains("APPLETB")) {
return APPLET_B;
}
if (paymentType.contains("DOUDOU")) {
return APPLET_DOUDOU;
}
if (paymentType.contains("MOOTOO")) {
return APPLET_MOOTOO;
}
if (paymentType.contains("WENQUE")) {
return APPLET_WENQUE;
}
return APPLET_DEFAULT;
}
}
......@@ -50,7 +50,11 @@ public class DragonServiceCommonBiz {
orders.setClientIp(dragonPayBaseReqDto.getClientIp());
orders.setNotifyUrl(dragonPayBaseReqDto.getNotifyUrl());
orders.setNotifyStatus(Integer.valueOf(DragonConstant.PayNotifyStatusEnum.NOTIFY_INIT.getCode()));
orders.setPaymentType((dragonPayBaseReqDto.getDeviceFrom()+dragonPayBaseReqDto.getPayType()).toUpperCase());
if (dragonPayBaseReqDto.getAppIdType() != null && !dragonPayBaseReqDto.getAppIdType().trim().isEmpty()) {
orders.setPaymentType((dragonPayBaseReqDto.getDeviceFrom() + dragonPayBaseReqDto.getAppIdType() + dragonPayBaseReqDto.getPayType()).toUpperCase());
} else {
orders.setPaymentType((dragonPayBaseReqDto.getDeviceFrom() + dragonPayBaseReqDto.getPayType()).toUpperCase());
}
// orders.setPaymentId();
orders.setPaymentAt(LocalDateTime.now());
// orders.setFinishedAt();
......
......@@ -16,6 +16,7 @@ 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.DataUtilsDragon;
import com.liquidnet.service.dragon.support.WepayAppletPaySupport;
import com.liquidnet.service.dragon.utils.PayWepayUtils;
import com.liquidnet.service.dragon.utils.XmlUtil;
import lombok.extern.slf4j.Slf4j;
......@@ -157,9 +158,9 @@ public abstract class AbstractWepayStrategy implements IWepayStrategy {
String nonceStr = PayWepayUtils.getInstance().getNonceStr();
SortedMap<String, Object> parameters = new TreeMap<>();
// parameters.put("mch_id", PayWepayUtils.getInstance().getMerchantId());
if(dragonPayBaseReqDto.getAppIdType().equals("b")){
if (WepayAppletPaySupport.usesMerchantB(dragonPayBaseReqDto.getAppIdType())) {
parameters.put("mch_id", PayWepayUtils.getInstance().getMerchantBId());
}else{
} else {
parameters.put("mch_id", PayWepayUtils.getInstance().getMerchantId());
}
parameters.put("nonce_str", nonceStr);
......@@ -201,11 +202,8 @@ public abstract class AbstractWepayStrategy implements IWepayStrategy {
public DragonPayOrderQueryRespDto checkOrderStatus(String code) {
DragonOrdersDto ordersDto = dataUtilsDragon.getPayOrderByCode(code);
Map<String, Object> resultMap = null;
if(code.contains("b")){
resultMap = wepayBiz.tradeQuery(code, PayWepayUtils.getInstance().getAPPLETB_APPID());
}else{
resultMap = wepayBiz.tradeQuery(code,this.getAppid());
}
String queryAppid = WepayAppletPaySupport.resolveAppletAppIdByPaymentType(ordersDto.getPaymentType());
resultMap = wepayBiz.tradeQuery(code, queryAppid);
DragonPayOrderQueryRespDto respDto = dragonPayBiz.buildPayOrderQueryRespDto(ordersDto);
......
......@@ -5,6 +5,7 @@ import com.liquidnet.service.dragon.channel.wepay.strategy.annotation.StrategyWe
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.support.WepayAppletPaySupport;
import com.liquidnet.service.dragon.utils.PayWepayUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
......@@ -32,11 +33,7 @@ public class WepayStrategyAppletImpl extends AbstractWepayStrategy{
@Override
SortedMap<String, Object> appendRequestParam(SortedMap<String, Object> requestMap, DragonPayBaseReqDto dragonPayBaseReqDto) {
requestMap.put("trade_type", "JSAPI");
if(dragonPayBaseReqDto.getAppIdType().equals("b")){
requestMap.put("appid", PayWepayUtils.getInstance().getAPPLETB_APPID());
}else{
requestMap.put("appid", PayWepayUtils.getInstance().getAPPLET_APP_ID());
}
requestMap.put("appid", WepayAppletPaySupport.resolveAppletAppIdByAppIdType(dragonPayBaseReqDto.getAppIdType()));
requestMap.put("openid", dragonPayBaseReqDto.getOpenId()); //只有trade_type="JSAPI"时必须传
return requestMap;
}
......
......@@ -5,6 +5,7 @@ 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.service.IDragonOrdersService;
import com.liquidnet.service.dragon.support.WepayAppletPaySupport;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
......@@ -89,10 +90,7 @@ public class PayController {
DragonPayBaseReqDto dragonPayBaseReqDto = DragonPayBaseReqDto.getNew();
dragonPayBaseReqDto.setPayType(payType);
dragonPayBaseReqDto.setDeviceFrom(deviceFrom);
if(deviceFrom.equals("appletb")){
dragonPayBaseReqDto.setDeviceFrom("applet");
dragonPayBaseReqDto.setAppIdType("b");
}
WepayAppletPaySupport.applyAppletDeviceFrom(dragonPayBaseReqDto);
dragonPayBaseReqDto.setOpenId(openId);
dragonPayBaseReqDto.setType(type);
dragonPayBaseReqDto.setPrice(price);
......
......@@ -24,6 +24,7 @@ import com.liquidnet.service.dragon.constant.DragonConstant;
import com.liquidnet.service.dragon.constant.DragonErrorCodeEnum;
import com.liquidnet.service.dragon.dto.*;
import com.liquidnet.service.dragon.service.IDragonOrderRefundsService;
import com.liquidnet.service.dragon.support.WepayAppletPaySupport;
import com.liquidnet.service.dragon.utils.*;
import lombok.extern.slf4j.Slf4j;
import org.apache.http.HttpEntity;
......@@ -420,12 +421,12 @@ public class DragonOrderRefundsServiceImpl implements IDragonOrderRefundsService
parameters.put("appid", PayWepayUtils.getInstance().getWEB_APP_ID());
} else if (paymentType.equalsIgnoreCase(DragonConstant.PayTypeEnum.PAYMENT_TYPE_APP_WEPAY.getCode())) {
parameters.put("appid", PayWepayUtils.getInstance().getAPP_ID());
} else if(paymentType.equalsIgnoreCase(DragonConstant.PayTypeEnum.PAYMENT_TYPE_APPLET_WEPAY.getCode()) && code.contains("PAYB")){
parameters.put("appid", PayWepayUtils.getInstance().getAPPLETB_APPID());
parameters.put("mch_id", PayWepayUtils.getInstance().getMerchantBId());
type = 1;
}else if (paymentType.equalsIgnoreCase(DragonConstant.PayTypeEnum.PAYMENT_TYPE_APPLET_WEPAY.getCode())) {
parameters.put("appid", PayWepayUtils.getInstance().getAPPLET_APP_ID());
} else if (paymentType != null && paymentType.contains("APPLET") && paymentType.contains("WEPAY")) {
parameters.put("appid", WepayAppletPaySupport.resolveAppletAppIdByPaymentType(paymentType));
if (WepayAppletPaySupport.usesMerchantBByPaymentType(paymentType)) {
parameters.put("mch_id", PayWepayUtils.getInstance().getMerchantBId());
type = 1;
}
} else if (paymentType.equalsIgnoreCase(DragonConstant.PayTypeEnum.PAYMENT_TYPE_WAP_WEPAY.getCode())) {
parameters.put("appid", PayWepayUtils.getInstance().getWAP_APP_ID());
}else if(paymentType.equalsIgnoreCase(DragonConstant.PayTypeEnum.PAYMENT_TYPE_MICROPAY_WEPAY.getCode())){
......
......@@ -17,6 +17,7 @@ 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.service.IDragonOrdersService;
import com.liquidnet.service.dragon.support.WepayAppletPaySupport;
import com.liquidnet.service.dragon.utils.ApplepayUtils;
import com.liquidnet.service.dragon.utils.DataUtilsDragon;
import com.liquidnet.service.dragon.utils.ObjectUtilDragon;
......@@ -66,12 +67,10 @@ public class DragonOrdersServiceImpl implements IDragonOrdersService {
if(!(boolean)map.get("resultStatus")){
return ResponseDto.failure(map.get("erro").toString());
}
//设置支付编号
if(dragonPayBaseReqDto.getDeviceFrom().equals("appletb")){
dragonPayBaseReqDto.setDeviceFrom("applet");
dragonPayBaseReqDto.setAppIdType("b");
WepayAppletPaySupport.applyAppletDeviceFrom(dragonPayBaseReqDto);
if (WepayAppletPaySupport.APP_ID_TYPE_B.equals(dragonPayBaseReqDto.getAppIdType())) {
dragonPayBaseReqDto.setCode(IDGenerator.payCodeByType());
}else{
} else {
dragonPayBaseReqDto.setCode(IDGenerator.payCode());
}
log.info("dragon:dragonPay:req:dragonPayBaseReqDto : {}",dragonPayBaseReqDto.toString());
......@@ -80,7 +79,7 @@ public class DragonOrdersServiceImpl implements IDragonOrdersService {
public Map validateDragonPay(DragonPayBaseReqDto dragonPayBaseReqDto){
HashMap<String, Object> map= ObjectUtilDragon.cloneHashMapStringAndObj();
if (dragonPayBaseReqDto.getPayType().equalsIgnoreCase(DragonConstant.PayChannelEnum.WEPAY.getCode())) {
if (dragonPayBaseReqDto.getDeviceFrom().equalsIgnoreCase(DragonConstant.DeviceFromEnum.JS.getCode()) || dragonPayBaseReqDto.getDeviceFrom().equalsIgnoreCase(DragonConstant.DeviceFromEnum.APPLET.getCode()) ||dragonPayBaseReqDto.getDeviceFrom().equalsIgnoreCase(DragonConstant.DeviceFromEnum.APPLETB.getCode()) ) {
if (WepayAppletPaySupport.requiresWechatOpenId(dragonPayBaseReqDto.getDeviceFrom())) {
if (StringUtil.isEmpty(dragonPayBaseReqDto.getOpenId())) {
map.put("resultStatus",false);
map.put("erro","微信支付openId不能为空!");
......
......@@ -475,7 +475,7 @@ public class GoblinNftOrderServiceImpl implements IGoblinNftOrderService {
httpData.add("expireTime", "5");
httpData.add("payType", nftOrder.getPayType());
httpData.add("deviceFrom", nftOrder.getDeviceFrom());
if (nftOrder.getDeviceFrom().equals("js") || nftOrder.getDeviceFrom().equals("applet") || nftOrder.getDeviceFrom().equals("appletb")) {
if (com.liquidnet.service.dragon.support.WepayAppletPaySupport.requiresWechatOpenId(nftOrder.getDeviceFrom())) {
httpData.add("openId", payParam.getOpenId());
}
httpData.add("showUrl", showUrl);
......
......@@ -580,7 +580,7 @@ public class GoblinOrderServiceImpl implements IGoblinOrderService {
DragonPayBaseReqDto dragonPayBaseReqDto = DragonPayBaseReqDto.getNew();
dragonPayBaseReqDto.setPayType(preParam.getPayType());
dragonPayBaseReqDto.setDeviceFrom(preParam.getDeviceFrom());
if (preParam.getDeviceFrom().equals("js") || preParam.getDeviceFrom().equals("applet") || preParam.getDeviceFrom().equals("appletb")) {
if (com.liquidnet.service.dragon.support.WepayAppletPaySupport.requiresWechatOpenId(preParam.getDeviceFrom())) {
dragonPayBaseReqDto.setOpenId(preParam.getOpenId());
}
dragonPayBaseReqDto.setType("PRODUCT");
......@@ -892,7 +892,7 @@ public class GoblinOrderServiceImpl implements IGoblinOrderService {
DragonPayBaseReqDto dragonPayBaseReqDto = DragonPayBaseReqDto.getNew();
dragonPayBaseReqDto.setPayType(param.getPayType());
dragonPayBaseReqDto.setDeviceFrom(param.getDeviceFrom());
if (param.getDeviceFrom().equals("js") || param.getDeviceFrom().equals("applet") || param.getDeviceFrom().equals("appletb")) {
if (com.liquidnet.service.dragon.support.WepayAppletPaySupport.requiresWechatOpenId(param.getDeviceFrom())) {
dragonPayBaseReqDto.setOpenId(param.getOpenId());
}
dragonPayBaseReqDto.setType("PRODUCT");
......
......@@ -759,7 +759,7 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsOrderServ
DragonPayBaseReqDto dragonPayBaseReqDto = DragonPayBaseReqDto.getNew();
dragonPayBaseReqDto.setPayType(payOrderParam.getPayType());
dragonPayBaseReqDto.setDeviceFrom(payOrderParam.getDeviceFrom());
if (payOrderParam.getDeviceFrom().equals("js") || payOrderParam.getDeviceFrom().equals("applet") || payOrderParam.getDeviceFrom().equals("appletb")) {
if (com.liquidnet.service.dragon.support.WepayAppletPaySupport.requiresWechatOpenId(payOrderParam.getDeviceFrom())) {
dragonPayBaseReqDto.setOpenId(payOrderParam.getOpenId());
}
dragonPayBaseReqDto.setType("TICKET");
......@@ -891,7 +891,7 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsOrderServ
DragonPayBaseReqDto dragonPayBaseReqDto = DragonPayBaseReqDto.getNew();
dragonPayBaseReqDto.setPayType(payAgainParam.getPayType());
dragonPayBaseReqDto.setDeviceFrom(payAgainParam.getDeviceFrom());
if (payAgainParam.getDeviceFrom().equals("js") || payAgainParam.getDeviceFrom().equals("applet") || payAgainParam.getDeviceFrom().equals("appletb")) {
if (com.liquidnet.service.dragon.support.WepayAppletPaySupport.requiresWechatOpenId(payAgainParam.getDeviceFrom())) {
dragonPayBaseReqDto.setOpenId(payAgainParam.getOpenId());
}
dragonPayBaseReqDto.setType("TICKET");
......
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