diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/constant/miniplatform/MiniPlatformLoginErrorEnum.java b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/constant/miniplatform/AppPlusPlatformLoginErrorEnum.java similarity index 83% rename from pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/constant/miniplatform/MiniPlatformLoginErrorEnum.java rename to pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/constant/miniplatform/AppPlusPlatformLoginErrorEnum.java index 9318e5426..e1cb9c5bb 100644 --- a/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/constant/miniplatform/MiniPlatformLoginErrorEnum.java +++ b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/constant/miniplatform/AppPlusPlatformLoginErrorEnum.java @@ -11,7 +11,7 @@ import java.util.Arrays; */ @AllArgsConstructor @Getter -public enum MiniPlatformLoginErrorEnum { +public enum AppPlusPlatformLoginErrorEnum { GET_PHONE_ERROR("10", "获取手机号错误"), USER_NOT_EXIST("20", "用户不存在"), @@ -21,7 +21,7 @@ public enum MiniPlatformLoginErrorEnum { private final String type; private final String description; - public static MiniPlatformLoginErrorEnum valueOfByType(String type) { + public static AppPlusPlatformLoginErrorEnum valueOfByType(String type) { if (ObjectUtil.isEmpty(type)) return null; return Arrays.stream(values()).filter(v -> ObjectUtil.equals(type, v.getType())).findFirst().get(); } diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/constant/miniplatform/MiniPlatformTypeEnum.java b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/constant/miniplatform/AppPlusPlatformTypeEnum.java similarity index 77% rename from pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/constant/miniplatform/MiniPlatformTypeEnum.java rename to pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/constant/miniplatform/AppPlusPlatformTypeEnum.java index df9b4c697..2f140d33b 100644 --- a/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/constant/miniplatform/MiniPlatformTypeEnum.java +++ b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/constant/miniplatform/AppPlusPlatformTypeEnum.java @@ -1,7 +1,6 @@ package com.bsd.pjcloud.thirdparty.constant.miniplatform; import cn.hutool.core.util.ObjectUtil; -import com.bsd.pjcloud.thirdparty.constant.ThirdKeyTypeEnum; import lombok.AllArgsConstructor; import lombok.Getter; @@ -12,7 +11,7 @@ import java.util.Arrays; */ @AllArgsConstructor @Getter -public enum MiniPlatformTypeEnum { +public enum AppPlusPlatformTypeEnum { WECHAT("10", "微信小程序"), ALI_PAY("20", "支付宝"), @@ -21,7 +20,7 @@ public enum MiniPlatformTypeEnum { private final String type; private final String description; - public static MiniPlatformTypeEnum valueOfByType(String type) { + public static AppPlusPlatformTypeEnum valueOfByType(String type) { if (ObjectUtil.isEmpty(type)) return null; return Arrays.stream(values()).filter(v -> ObjectUtil.equals(type, v.getType())).findFirst().get(); } diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/dto/appplus/ThirdMiniAppGetUniqueDto.java b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/dto/appplus/ThirdMiniAppGetUniqueDto.java index c6e30d9fe..7934e08e1 100644 --- a/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/dto/appplus/ThirdMiniAppGetUniqueDto.java +++ b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/dto/appplus/ThirdMiniAppGetUniqueDto.java @@ -1,6 +1,6 @@ package com.bsd.pjcloud.thirdparty.dto.appplus; -import com.bsd.pjcloud.thirdparty.constant.miniplatform.MiniPlatformTypeEnum; +import com.bsd.pjcloud.thirdparty.constant.miniplatform.AppPlusPlatformTypeEnum; import jakarta.validation.constraints.NotEmpty; import jakarta.validation.constraints.NotNull; import lombok.Data; @@ -12,7 +12,7 @@ public class ThirdMiniAppGetUniqueDto { * 小程序平台 */ @NotNull(message = "小程序平台标识不能为空") - private MiniPlatformTypeEnum miniPlatformType; + private AppPlusPlatformTypeEnum miniPlatformType; @NotEmpty(message = "code不能为空") private String code; diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/dto/appplus/ThirdMiniAppOAth2LoginDto.java b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/dto/appplus/ThirdMiniAppOAth2LoginDto.java index 425b9ea9f..a93286dff 100644 --- a/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/dto/appplus/ThirdMiniAppOAth2LoginDto.java +++ b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/dto/appplus/ThirdMiniAppOAth2LoginDto.java @@ -1,6 +1,6 @@ package com.bsd.pjcloud.thirdparty.dto.appplus; -import com.bsd.pjcloud.thirdparty.constant.miniplatform.MiniPlatformTypeEnum; +import com.bsd.pjcloud.thirdparty.constant.miniplatform.AppPlusPlatformTypeEnum; import jakarta.validation.constraints.NotEmpty; import jakarta.validation.constraints.NotNull; import lombok.Data; @@ -12,7 +12,7 @@ public class ThirdMiniAppOAth2LoginDto { * 小程序平台 */ @NotNull(message = "小程序平台标识不能为空") - private MiniPlatformTypeEnum miniPlatformType; + private AppPlusPlatformTypeEnum miniPlatformType; @NotEmpty(message = "phoneCode不能为空") private String phoneCode; diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/dto/appplus/ThirdMiniAppPayDto.java b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/dto/appplus/ThirdMiniAppPayDto.java index 97d375cbd..8e25d1a96 100644 --- a/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/dto/appplus/ThirdMiniAppPayDto.java +++ b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/dto/appplus/ThirdMiniAppPayDto.java @@ -1,6 +1,6 @@ package com.bsd.pjcloud.thirdparty.dto.appplus; -import com.bsd.pjcloud.thirdparty.constant.miniplatform.MiniPlatformTypeEnum; +import com.bsd.pjcloud.thirdparty.constant.miniplatform.AppPlusPlatformTypeEnum; import com.bsd.pjcloud.thirdparty.constant.pay.ThirdPayOrderBizTypeEnum; import jakarta.validation.constraints.NotEmpty; import jakarta.validation.constraints.NotNull; @@ -26,7 +26,7 @@ public class ThirdMiniAppPayDto { * 小程序平台 */ @NotNull(message = "小程序平台标识不能为空") - private MiniPlatformTypeEnum miniPlatformType; + private AppPlusPlatformTypeEnum miniPlatformType; /** * 金额(分) @@ -36,7 +36,7 @@ public class ThirdMiniAppPayDto { /** * 用户标识 */ - @NotEmpty(message = "用户标识不能为空") + // @NotEmpty(message = "用户标识不能为空") private String openId; } diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/dto/appplus/pay/wechat/ThirdMiniJsapiPayDto.java b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/dto/appplus/pay/wechat/ThirdAppPlusPayDto.java similarity index 90% rename from pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/dto/appplus/pay/wechat/ThirdMiniJsapiPayDto.java rename to pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/dto/appplus/pay/wechat/ThirdAppPlusPayDto.java index b60e24276..03f5420f1 100644 --- a/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/dto/appplus/pay/wechat/ThirdMiniJsapiPayDto.java +++ b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/dto/appplus/pay/wechat/ThirdAppPlusPayDto.java @@ -4,10 +4,10 @@ import com.bsd.pjcloud.thirdparty.constant.pay.ThirdPayOrderBizTypeEnum; import lombok.Data; /** - * JSAPI/小程序下单 + * app支付参数 */ @Data -public class ThirdMiniJsapiPayDto { +public class ThirdAppPlusPayDto { /** * 充值业务类型 diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/vo/appplus/pay/ThirdMiniAppPayVo.java b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/vo/appplus/pay/ThirdMiniAppPayVo.java index 63e527c76..fc14e6080 100644 --- a/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/vo/appplus/pay/ThirdMiniAppPayVo.java +++ b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/vo/appplus/pay/ThirdMiniAppPayVo.java @@ -7,6 +7,6 @@ import java.util.HashMap; @Data public class ThirdMiniAppPayVo { - private HashMap miniAppPayParams; + private HashMap appPlusPayParams; } diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-biz/pom.xml b/pjcloud-thirdparty/pjcloud-thirdparty-biz/pom.xml index 2c215cfc2..f29305865 100644 --- a/pjcloud-thirdparty/pjcloud-thirdparty-biz/pom.xml +++ b/pjcloud-thirdparty/pjcloud-thirdparty-biz/pom.xml @@ -13,6 +13,12 @@ pjcloud-thirdparty-biz + + + com.alipay.sdk + alipay-sdk-java + 4.40.251.ALL + com.aliyun diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/config/AppPlusPayConfig.java b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/config/AppPlusPayConfig.java index 1f7da63e4..5853b8acc 100644 --- a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/config/AppPlusPayConfig.java +++ b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/config/AppPlusPayConfig.java @@ -74,6 +74,16 @@ public class AppPlusPayConfig { private String appId; + /** + * 应用私钥 + */ + private String appPrivateKey; + + /** + * 支付公钥 + */ + private String alipayPublicKey; + } } diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/ThirdAppPlusAliPayService.java b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/ThirdAppPlusAliPayService.java index dc2a00212..eef7f8a0e 100644 --- a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/ThirdAppPlusAliPayService.java +++ b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/ThirdAppPlusAliPayService.java @@ -1,6 +1,13 @@ package com.bsd.pjcloud.thirdparty.service; +import com.bsd.pjcloud.thirdparty.dto.appplus.pay.wechat.ThirdAppPlusPayDto; + public interface ThirdAppPlusAliPayService { + /** + * app支付 + */ + String appPay(ThirdAppPlusPayDto dto); + } diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/ThirdAppPlusWechatService.java b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/ThirdAppPlusWechatService.java index 62d1cc482..1fcfe15f4 100644 --- a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/ThirdAppPlusWechatService.java +++ b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/ThirdAppPlusWechatService.java @@ -14,7 +14,7 @@ public interface ThirdAppPlusWechatService { /** * JSAPI/小程序下单 */ - ThirdMiniJsapiPayVo jsapiPay(ThirdMiniJsapiPayDto dto); + ThirdMiniJsapiPayVo jsapiPay(ThirdAppPlusPayDto dto); /** * 获取openId diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/appplus/ThirdAppPlusAliPayServiceImpl.java b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/appplus/ThirdAppPlusAliPayServiceImpl.java index 3351c96cf..58812a5de 100644 --- a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/appplus/ThirdAppPlusAliPayServiceImpl.java +++ b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/appplus/ThirdAppPlusAliPayServiceImpl.java @@ -1,14 +1,34 @@ package com.bsd.pjcloud.thirdparty.service.impl.appplus; +import cn.hutool.core.date.DatePattern; +import cn.hutool.core.date.LocalDateTimeUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.json.JSONUtil; +import com.alipay.api.AlipayClient; +import com.alipay.api.AlipayConfig; +import com.alipay.api.DefaultAlipayClient; +import com.alipay.api.domain.AlipayTradeAppPayModel; +import com.alipay.api.request.AlipayTradeAppPayRequest; +import com.alipay.api.response.AlipayTradeAppPayResponse; import com.bsd.pjcloud.thirdparty.config.AppPlusPayConfig; +import com.bsd.pjcloud.thirdparty.constant.miniplatform.AppPlusPlatformTypeEnum; +import com.bsd.pjcloud.thirdparty.constant.pay.ThirdPayOrderStatusEnum; +import com.bsd.pjcloud.thirdparty.dto.appplus.pay.wechat.ThirdAppPlusPayDto; +import com.bsd.pjcloud.thirdparty.entity.pay.ThirdPayOrderEntity; import com.bsd.pjcloud.thirdparty.service.ThirdAppPlusAliPayService; +import com.bsd.pjcloud.thirdparty.service.ThirdPayOrderService; +import com.bsd.pjcloud.thirdparty.vo.appplus.pay.wechat.ThirdMiniJsapiPayVo; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.time.LocalDateTime; + /** - * 支付宝小程序(小程序版本) + * 支付宝小程序(app版本) */ @Service @Validated @@ -16,6 +36,88 @@ import org.springframework.validation.annotation.Validated; @RequiredArgsConstructor public class ThirdAppPlusAliPayServiceImpl implements ThirdAppPlusAliPayService { - private final AppPlusPayConfig miniAppConfig; + private final String TAG = "微信小程序支付(app版本)"; + + static private AlipayClient alipayClient = null; + + private final AppPlusPayConfig appPlusPayConfig; + private final ThirdPayOrderService thirdPayOrderService; + + + private AlipayConfig getAlipayConfig() { + AppPlusPayConfig.AliPayConfig aliPayConfig = appPlusPayConfig.getAliPayConfig(); + AlipayConfig alipayConfig = new AlipayConfig(); + alipayConfig.setServerUrl("https://openapi.alipay.com/gateway.do"); + alipayConfig.setAppId(aliPayConfig.getAppId()); + alipayConfig.setPrivateKey(aliPayConfig.getAppPrivateKey()); + alipayConfig.setFormat("json"); + alipayConfig.setAlipayPublicKey(aliPayConfig.getAlipayPublicKey()); + alipayConfig.setCharset("UTF-8"); + alipayConfig.setSignType("RSA2"); + return alipayConfig; + } + + private synchronized AlipayClient getAlipayClient() { + if (alipayClient == null) { + try { + alipayClient = new DefaultAlipayClient(getAlipayConfig()); + } catch (Exception e) { + e.printStackTrace(); + log.error("初始化支付宝客户端失败error:{}", e.getMessage()); + } + } + return alipayClient; + } + + private String fenToYuan(BigDecimal fen) { + if (ObjectUtil.isEmpty(fen)) { + return "0"; + } + return fen.divide(new BigDecimal(100), 2, RoundingMode.HALF_UP).toString(); + } + + + /** + * app支付 + */ + public String appPay(ThirdAppPlusPayDto dto) { + LocalDateTime now = LocalDateTime.now(); + + ThirdPayOrderEntity payOrder = new ThirdPayOrderEntity(); + payOrder.setPayPlatformType(AppPlusPlatformTypeEnum.ALI_PAY.getType()); + payOrder.setBizId(dto.getBizId()); + payOrder.setBizType(dto.getBizType().getType()); + payOrder.setUserId(dto.getUserId()); + payOrder.setUserCode(dto.getOpenid()); + payOrder.setPrice(dto.getAmount()); + payOrder.setStatus(ThirdPayOrderStatusEnum.PAY_UNPAID.getType()); + payOrder.setPayNo(dto.getOutTradeNo()); + + AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest(); + AlipayTradeAppPayModel model = new AlipayTradeAppPayModel(); + + model.setOutTradeNo(dto.getOutTradeNo()); + model.setTotalAmount(fenToYuan(BigDecimal.valueOf(dto.getAmount()))); + model.setSubject("资安信"); + // 超时时间15分钟 + model.setTimeExpire(LocalDateTimeUtil.format(now.plusMinutes(15), DatePattern.NORM_DATETIME_PATTERN)); + + payOrder.setPayRep(JSONUtil.toJsonStr(model)); + request.setBizModel(model); + try { + AlipayTradeAppPayResponse response = getAlipayClient().sdkExecute(request); + String orderStr = response.getBody(); + + payOrder.setPayTime(LocalDateTime.now()); + payOrder.setPayRes(orderStr); + return orderStr; + } catch (Exception e) { + e.printStackTrace(); + log.error("|{}|app支付异常,error:|{}|", TAG, e.getMessage()); + return null; + } finally { + thirdPayOrderService.save(payOrder); + } + } } diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/appplus/ThirdAppPlusServiceImpl.java b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/appplus/ThirdAppPlusServiceImpl.java index 9bc1a4664..da668e320 100644 --- a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/appplus/ThirdAppPlusServiceImpl.java +++ b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/appplus/ThirdAppPlusServiceImpl.java @@ -13,14 +13,14 @@ import com.bsd.pjcloud.app.api.constant.AppUserTypeEnum; import com.bsd.pjcloud.app.api.dto.AppAdminSyncDto; import com.bsd.pjcloud.app.api.dto.AppUserInfo; import com.bsd.pjcloud.app.api.feign.RemoteAppUserService; -import com.bsd.pjcloud.thirdparty.constant.miniplatform.MiniPlatformLoginErrorEnum; -import com.bsd.pjcloud.thirdparty.constant.miniplatform.MiniPlatformTypeEnum; +import com.bsd.pjcloud.thirdparty.constant.miniplatform.AppPlusPlatformLoginErrorEnum; +import com.bsd.pjcloud.thirdparty.constant.miniplatform.AppPlusPlatformTypeEnum; import com.bsd.pjcloud.thirdparty.constant.pay.ThirdPayOrderBizTypeEnum; import com.bsd.pjcloud.thirdparty.constant.pay.ThirdPayOrderStatusEnum; import com.bsd.pjcloud.thirdparty.dto.appplus.ThirdMiniAppGetUniqueDto; import com.bsd.pjcloud.thirdparty.dto.appplus.ThirdMiniAppOAth2LoginDto; import com.bsd.pjcloud.thirdparty.dto.appplus.ThirdMiniAppPayDto; -import com.bsd.pjcloud.thirdparty.dto.appplus.pay.wechat.ThirdMiniJsapiPayDto; +import com.bsd.pjcloud.thirdparty.dto.appplus.pay.wechat.ThirdAppPlusPayDto; import com.bsd.pjcloud.thirdparty.dto.appplus.pay.wechat.ThirdMiniWechatRefundDto; import com.bsd.pjcloud.thirdparty.entity.pay.ThirdPayOrderEntity; import com.bsd.pjcloud.thirdparty.service.*; @@ -38,6 +38,7 @@ import org.springframework.validation.annotation.Validated; import java.time.LocalDateTime; import java.time.ZoneId; +import java.util.HashMap; import java.util.Map; /** @@ -68,22 +69,22 @@ public class ThirdAppPlusServiceImpl implements ThirdAppPlusService { public ThirdMinAppOAth2LoginVo adminLogin(ThirdMiniAppOAth2LoginDto dto) { ThirdMinAppOAth2LoginVo vo = new ThirdMinAppOAth2LoginVo(); // 微信小程序 - if (ObjectUtil.equals(dto.getMiniPlatformType().getType(), MiniPlatformTypeEnum.WECHAT.getType())) { + if (ObjectUtil.equals(dto.getMiniPlatformType().getType(), AppPlusPlatformTypeEnum.WECHAT.getType())) { // 获取手机号 WxMaPhoneNumberInfo phoneInfo = thirdMiniAppWechatService.getPhone(dto.getPhoneCode()); if (ObjectUtil.isEmpty(phoneInfo)) { - vo.setErrorCode(MiniPlatformLoginErrorEnum.GET_PHONE_ERROR.getType()); + vo.setErrorCode(AppPlusPlatformLoginErrorEnum.GET_PHONE_ERROR.getType()); return vo; } // 根据手机号查询用户 UserInfo userInfo = remoteUserService.getInnerByPhone(phoneInfo.getPurePhoneNumber()).getData(); if (ObjectUtil.isEmpty(userInfo)) { - vo.setErrorCode(MiniPlatformLoginErrorEnum.USER_NOT_EXIST.getType()); + vo.setErrorCode(AppPlusPlatformLoginErrorEnum.USER_NOT_EXIST.getType()); return vo; } // 获取用户唯一编号 ThirdMiniAppGetUniqueDto getUniqueDto = new ThirdMiniAppGetUniqueDto(); - getUniqueDto.setMiniPlatformType(MiniPlatformTypeEnum.WECHAT); + getUniqueDto.setMiniPlatformType(AppPlusPlatformTypeEnum.WECHAT); getUniqueDto.setCode(dto.getPhoneCode()); getUniqueDto.setUserId(userInfo.getSysUser().getUserId()); String uniqueCode = getUniqueCode(getUniqueDto); @@ -96,7 +97,7 @@ public class ThirdAppPlusServiceImpl implements ThirdAppPlusService { appAdminSyncDto.setAvatarImage(userInfo.getSysUser().getAvatar()); AppUserInfo appUserInfo = remoteAppUserService.syncAdminAccountInfo(appAdminSyncDto).getData(); if (ObjectUtil.isEmpty(appUserInfo)) { - vo.setErrorCode(MiniPlatformLoginErrorEnum.LOGIN_ERROR.getType()); + vo.setErrorCode(AppPlusPlatformLoginErrorEnum.LOGIN_ERROR.getType()); return vo; } // 执行登录 @@ -104,14 +105,14 @@ public class ThirdAppPlusServiceImpl implements ThirdAppPlusService { userTokenDTO.setSysUser(userInfo.getSysUser()); Map dataMap = (Map) remoteTokenService.generateToken(userTokenDTO).getData(); if (ObjectUtil.isEmpty(dataMap)) { - vo.setErrorCode(MiniPlatformLoginErrorEnum.LOGIN_ERROR.getType()); + vo.setErrorCode(AppPlusPlatformLoginErrorEnum.LOGIN_ERROR.getType()); return vo; } vo.setAccessToken(dataMap.getOrDefault("accessToken", "")); vo.setRefreshToken(dataMap.getOrDefault("refreshToken", "")); } // 支付宝 - else if (ObjectUtil.equals(dto.getMiniPlatformType().getType(), MiniPlatformTypeEnum.ALI_PAY.getType())) { + else if (ObjectUtil.equals(dto.getMiniPlatformType().getType(), AppPlusPlatformTypeEnum.ALI_PAY.getType())) { } return vo; @@ -123,9 +124,9 @@ public class ThirdAppPlusServiceImpl implements ThirdAppPlusService { @Override public String getUniqueCode(ThirdMiniAppGetUniqueDto dto) { String uniqueCode = null; - if (ObjectUtil.equals(dto.getMiniPlatformType().getType(), MiniPlatformTypeEnum.WECHAT.getType())) { + if (ObjectUtil.equals(dto.getMiniPlatformType().getType(), AppPlusPlatformTypeEnum.WECHAT.getType())) { uniqueCode = thirdMiniAppWechatService.getOpenId(dto.getCode()); - } else if (ObjectUtil.equals(dto.getMiniPlatformType().getType(), MiniPlatformTypeEnum.ALI_PAY.getType())) { + } else if (ObjectUtil.equals(dto.getMiniPlatformType().getType(), AppPlusPlatformTypeEnum.ALI_PAY.getType())) { } return uniqueCode; @@ -161,26 +162,32 @@ public class ThirdAppPlusServiceImpl implements ThirdAppPlusService { throw new RuntimeException("不支持的支付类型"); } try { + ThirdAppPlusPayDto appPlusPayDto = new ThirdAppPlusPayDto(); + // 当前时间戳+10位随机字符串 + String outTradeNo = LocalDateTime.now().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli() + RandomUtil.randomString(10); + appPlusPayDto.setOutTradeNo(outTradeNo); + appPlusPayDto.setBizId(dto.getBizId()); + appPlusPayDto.setBizType(dto.getBizType()); + appPlusPayDto.setUserId(userId); + appPlusPayDto.setOpenid(dto.getOpenId()); + appPlusPayDto.setAmount(dto.getAmount()); // 微信小程序 - if (ObjectUtil.equals(dto.getMiniPlatformType().getType(), MiniPlatformTypeEnum.WECHAT.getType())) { - ThirdMiniJsapiPayDto wechatPayDto = new ThirdMiniJsapiPayDto(); - // 当前时间戳+10位随机字符串 - String outTradeNo = LocalDateTime.now().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli() + RandomUtil.randomString(10); - wechatPayDto.setOutTradeNo(outTradeNo); - wechatPayDto.setBizId(dto.getBizId()); - wechatPayDto.setBizType(dto.getBizType()); - wechatPayDto.setUserId(userId); - wechatPayDto.setOpenid(dto.getOpenId()); - wechatPayDto.setAmount(dto.getAmount()); - ThirdMiniJsapiPayVo thirdMiniJsapiPayVo = thirdMiniAppWechatService.jsapiPay(wechatPayDto); + if (ObjectUtil.equals(dto.getMiniPlatformType().getType(), AppPlusPlatformTypeEnum.WECHAT.getType())) { + ThirdMiniJsapiPayVo thirdMiniJsapiPayVo = thirdMiniAppWechatService.jsapiPay(appPlusPayDto); if (ObjectUtil.isEmpty(thirdMiniJsapiPayVo)) { throw new RuntimeException("创建微信支付错误"); } - result.setMiniAppPayParams(thirdMiniJsapiPayVo.getMiniAppPayParams()); + result.setAppPlusPayParams(thirdMiniJsapiPayVo.getMiniAppPayParams()); } // 支付宝 - else if (ObjectUtil.equals(dto.getMiniPlatformType().getType(), MiniPlatformTypeEnum.ALI_PAY.getType())) { - + else if (ObjectUtil.equals(dto.getMiniPlatformType().getType(), AppPlusPlatformTypeEnum.ALI_PAY.getType())) { + String orderStr = thirdMiniAppAliPayService.appPay(appPlusPayDto); + if (ObjectUtil.isEmpty(orderStr)) { + throw new RuntimeException("创建支付宝支付错误"); + } + HashMap aliPayParams = new HashMap(); + aliPayParams.put("orderInfo", orderStr); + result.setAppPlusPayParams(aliPayParams); } // 不支持的支付类型 else { @@ -204,11 +211,11 @@ public class ThirdAppPlusServiceImpl implements ThirdAppPlusService { throw new RuntimeException("订单不存在"); } // 微信小程序 - if (ObjectUtil.equals(thirdPayOrder.getPayPlatformType(), MiniPlatformTypeEnum.WECHAT.getType())) { + if (ObjectUtil.equals(thirdPayOrder.getPayPlatformType(), AppPlusPlatformTypeEnum.WECHAT.getType())) { thirdMiniAppWechatService.refund(thirdPayOrder, dto); } // 支付宝 - else if (ObjectUtil.equals(thirdPayOrder.getPayPlatformType(), MiniPlatformTypeEnum.ALI_PAY.getType())) { + else if (ObjectUtil.equals(thirdPayOrder.getPayPlatformType(), AppPlusPlatformTypeEnum.ALI_PAY.getType())) { } // 不支持的支付类型 @@ -223,9 +230,9 @@ public class ThirdAppPlusServiceImpl implements ThirdAppPlusService { */ @Override public String miniPayCallback(String body, Map headers) { - MiniPlatformTypeEnum platformType = checkMiniPlatformType(body); + AppPlusPlatformTypeEnum platformType = checkMiniPlatformType(body); // 微信小程序 - if (ObjectUtil.equals(platformType, MiniPlatformTypeEnum.WECHAT)) { + if (ObjectUtil.equals(platformType, AppPlusPlatformTypeEnum.WECHAT)) { ThirdPayOrderEntity thirdPayOrder = thirdMiniAppWechatService.payCallback(body, headers); if (ObjectUtil.isEmpty(thirdPayOrder)) { return ThirdMiniWechatQueryVo.wechantError(); @@ -235,7 +242,7 @@ public class ThirdAppPlusServiceImpl implements ThirdAppPlusService { return isSuccess ? ThirdMiniWechatQueryVo.wechantSuccess() : ThirdMiniWechatQueryVo.wechantError(); } // 支付宝 - else if (ObjectUtil.equals(platformType, MiniPlatformTypeEnum.ALI_PAY)) { + else if (ObjectUtil.equals(platformType, AppPlusPlatformTypeEnum.ALI_PAY)) { return null; } // 不支持的支付类型 @@ -249,9 +256,9 @@ public class ThirdAppPlusServiceImpl implements ThirdAppPlusService { */ @Override public String miniRefundCallback(String body, Map headers) { - MiniPlatformTypeEnum platformType = checkRefundMiniPlatformType(body); + AppPlusPlatformTypeEnum platformType = checkRefundMiniPlatformType(body); // 微信小程序 - if (ObjectUtil.equals(platformType, MiniPlatformTypeEnum.WECHAT)) { + if (ObjectUtil.equals(platformType, AppPlusPlatformTypeEnum.WECHAT)) { ThirdPayOrderEntity thirdPayOrder = thirdMiniAppWechatService.refundCallback(body, headers); if (ObjectUtil.isEmpty(thirdPayOrder)) { return ThirdMiniWechantRefunCallbackVo.wechantError(); @@ -261,7 +268,7 @@ public class ThirdAppPlusServiceImpl implements ThirdAppPlusService { return isSuccess ? ThirdMiniWechatQueryVo.wechantSuccess() : ThirdMiniWechatQueryVo.wechantError(); } // 支付宝 - else if (ObjectUtil.equals(platformType, MiniPlatformTypeEnum.ALI_PAY)) { + else if (ObjectUtil.equals(platformType, AppPlusPlatformTypeEnum.ALI_PAY)) { return null; } // 不支持的支付类型 @@ -270,20 +277,20 @@ public class ThirdAppPlusServiceImpl implements ThirdAppPlusService { } } - private MiniPlatformTypeEnum checkMiniPlatformType(String body) { + private AppPlusPlatformTypeEnum checkMiniPlatformType(String body) { ThirdMiniWechatRefundQueryVo vo = JSONUtil.toBean(JSONUtil.toJsonStr(XmlUtil.xmlToMap(body)), ThirdMiniWechatRefundQueryVo.class); // 查询订单 if (ObjectUtil.isNotEmpty(vo) && ObjectUtil.isNotEmpty(vo.getTransaction_id())) { - return MiniPlatformTypeEnum.WECHAT; + return AppPlusPlatformTypeEnum.WECHAT; } return null; } - private MiniPlatformTypeEnum checkRefundMiniPlatformType(String body) { + private AppPlusPlatformTypeEnum checkRefundMiniPlatformType(String body) { ThirdMiniWechantRefunCallbackSoureVo vo = JSONUtil.toBean(JSONUtil.toJsonStr(XmlUtil.xmlToMap(body)), ThirdMiniWechantRefunCallbackSoureVo.class); // 查询订单 if (ObjectUtil.isNotEmpty(vo) && ObjectUtil.isNotEmpty(vo.getAppid()) && ObjectUtil.isNotEmpty(vo.getMch_id()) && ObjectUtil.isNotEmpty(vo.getNonce_str()) && ObjectUtil.isNotEmpty(vo.getReq_info())) { - return MiniPlatformTypeEnum.WECHAT; + return AppPlusPlatformTypeEnum.WECHAT; } return null; } diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/appplus/ThirdAppPlusWechatServiceImpl.java b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/appplus/ThirdAppPlusWechatServiceImpl.java index fa3fe5d5a..8eec16fbc 100644 --- a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/appplus/ThirdAppPlusWechatServiceImpl.java +++ b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/appplus/ThirdAppPlusWechatServiceImpl.java @@ -9,7 +9,7 @@ import cn.hutool.core.util.RandomUtil; import cn.hutool.core.util.XmlUtil; import cn.hutool.json.JSONUtil; import com.bsd.pjcloud.thirdparty.config.AppPlusPayConfig; -import com.bsd.pjcloud.thirdparty.constant.miniplatform.MiniPlatformTypeEnum; +import com.bsd.pjcloud.thirdparty.constant.miniplatform.AppPlusPlatformTypeEnum; import com.bsd.pjcloud.thirdparty.constant.pay.ThirdPayOrderStatusEnum; import com.bsd.pjcloud.thirdparty.dto.appplus.pay.wechat.*; import com.bsd.pjcloud.thirdparty.entity.pay.ThirdPayOrderEntity; @@ -36,7 +36,7 @@ import java.util.Map; import java.util.TreeMap; /** - * 微信小程序(小程序版本) + * 微信小程序(app版本) */ @Service @Validated @@ -44,7 +44,7 @@ import java.util.TreeMap; @RequiredArgsConstructor public class ThirdAppPlusWechatServiceImpl implements ThirdAppPlusWechatService { - private final String TAG = "微信小程序支付(小程序版本)"; + private final String TAG = "微信小程序支付(app版本)"; private final AppPlusPayConfig appPlusPayConfig; @@ -56,11 +56,11 @@ public class ThirdAppPlusWechatServiceImpl implements ThirdAppPlusWechatService * JSAPI/小程序下单 */ @Override - public ThirdMiniJsapiPayVo jsapiPay(ThirdMiniJsapiPayDto dto) { + public ThirdMiniJsapiPayVo jsapiPay(ThirdAppPlusPayDto dto) { AppPlusPayConfig.WechatConfig wechatConfig = appPlusPayConfig.getWechatConfig(); ThirdPayOrderEntity payOrder = new ThirdPayOrderEntity(); - payOrder.setPayPlatformType(MiniPlatformTypeEnum.WECHAT.getType()); + payOrder.setPayPlatformType(AppPlusPlatformTypeEnum.WECHAT.getType()); payOrder.setBizId(dto.getBizId()); payOrder.setBizType(dto.getBizType().getType()); payOrder.setUserId(dto.getUserId()); diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/resources/application.yml b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/resources/application.yml index beaf3f112..383d22029 100644 --- a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/resources/application.yml +++ b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/resources/application.yml @@ -119,8 +119,9 @@ app-plus: spbill-create-ip: 59.202.170.152 base-url: https://api.mch.weixin.qq.com ali-pay-config: - app-id: - + app-id: 2021006147685828 + app-private-key: MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC9OwO+0R0y3wxniFEzoDcVHuSB+5D49WYLi/Bgvqz04Y7dnbphih4ShKNByRxw046c+gG406EZ5KTbfB/AwUflYl0gANTwhuLjK2O+/MaKpfsE2m4vT8MuDsUW4Y00RO0DkLN/Kf9aLrQd62/GtLipVIejHCi9KevclKstO7NomCkJC3ucZ1FIqeeJEhM8aNq0Q7VAfJ0IFiY+yJuqz7Yxpy39tAW5TxFXCzkwQUjRoz4xOD8+N2Qo9OVn6rE1Z65LIa3c6uxTmg8/8s7thwralx57Rr6VDdFSMbnPKplNDFWKlZL8YAmk9PI/3Jg03HH+r3GxBNvTAp5Uk/CqPAAJAgMBAAECggEBAIQqDLKggSE/sf05s2U4WGBzBCxY1OddFhmocopPgqNCSrM0b7GicuCCLThMS4Xt7KRs5Pj/LnzUOeRmLBNHq3xlmB87FX6s5xi8/FyvVcgOp2S7XsvCjNLFVBhoDmRcY6Hi1ctSPNvy1LA0+Quyu2rg9B8TEs0T031rhKcCFItOzvamdTWPZ17AQBykSn+8F4Uhp6EiR17HWyS4TkmLfeS+Q6LgP6VLIhqPgBvC48hMc8pLDv97b26kTe8QcdOFdplqzdYAFCOlaXAS2OHXRieILAjaSVtdPfjqy6wu66PyUuMGnAA4HhvNeTbJIuXv0Y+PsGHXHmGL3YCsVdsVTzUCgYEA6vlP0yQ6+6IFwfMba+8BYEKpEaHT+BsqMuO+jDKINo2HwMA8WBQjkAfsDkgzQrFiicq4ENdSqihEtqbZrgb3lqOajzXU3BUtj49TjIbOmNgofy+du8KnpIGKIXe59T75E9jv8SByBBulGn3Sjwcby1jBEGeVXJ325sjRXFcCvyMCgYEAzinVFXTgJk0hWp4Tj9+4XaO299T85x27Uk3wO5Y5drmPJB/aqxHInzRSvDeyTeXF3++xf0EW1UXYSRazmKIBlr8JqnUZGuwMu4ZWvNGNuMsUA/R19tail6XtRc740kILO1r2DouWmqQtMIrgEyDANkIl+RKsaDNCofAYmuqrrOMCgYBJofDS0IKvQfmd6onIS/BZcuo6PUUIdbLGmbmng1pOBhHpZBRE4aK3StQ9MYDmwGGJnn4JwQAFlHLb7fM+5q4FhaU0hYD7qqNJXnenDMOHAA3ItWovYXNZSMK5dCRQ5vf0sUGXhTxVbzhQ0eb+rRKXqWtusZcLm/C4J2v8DMQukwKBgEZsjch1kzgiMtmUlBQalQ0PpqnEDNwaEOoNi5mfOGPxAQ+S/gxf18tigTygPf1UFyLm6xgQMO+Lm1VkNtdVx/spqPCcbYX/yl2ohyqa3rGYVW8Aa+d07DenS4UELYUNYG7XJKRVVI3gtTsWxXJjRqWCNRx/H3u8vu84Z/9LWHeHAoGADJmbuMUctjMfNVuh5B65VhLXYiOdta9smuAeAhoUiP9tlZuBvjEDVXHfu+NnRXL1yn0OhIK9N4Q3rS+2z/G5W1GvDxiSmk4fRQBwakybn4DqKorCxxwK5nGciZ+2Bde0IAcDe1no/YuxY5uC12LyQi7PINO18NBgBgXFWBYlYvM= + alipay-public-key: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAhoU7Iun0y/g/4UefwCc/TWudwRfgn302yQjI50u9gFek9YS5RxlIj4T+WfNv7a8rDKvTGjxeMG638rXuLHEuUMJCZadvjNYdVwvGo9mtmtwa+BK7q2ovpc5iTU9OYPTM0eOPX5FO8qkd15U1pvfBO1BFCDwpelGW+AZwObL/dFhU43j0EcVqLM3VrnLuynURPt2pX9oQ1Je65W0Q1IyVMw5FWm2+aayr/jlhJqtwdsWPuzGegBW7Pc2h/rugTeE+1Rx4+bvlNVaihCewyu+tzvUJzT0xekhQM1kH9um/ZyyivJOziuwGwFoqAdFB7FYM5yMUo1AKaZGjL3to9eWIGQIDAQAB sms: api: base-url: "https://api.028lk.com/Sms/Api/"