update 支付宝小程序

This commit is contained in:
Guoqs
2024-06-13 11:56:11 +08:00
parent ae9aa49540
commit 5a72797b06
9 changed files with 154 additions and 108 deletions

View File

@@ -131,7 +131,6 @@ public class JumpController extends BaseController {
try { try {
// 进入充电桩详情做一下鉴权 // 进入充电桩详情做一下鉴权
// String memberId = getMemberIdByAuthorization(request);
PileConnectorVO vo = pileService.getConnectorDetail(pileConnectorCode); PileConnectorVO vo = pileService.getConnectorDetail(pileConnectorCode);
if (StringUtils.isNotBlank(memberId)) { if (StringUtils.isNotBlank(memberId)) {
addMember2MemberGroup(memberId, vo); addMember2MemberGroup(memberId, vo);

View File

@@ -2,6 +2,7 @@ package com.jsowell.api.uniapp;
import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSON;
import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableMap;
import com.jsowell.common.UserAgentUtils;
import com.jsowell.common.annotation.Anonymous; import com.jsowell.common.annotation.Anonymous;
import com.jsowell.common.core.controller.BaseController; import com.jsowell.common.core.controller.BaseController;
import com.jsowell.common.core.redis.RedisCache; import com.jsowell.common.core.redis.RedisCache;
@@ -135,6 +136,10 @@ public class PayController extends BaseController {
if (isLock) { if (isLock) {
String appId = request.getHeader("appId"); String appId = request.getHeader("appId");
dto.setWechatAppId(appId); dto.setWechatAppId(appId);
// 设置请求来源
dto.setRequestSource(UserAgentUtils.determineRequestSource(request));
map = orderService.payOrderV2(dto); map = orderService.payOrderV2(dto);
} }
response = new RestApiResponse<>(map); response = new RestApiResponse<>(map);
@@ -378,6 +383,10 @@ public class PayController extends BaseController {
if (isLock) { if (isLock) {
String appId = request.getHeader("appId"); String appId = request.getHeader("appId");
dto.setWechatAppId(appId); dto.setWechatAppId(appId);
//设置请求来源
dto.setRequestSource(UserAgentUtils.determineRequestSource(request));
map = orderService.payOccupyPileOrder(dto); map = orderService.payOccupyPileOrder(dto);
} }
response = new RestApiResponse<>(map); response = new RestApiResponse<>(map);

View File

@@ -0,0 +1,26 @@
package com.jsowell.common;
import com.jsowell.common.enums.adapay.AdapayPayChannelEnum;
import com.jsowell.common.util.StringUtils;
import javax.servlet.http.HttpServletRequest;
public class UserAgentUtils {
/**
* 判断请求来自哪里
*/
public static String determineRequestSource(HttpServletRequest request) {
String userAgent = request.getHeader("user-agent");
if (StringUtils.isBlank(userAgent)) {
return null;
}
if (userAgent.contains("AlipayClient")) {
return AdapayPayChannelEnum.ALIPAY_LITE.getValue();
}else if (userAgent.contains("MicroMessenger")) {
return AdapayPayChannelEnum.WX_LITE.getValue();
}else{
return null;
}
}
}

View File

@@ -23,6 +23,7 @@ import com.jsowell.common.constant.CacheConstants;
import com.jsowell.common.constant.Constants; import com.jsowell.common.constant.Constants;
import com.jsowell.common.core.redis.RedisCache; import com.jsowell.common.core.redis.RedisCache;
import com.jsowell.common.enums.DelFlagEnum; import com.jsowell.common.enums.DelFlagEnum;
import com.jsowell.common.enums.adapay.AdapayPayChannelEnum;
import com.jsowell.common.enums.adapay.AdapayStatusEnum; import com.jsowell.common.enums.adapay.AdapayStatusEnum;
import com.jsowell.common.enums.adapay.MerchantDelayModeEnum; import com.jsowell.common.enums.adapay.MerchantDelayModeEnum;
import com.jsowell.common.enums.ykc.ReturnCodeEnum; import com.jsowell.common.enums.ykc.ReturnCodeEnum;
@@ -121,7 +122,13 @@ public class AdapayService {
createAdaPaymentParam.setOrder_no(orderNo); createAdaPaymentParam.setOrder_no(orderNo);
createAdaPaymentParam.setPay_amt(amount); createAdaPaymentParam.setPay_amt(amount);
createAdaPaymentParam.setApp_id(config.getAdapayAppId()); createAdaPaymentParam.setApp_id(config.getAdapayAppId());
createAdaPaymentParam.setPay_channel("wx_lite"); // todo 如果以后有支付宝等别的渠道,这里需要做修改,判断是什么渠道的请求
// todo 如果以后有支付宝等别的渠道,这里需要做修改,判断是什么渠道的请求
// 2024年6月13日11点55分需要兼容支付宝小程序首先判断请求来源如为空默认微信小程序
String payChannel = StringUtils.isNotBlank(dto.getRequestSource())
? dto.getRequestSource()
: AdapayPayChannelEnum.WX_LITE.getValue();
createAdaPaymentParam.setPay_channel(payChannel);
createAdaPaymentParam.setGoods_title(dto.getGoodsTitle()); createAdaPaymentParam.setGoods_title(dto.getGoodsTitle());
createAdaPaymentParam.setGoods_desc(dto.getGoodsDesc()); // 这个字段是微信支付凭证的商品名 createAdaPaymentParam.setGoods_desc(dto.getGoodsDesc()); // 这个字段是微信支付凭证的商品名
Map<String, String> map = Maps.newHashMap(); Map<String, String> map = Maps.newHashMap();

View File

@@ -75,4 +75,9 @@ public class PayOrderDTO {
* *
*/ */
private String delayMode; private String delayMode;
/**
* 请求来源, 参见{@link com.jsowell.common.enums.adapay.AdapayPayChannelEnum}
*/
private String requestSource;
} }

View File

@@ -2480,7 +2480,7 @@ public class OrderBasicInfoServiceImpl implements OrderBasicInfoService {
String mode = pileMerchantInfoService.getDelayModeByMerchantId(merchantId); String mode = pileMerchantInfoService.getDelayModeByMerchantId(merchantId);
// 获取处理逻辑 // 获取处理逻辑
AbstractProgramLogic orderLogic = ProgramLogicFactory.getProgramLogic(mode); AbstractProgramLogic orderLogic = ProgramLogicFactory.getProgramLogic(mode);
orderLogic.payOrder(payOrderDTO); orderLogic.payOrder(payOrderDTO); // 充电桩主动申请启动充电生成订单 使用支付
// 推送小程序启动充电消息 // 推送小程序启动充电消息
// 通过memberId查询openId // 通过memberId查询openId

View File

@@ -177,109 +177,109 @@ public abstract class AbstractProgramLogic implements InitializingBean {
* @param dto * @param dto
* @return * @return
*/ */
protected Map<String, Object> generateOrderByCard(GenerateOrderDTO dto) throws Exception { // protected Map<String, Object> generateOrderByCard(GenerateOrderDTO dto) throws Exception {
logger.info("充电桩主动申请启动充电生成订单 param:{}", JSON.toJSONString(dto)); // logger.info("充电桩主动申请启动充电生成订单 param:{}", JSON.toJSONString(dto));
BigDecimal accountBalance; // BigDecimal accountBalance;
String payMode; // String payMode;
// 判断当前用户是否为平台测试员 // // 判断当前用户是否为平台测试员
PlatformTesterVO platformTesterVO = memberBasicInfoService.selectPlatformTesterStatus(dto.getMemberId()); // PlatformTesterVO platformTesterVO = memberBasicInfoService.selectPlatformTesterStatus(dto.getMemberId());
PileBasicInfo pileBasicInfo = pileBasicInfoService.selectPileBasicInfoBySN(dto.getPileSn()); // PileBasicInfo pileBasicInfo = pileBasicInfoService.selectPileBasicInfoBySN(dto.getPileSn());
PileStationWhitelist pileStationWhitelist = pileStationWhitelistService.queryWhitelistByMemberId(String.valueOf(pileBasicInfo.getStationId()), dto.getMemberId()); // PileStationWhitelist pileStationWhitelist = pileStationWhitelistService.queryWhitelistByMemberId(String.valueOf(pileBasicInfo.getStationId()), dto.getMemberId());
//
// 运营商id // // 运营商id
String merchantId = pileBasicInfo.getMerchantId() + ""; // String merchantId = pileBasicInfo.getMerchantId() + "";
//
if (platformTesterVO != null && StringUtils.equals(Constants.ONE, platformTesterVO.getStatus())) { // if (platformTesterVO != null && StringUtils.equals(Constants.ONE, platformTesterVO.getStatus())) {
// 是平台测试员 // // 是平台测试员
accountBalance = Constants.WHITELIST_DEFAULT_AMOUNT; // accountBalance = Constants.WHITELIST_DEFAULT_AMOUNT;
payMode = OrderPayModeEnum.PAYMENT_OF_WHITELIST.getValue(); // payMode = OrderPayModeEnum.PAYMENT_OF_WHITELIST.getValue();
} else if (pileStationWhitelist != null) { // } else if (pileStationWhitelist != null) {
// 站点白名单 // // 站点白名单
accountBalance = Constants.WHITELIST_DEFAULT_AMOUNT; // accountBalance = Constants.WHITELIST_DEFAULT_AMOUNT;
payMode = OrderPayModeEnum.PAYMENT_OF_WHITELIST.getValue(); // payMode = OrderPayModeEnum.PAYMENT_OF_WHITELIST.getValue();
} else { // } else {
// 通过memberId获取账户余额 // // 通过memberId获取账户余额
MemberVO memberVO = memberBasicInfoService.queryMemberInfoByMemberId(dto.getMemberId(), merchantId); // MemberVO memberVO = memberBasicInfoService.queryMemberInfoByMemberId(dto.getMemberId(), merchantId);
if (memberVO == null) { // if (memberVO == null) {
throw new BusinessException(ReturnCodeEnum.CODE_GET_MEMBER_ACCOUNT_AMOUNT_ERROR); // throw new BusinessException(ReturnCodeEnum.CODE_GET_MEMBER_ACCOUNT_AMOUNT_ERROR);
} // }
accountBalance = memberVO.getTotalAccountAmount(); // accountBalance = memberVO.getTotalAccountAmount();
if (accountBalance.compareTo(BigDecimal.ZERO) <= 0) { // if (accountBalance.compareTo(BigDecimal.ZERO) <= 0) {
logger.info("充电桩主动申请启动充电生成订单 余额不足, memberId:{}, MemberVO:{}", dto.getMemberId(), JSON.toJSONString(memberVO)); // logger.info("充电桩主动申请启动充电生成订单 余额不足, memberId:{}, MemberVO:{}", dto.getMemberId(), JSON.toJSONString(memberVO));
throw new BusinessException(ReturnCodeEnum.CODE_BALANCE_IS_INSUFFICIENT); // throw new BusinessException(ReturnCodeEnum.CODE_BALANCE_IS_INSUFFICIENT);
} // }
BigDecimal defaultAmount = Constants.BALANCE_PAY_MAX_AMOUNT; // BigDecimal defaultAmount = Constants.BALANCE_PAY_MAX_AMOUNT;
if (accountBalance.compareTo(defaultAmount) > 0) { // if (accountBalance.compareTo(defaultAmount) > 0) {
accountBalance = defaultAmount; // accountBalance = defaultAmount;
} // }
payMode = OrderPayModeEnum.PAYMENT_OF_BALANCE.getValue(); // payMode = OrderPayModeEnum.PAYMENT_OF_BALANCE.getValue();
// accountBalance = memberVO.getTotalAccountAmount(); // // accountBalance = memberVO.getTotalAccountAmount();
// dto.setChargeAmount(totalAccountAmount); // 充电金额 // // dto.setChargeAmount(totalAccountAmount); // 充电金额
// dto.setPayMode(OrderPayModeEnum.PAYMENT_OF_BALANCE.getValue()); // 1-余额支付 // // dto.setPayMode(OrderPayModeEnum.PAYMENT_OF_BALANCE.getValue()); // 1-余额支付
} // }
dto.setChargeAmount(accountBalance); // dto.setChargeAmount(accountBalance);
dto.setPayMode(payMode); // dto.setPayMode(payMode);
/* // /*
生成订单 // 生成订单
*/ // */
OrderBasicInfo basicInfo = generateOrder(dto); // OrderBasicInfo basicInfo = generateOrder(dto);
if (basicInfo == null) { // if (basicInfo == null) {
return null; // return null;
} // }
if (StringUtils.equals(StartModeEnum.AUTH_CARD.getValue(), dto.getStartMode())) { // if (StringUtils.equals(StartModeEnum.AUTH_CARD.getValue(), dto.getStartMode())) {
// 将卡状态改为启动锁定 // // 将卡状态改为启动锁定
PileAuthCard pileAuthCard = PileAuthCard.builder() // PileAuthCard pileAuthCard = PileAuthCard.builder()
.id(dto.getPileAuthCardInfo().getId()) // .id(dto.getPileAuthCardInfo().getId())
.logicCard(dto.getPileAuthCardInfo().getLogicCard()) // .logicCard(dto.getPileAuthCardInfo().getLogicCard())
.status("2") // .status("2")
.build(); // .build();
pileAuthCardService.updatePileAuthCard(pileAuthCard); // pileAuthCardService.updatePileAuthCard(pileAuthCard);
} else if (StringUtils.equals(StartModeEnum.VIN_CODE.getValue(), dto.getStartMode())) { // } else if (StringUtils.equals(StartModeEnum.VIN_CODE.getValue(), dto.getStartMode())) {
// 将vin码改成启动锁定 2023.11.4 站点白名单和测试员不需要锁定 // // 将vin码改成启动锁定 2023.11.4 站点白名单和测试员不需要锁定
if (!StringUtils.equals(OrderPayModeEnum.PAYMENT_OF_WHITELIST.getValue(), dto.getPayMode())) { // if (!StringUtils.equals(OrderPayModeEnum.PAYMENT_OF_WHITELIST.getValue(), dto.getPayMode())) {
dto.getMemberPlateNumberRelation().setVinStatus("2"); // dto.getMemberPlateNumberRelation().setVinStatus("2");
} // }
// 2024.02.06 不再判断锁定状态 // // 2024.02.06 不再判断锁定状态
// memberPlateNumberRelationService.updateMemberPlateNumberRelation(dto.getMemberPlateNumberRelation()); // // memberPlateNumberRelationService.updateMemberPlateNumberRelation(dto.getMemberPlateNumberRelation());
} // }
//
// 组装结果集 // // 组装结果集
Map<String, Object> map = Maps.newHashMap(); // Map<String, Object> map = Maps.newHashMap();
map.put("orderCode", basicInfo.getOrderCode()); // map.put("orderCode", basicInfo.getOrderCode());
map.put("transactionCode", basicInfo.getTransactionCode()); // map.put("transactionCode", basicInfo.getTransactionCode());
map.put("accountBalance", accountBalance); // map.put("accountBalance", accountBalance);
//
logger.info("生成订单 result:{}", JSON.toJSONString(map)); // logger.info("生成订单 result:{}", JSON.toJSONString(map));
//
// 支付订单 // // 支付订单
PayOrderDTO payOrderDTO = new PayOrderDTO(); // PayOrderDTO payOrderDTO = new PayOrderDTO();
payOrderDTO.setOrderCode(basicInfo.getOrderCode()); // payOrderDTO.setOrderCode(basicInfo.getOrderCode());
payOrderDTO.setPayAmount(accountBalance); // payOrderDTO.setPayAmount(accountBalance);
payOrderDTO.setPayMode(dto.getPayMode()); // payOrderDTO.setPayMode(dto.getPayMode());
payOrderDTO.setMemberId(dto.getMemberId()); // payOrderDTO.setMemberId(dto.getMemberId());
payOrderDTO.setStartMode(dto.getStartMode()); // payOrderDTO.setStartMode(dto.getStartMode());
// payOrderDTO.setCode(); // // payOrderDTO.setCode();
// payOrderDTO.setLockValue(); // // payOrderDTO.setLockValue();
// payOrderDTO.setOrderBasicInfo(basicInfo); // // payOrderDTO.setOrderBasicInfo(basicInfo);
//
// payOrder(payOrderDTO); // // payOrder(payOrderDTO);
//
String mode = pileMerchantInfoService.getDelayModeByMerchantId(merchantId); // String mode = pileMerchantInfoService.getDelayModeByMerchantId(merchantId);
// 获取处理逻辑 // // 获取处理逻辑
AbstractProgramLogic orderLogic = ProgramLogicFactory.getProgramLogic(mode); // AbstractProgramLogic orderLogic = ProgramLogicFactory.getProgramLogic(mode);
orderLogic.payOrder(payOrderDTO); // orderLogic.payOrder(payOrderDTO);
//
// 推送小程序启动充电消息 // // 推送小程序启动充电消息
// 通过memberId查询openId // // 通过memberId查询openId
MemberBasicInfo memberBasicInfo = memberBasicInfoService.selectInfoByMemberId(dto.getMemberId()); // MemberBasicInfo memberBasicInfo = memberBasicInfoService.selectInfoByMemberId(dto.getMemberId());
WechatSendMsgDTO sendMsgDTO = new WechatSendMsgDTO(); // WechatSendMsgDTO sendMsgDTO = new WechatSendMsgDTO();
sendMsgDTO.setOpenId(memberBasicInfo.getOpenId()); // sendMsgDTO.setOpenId(memberBasicInfo.getOpenId());
sendMsgDTO.setOrderCode(basicInfo.getOrderCode()); // sendMsgDTO.setOrderCode(basicInfo.getOrderCode());
//
wxAppletRemoteService.startChargingSendMsg(sendMsgDTO); // wxAppletRemoteService.startChargingSendMsg(sendMsgDTO);
//
return map; // return map;
} // }
/** /**
* 订单支付成功 支付回调 * 订单支付成功 支付回调

View File

@@ -50,7 +50,7 @@ public class ThirdPartySecretInfoVO {
private String platformName; private String platformName;
/** /**
* 对接平台类型 {@link com.jsowell.common.enums.thirdparty.ThirdPlatformTypeEnum} * 对接平台类型, 参见{@link com.jsowell.common.enums.thirdparty.ThirdPlatformTypeEnum}
*/ */
private String platformType; private String platformType;

View File

@@ -70,7 +70,7 @@ public interface ThirdpartySecretInfoService {
/** /**
* 通过第三方平台类型,查询平台密钥配置信息 * 通过第三方平台类型,查询平台密钥配置信息
* @param thirdPlatformType 第三方平台类型 {@link com.jsowell.common.enums.thirdparty.ThirdPlatformTypeEnum} * @param thirdPlatformType 第三方平台类型, 参见{@link com.jsowell.common.enums.thirdparty.ThirdPlatformTypeEnum}
* @return * @return
*/ */
ThirdPartySecretInfoVO queryByThirdPlatformType(String thirdPlatformType); ThirdPartySecretInfoVO queryByThirdPlatformType(String thirdPlatformType);