mirror of
https://codeup.aliyun.com/67c68d4e484ca2f0a13ac3c1/ydc/jsowell-charger-web.git
synced 2026-04-20 02:55:04 +08:00
update 支付宝小程序
This commit is contained in:
@@ -166,8 +166,13 @@ public class OrderService {
|
||||
* @return
|
||||
*/
|
||||
public String generateOrderV2(GenerateOrderDTO dto) throws ParseException {
|
||||
String delayMode = null;
|
||||
if (StringUtils.equals(dto.getRequestSource(), AdapayPayChannelEnum.WX_LITE.getValue())) {
|
||||
delayMode = pileMerchantInfoService.getDelayModeByWechatAppId(dto.getAppId());
|
||||
} else if (StringUtils.equals(dto.getRequestSource(), AdapayPayChannelEnum.ALIPAY_LITE.getValue())) {
|
||||
delayMode = pileMerchantInfoService.getDelayModeByAlipayAppId(dto.getAppId());
|
||||
}
|
||||
// 新逻辑
|
||||
String delayMode = pileMerchantInfoService.getDelayModeByWechatAppId(dto.getAppId());
|
||||
AbstractProgramLogic orderLogic = ProgramLogicFactory.getProgramLogic(delayMode);
|
||||
OrderBasicInfo orderBasicInfo = orderLogic.generateOrder(dto);
|
||||
if (orderBasicInfo != null) {
|
||||
|
||||
@@ -171,12 +171,14 @@ adapay:
|
||||
rsaPrivateKey: MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAOl7qJyrkrks7FKnBPr/Sngub897Ni5Bkn5pEa81zfs+4LrYsuWZQ8G1n7Q8/rjH4G/T7vPX+So41vNU74Sqn6E1b3BpW+wWBULhs9p1JSPT7Kzima4FmPigUr80NLrlVKn5bW+V4/odpN+bJWvpxdd024edHAD8mXX1M1N1lU5ZAgMBAAECgYA+mxbiM6tbFe2kV/6g4vVv9luq0cn8az7BwKCqT44U8Y5G67ZElG0zsuTI6pYOrCHFOpnXLrE0HhudEchL1YiJqW/SDKaoC4oDZf5nybhh11kOR3N5maLqvUz/WxdNy17th/2XxqVfTTu752X9yeeoXDj89N5OxyMl0jmxlhWbgQJBAPeoitR7FCxcjKtcKsEyrtV3T0H2WtQ2Pbku7CGe6VCtL4+DJNeUentn7plBj4IhbH3EwNmyCYzNlfp0X2d8fWkCQQDxWONjt1vV/dyKQYRvSVw/SWQWlR7g2OnHZokU2SNeewiCX2umCdYKh0doN0JHbSTLOGG5IA3+6Vxam+9hzPtxAkEAjr+QHf8/Vn6V+mOqpSdgjNwzS/MC0ZTeKPI52vsswnrAkjjmMHh9zMnQRnf6juhTD38sJY6wYH9TdkRDhXPFGQJATiFYe4+AS2ZDXv6WwPAezN4VaLodpOyTwdmPxxAEQzHRL2N0levZPs9MbpB1BGpw3tkBycx2u28QVsTkWeTiAQJAGRsAVr6Rhhdaq2vTjt9orhMVwt6BCoSQ0zzHSYilv4PMOtSu1Pyt4K8BDv3gjEyAi1GtE7kkJ0dcbsvOGiLzqQ==
|
||||
appId: app_d0c80cb1-ffc8-48cb-a030-fe9bec823aaa
|
||||
wechatAppId: wxbb3e0d474569481d
|
||||
alipayAppId: 2021004145642756
|
||||
xixiao:
|
||||
apiKey: api_live_8690aad5-18df-4c94-ba8c-4f9499721c65
|
||||
mockApiKey: api_test_a2944395-e6ba-4d59-969a-f629b7a9e53e
|
||||
rsaPrivateKey: MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAJ608yEkr5Fxj3ID9fIzavuwW/orgjlD1SIrmZVTwLFzM+ljnr/iFMRRhjJZZGImO+ySj296N+VPujHiiQZqymgIACdORs3YyRvxOeWQoPKiik21mOiF7RRw2GIOQEzqo0MKeJ/qdK89FvwnAIZKRXl+ccH/VTTr68VGWuiLWEK3AgMBAAECgYACsMCaZDvRtGIhJa4KsBJ1N9UnVYt8mwjG7oRJAsV2fKR5pWWwjQ2bEmK7Acbw3wMPDKD/28uMyKA4bkWyZScPO5T2Mhvo28AVOfdsbBht70iKzBAXuqHhHd99+AEmQL9ZcoCYCvoP2JqV8cHp5sXGEvncm9VRsjs3iSTsBYu0WQJBANB6x0DCPnAFXYnKvtBcBmF4jU8pO0iIGtx/ZR/N0pRTbL7cIvh+z6ZqtWo880Xbcli6i1qwZl1ctWwV0yKArOsCQQDC4dN6e8/Gj3FubXLmyLfIrbq7BuHW8kg19t0/wmAXunpkBtFhAA2FD7FYGg+/l6/f6YqWX8nSUr6pFZQI0Z5lAkARvBANIzj6gIpXeWbIBLwKOJ4UuNYxMlrOnQu2K+UY9wvOJJ3Y87ioWHV8RxkOvT856wyFt3HNyWAphKXETpvnAkEAnIjJ1ktW9FXJtfph3bABt0acg5eelYmcqQP2aT1W9BhMMMYtLi3drjCRsYOVfL55fXBYajrcoHzoOmZjtsWw5QJBAM/Wpk6L7BLVi357icleuivPtKsP04Ix5afUpgiFmssEheiLAxr+Zs5/nk/HM6V4Pk8kA0ILaNbRqjfAF5ZnAvk=
|
||||
appId: app_7848ccb2-f7e7-4841-a968-fbf02cc265ad
|
||||
wechatAppId: wx20abc5210391649c
|
||||
alipayAppId: wx20abc5210391649c # 待修改为真正的支付宝小程序id
|
||||
|
||||
|
||||
#高德地图相关配置
|
||||
|
||||
@@ -35,9 +35,14 @@ public class JsowellAdapayConfig extends AbstractAdapayConfig {
|
||||
@Value("${adapay.jsowell.wechatAppId}")
|
||||
private String wechatAppId;
|
||||
|
||||
@Value("${adapay.jsowell.alipayAppId}")
|
||||
private String alipayAppId;
|
||||
|
||||
@Override
|
||||
public void afterPropertiesSet() throws Exception {
|
||||
// key为微信小程序id
|
||||
AdapayConfigFactory.register(wechatAppId, this);
|
||||
// key为支付宝小程序id
|
||||
AdapayConfigFactory.register(alipayAppId, this);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -84,9 +84,9 @@ public class AdapayService {
|
||||
private MemberBasicInfoService memberBasicInfoService;
|
||||
|
||||
/**
|
||||
* 获取支付参数
|
||||
* 获取支付参数-微信支付
|
||||
*/
|
||||
public Map<String, Object> createPayment(PayOrderDTO dto) {
|
||||
public Map<String, Object> createPaymentForWechat(PayOrderDTO dto) {
|
||||
// log.info("===============使用汇付支付-获取支付参数");
|
||||
// 相同参数重复请求,返回同一个支付对象
|
||||
String redisKey = CacheConstants.ADAPAY_ORDER_PARAM + dto.getOrderCode();
|
||||
@@ -173,6 +173,97 @@ public class AdapayService {
|
||||
return resultMap;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取支付参数-支付宝支付
|
||||
*/
|
||||
public Map<String, Object> createPaymentForAlipay(PayOrderDTO dto) {
|
||||
// log.info("===============使用汇付支付-获取支付参数");
|
||||
// 相同参数重复请求,返回同一个支付对象
|
||||
String redisKey = CacheConstants.ADAPAY_ORDER_PARAM + dto.getOrderCode();
|
||||
Map<String, Object> resultMap = redisCache.getCacheObject(redisKey);
|
||||
if (resultMap != null) {
|
||||
// 表示已经获取到支付参数了,后续再有支付请求就拒绝
|
||||
return resultMap;
|
||||
}
|
||||
|
||||
// 获取支付配置
|
||||
AbstractAdapayConfig config = AdapayConfigFactory.getConfig(dto.getAlipayAppId());
|
||||
if (config == null) {
|
||||
throw new BusinessException(ReturnCodeEnum.CODE_ADAPAY_CONFIG_IS_NULL_ERROR);
|
||||
}
|
||||
|
||||
// 获取openId
|
||||
MemberBasicInfo memberBasicInfo = memberBasicInfoService.selectInfoByMemberId(dto.getMemberId());
|
||||
if (memberBasicInfo == null) {
|
||||
throw new BusinessException(ReturnCodeEnum.CODE_GET_OPEN_ID_BY_CODE_ERROR);
|
||||
}
|
||||
String openId = memberBasicInfo.getOpenId();
|
||||
|
||||
// 支付场景
|
||||
String type = dto.getType();
|
||||
|
||||
// 封装对象
|
||||
String amount = AdapayUtil.formatAmount(dto.getPayAmount()); // 用户支付金额
|
||||
String delayMode = pileMerchantInfoService.getDelayModeByWechatAppId(dto.getWechatAppId());
|
||||
String payMode = MerchantDelayModeEnum.getAdapayPayMode(delayMode);
|
||||
CreateAdaPaymentParam createAdaPaymentParam = new CreateAdaPaymentParam();
|
||||
// 请求订单号, 防止请求订单号重复,结尾拼接时间
|
||||
String orderNo = dto.getOrderCode() + "_" + DateUtils.dateTimeNow();
|
||||
createAdaPaymentParam.setOrder_no(orderNo);
|
||||
createAdaPaymentParam.setPay_amt(amount);
|
||||
createAdaPaymentParam.setApp_id(config.getAdapayAppId());
|
||||
|
||||
// 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_desc(dto.getGoodsDesc()); // 这个字段是微信支付凭证的商品名
|
||||
Map<String, String> map = Maps.newHashMap();
|
||||
map.put("type", type);
|
||||
map.put("orderCode", dto.getOrderCode());
|
||||
map.put("payMode", payMode);
|
||||
map.put("memberId", dto.getMemberId());
|
||||
createAdaPaymentParam.setDescription(JSON.toJSONString(map));
|
||||
// 异步通知地址,url为http/https路径,服务器POST回调,URL 上请勿附带参数
|
||||
createAdaPaymentParam.setNotify_url(ADAPAY_CALLBACK_URL);
|
||||
|
||||
// alipay_lite参数 buyer_id String(100) Y 买家的支付宝用户 id
|
||||
createAdaPaymentParam.setExpend(JSON.toJSONString(ImmutableMap.of("buyer_id", openId)));
|
||||
|
||||
// 延时分账
|
||||
if (StringUtils.isNotBlank(payMode)) {
|
||||
createAdaPaymentParam.setPay_mode(payMode);
|
||||
}
|
||||
try {
|
||||
Map<String, Object> response = Payment.create(BeanMap.create(createAdaPaymentParam), config.getWechatAppId());
|
||||
log.info("创建汇付支付参数:{}, response:{}", JSON.toJSONString(createAdaPaymentParam), JSON.toJSONString(response));
|
||||
if (response != null && !response.isEmpty()) {
|
||||
String status = (String) response.get("status");
|
||||
if (!StringUtils.equals(status, AdapayStatusEnum.SUCCEEDED.getValue())) {
|
||||
String error_msg = (String) response.get("error_msg");
|
||||
throw new BusinessException(ReturnCodeEnum.CODE_GET_WECHAT_PAY_PARAMETER_ERROR.getValue(), error_msg);
|
||||
}
|
||||
JSONObject expend = JSONObject.parseObject(response.get("expend").toString());
|
||||
JSONObject pay_info = expend.getJSONObject("pay_info");
|
||||
resultMap = JSONObject.parseObject(pay_info.toJSONString(), new TypeReference<Map<String, Object>>() {});
|
||||
}
|
||||
} catch (BaseAdaPayException e) {
|
||||
log.error("汇付-获取支付对象发生异常, orderCode:{}", dto.getOrderCode(), e);
|
||||
}
|
||||
|
||||
// 放缓存
|
||||
if (resultMap != null) {
|
||||
// 请求参数放入缓存,15分钟以内返回同一个支付参数
|
||||
redisCache.setCacheObject(redisKey, resultMap, 15, TimeUnit.MINUTES);
|
||||
|
||||
// 请求订单号放redis
|
||||
redisCache.setCacheObject(CacheConstants.ORDER_WECHAT_PAY_PARAMETERS + dto.getOrderCode(), orderNo, CacheConstants.cache_expire_time_10d);
|
||||
}
|
||||
return resultMap;
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建结算账户
|
||||
*
|
||||
|
||||
@@ -66,6 +66,11 @@ public class PayOrderDTO extends BaseDTO{
|
||||
*/
|
||||
private String wechatAppId;
|
||||
|
||||
/**
|
||||
* 支付宝小程序appId
|
||||
*/
|
||||
private String alipayAppId;
|
||||
|
||||
/**
|
||||
* 商品标题
|
||||
*/
|
||||
|
||||
@@ -140,6 +140,8 @@ public interface PileMerchantInfoService {
|
||||
*/
|
||||
String getDelayModeByWechatAppId(String wechatAppId);
|
||||
|
||||
String getDelayModeByAlipayAppId(String alipayAppId);
|
||||
|
||||
/**
|
||||
* 通过运营商id查询一级运营商配置的delayMode
|
||||
* @param merchantId 运营商id
|
||||
|
||||
@@ -578,7 +578,7 @@ public class OrderPileOccupyServiceImpl implements OrderPileOccupyService {
|
||||
dto.setGoodsTitle("占桩费用");
|
||||
dto.setGoodsDesc("占桩订单金额");
|
||||
dto.setType(ScenarioEnum.OCCUPY.getValue());
|
||||
Map<String, Object> weixinMap = adapayService.createPayment(dto);
|
||||
Map<String, Object> weixinMap = adapayService.createPaymentForWechat(dto);
|
||||
resultMap.put("weixinMap", weixinMap);
|
||||
} else if (StringUtils.equals(dto.getPayMode(), OrderPayModeEnum.PAYMENT_OF_WHITELIST.getValue())) { // 白名单支付
|
||||
whiteListPayOccupyPileOrder(dto);
|
||||
|
||||
@@ -514,6 +514,20 @@ public class PileMerchantInfoServiceImpl implements PileMerchantInfoService {
|
||||
return merchant.getDelayMode();
|
||||
}
|
||||
|
||||
/**
|
||||
* 通过wechatAppId查询一级运营商的延时支付模式配置
|
||||
* @param alipayAppId 微信小程序id
|
||||
* @return 延时分账模式(0-不延时;1-延时分账)
|
||||
*/
|
||||
@Override
|
||||
public String getDelayModeByAlipayAppId(String alipayAppId) {
|
||||
PileMerchantInfo merchant = getFirstLevelMerchantByAlipayAppId(alipayAppId);
|
||||
if (merchant == null) {
|
||||
throw new BusinessException(ReturnCodeEnum.CODE_GET_FIRST_LEVEL_MERCHANT_BY_APP_ID);
|
||||
}
|
||||
return merchant.getDelayMode();
|
||||
}
|
||||
|
||||
/**
|
||||
* 通过运营商id查询一级运营商配置的delayMode
|
||||
* @param merchantId
|
||||
|
||||
@@ -102,10 +102,25 @@ public class DelayMerchantProgramLogic extends AbstractProgramLogic {
|
||||
dto.setGoodsTitle(goodsTitle);
|
||||
dto.setGoodsDesc(goodsDesc);
|
||||
dto.setType(ScenarioEnum.ORDER.getValue());
|
||||
Map<String, Object> weixinMap = onlinePaymentOrder(dto);
|
||||
Map<String, Object> weixinMap = onlinePaymentOrderForWechat(dto);
|
||||
|
||||
// 返回微信支付参数
|
||||
resultMap.put("weixinMap", weixinMap);
|
||||
} else if (StringUtils.equals(dto.getPayMode(), OrderPayModeEnum.PAYMENT_OF_ALIPAY.getValue())) {
|
||||
// 2023-07-11 全部改为汇付支付
|
||||
String goodsTitle = "充电费用";
|
||||
String goodsDesc = "充电桩预付款金额";
|
||||
if (StringUtils.equals(orderInfo.getPayStatus(), OrderPayStatusEnum.repay.getValue())) {
|
||||
goodsTitle = "补缴费用";
|
||||
goodsDesc = dto.getOrderCode() + "订单补缴金额";
|
||||
}
|
||||
dto.setGoodsTitle(goodsTitle);
|
||||
dto.setGoodsDesc(goodsDesc);
|
||||
dto.setType(ScenarioEnum.ORDER.getValue());
|
||||
Map<String, Object> weixinMap = onlinePaymentOrderForWechat(dto);
|
||||
|
||||
// 返回微信支付参数
|
||||
resultMap.put("alipayMap", weixinMap);
|
||||
} else if (StringUtils.equals(dto.getPayMode(), OrderPayModeEnum.PAYMENT_OF_WHITELIST.getValue())) { // 白名单支付
|
||||
// 白名单支付可以直接调支付回调方法
|
||||
dto.setPayAmount(Constants.WHITELIST_DEFAULT_AMOUNT);
|
||||
@@ -319,12 +334,18 @@ public class DelayMerchantProgramLogic extends AbstractProgramLogic {
|
||||
/**
|
||||
* 在线支付订单
|
||||
*/
|
||||
public Map<String, Object> onlinePaymentOrder(PayOrderDTO dto) {
|
||||
public Map<String, Object> onlinePaymentOrderForWechat(PayOrderDTO dto) {
|
||||
logger.info("【{}】-在线支付订单start, param:{}", this.getClass().getSimpleName(), JSON.toJSONString(dto));
|
||||
Map<String, Object> weixinMap = adapayService.createPayment(dto);
|
||||
Map<String, Object> weixinMap = adapayService.createPaymentForWechat(dto);
|
||||
return weixinMap;
|
||||
}
|
||||
|
||||
public Map<String, Object> onlinePaymentOrderForAlipay(PayOrderDTO dto) {
|
||||
logger.info("【{}】-在线支付订单start, param:{}", this.getClass().getSimpleName(), JSON.toJSONString(dto));
|
||||
Map<String, Object> alipayMap = adapayService.createPaymentForAlipay(dto);
|
||||
return alipayMap;
|
||||
}
|
||||
|
||||
/**
|
||||
* 白名单支付订单
|
||||
*/
|
||||
|
||||
@@ -212,7 +212,7 @@ public class NotDelayMerchantProgramLogic extends AbstractProgramLogic {
|
||||
*/
|
||||
public Map<String, Object> onlinePaymentOrder(PayOrderDTO dto) {
|
||||
logger.info("【{}】-在线支付订单start, param:{}", this.getClass().getSimpleName(), JSON.toJSONString(dto));
|
||||
Map<String, Object> weixinMap = adapayService.createPayment(dto);
|
||||
Map<String, Object> weixinMap = adapayService.createPaymentForWechat(dto);
|
||||
return weixinMap;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user