diff --git a/db/1000pjcloudx_thirdparty.sql b/db/1000pjcloudx_thirdparty.sql index 0561eec61..f1f6e2fe4 100644 --- a/db/1000pjcloudx_thirdparty.sql +++ b/db/1000pjcloudx_thirdparty.sql @@ -133,4 +133,42 @@ CREATE TABLE `third_zy_id_dict` ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_general_ci - ROW_FORMAT = DYNAMIC COMMENT ='正元字典id对应 id + bizType 唯一'; \ No newline at end of file + ROW_FORMAT = DYNAMIC COMMENT ='正元字典id对应 id + bizType 唯一'; + +-- ---------------------------- +-- Table structure for third_pay_order +-- ---------------------------- +DROP TABLE IF EXISTS `third_pay_order`; +CREATE TABLE `third_pay_order` +( + `id` bigint NOT NULL COMMENT '主键', + + `pay_platform_type` varchar(32) NOT NULL COMMENT '支付平台类型', + `biz_type` varchar(32) NOT NULL COMMENT '支付类型', + `biz_id` varchar(128) NOT NULL COMMENT '支付相关id', + `user_id` bigint NOT NULL COMMENT '用户id', + `user_code` varchar(64) DEFAULT NULL COMMENT '用户code', + `price` int NOT NULL COMMENT '支付金额(分)', + `status` varchar(128) DEFAULT NULL COMMENT '支付状态', + + `pay_no` varchar(128) DEFAULT NULL COMMENT '支付订单号', + `pay_time` datetime DEFAULT NULL COMMENT '支付时间', + `pay_res` text DEFAULT NULL COMMENT '支付返回', + + `refund_no` varchar(128) DEFAULT NULL COMMENT '退款订单号', + `refund_time` datetime DEFAULT NULL COMMENT '退款时间', + `refund_res` text DEFAULT NULL COMMENT '退款返回', + + `expire_time` datetime DEFAULT NULL COMMENT '订单过期时间', + + `create_time` datetime DEFAULT NULL COMMENT '创建时间', + `update_time` datetime DEFAULT NULL COMMENT '更新时间', + `create_by` varchar(32) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '创建人', + `update_by` varchar(32) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '更新人', + `del_flag` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '删除时间', + `tenant_id` bigint(20) DEFAULT NULL, + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB + DEFAULT CHARSET = utf8mb4 + COLLATE = utf8mb4_general_ci + ROW_FORMAT = DYNAMIC COMMENT ='第三方支付订单'; \ No newline at end of file diff --git a/pjcloud-app-server/pjcloud-app-server-api/src/main/java/com/bsd/pjcloud/app/api/dto/AppMenuDto.java b/pjcloud-app-server/pjcloud-app-server-api/src/main/java/com/bsd/pjcloud/app/api/dto/AppMenuDto.java new file mode 100644 index 000000000..67122864f --- /dev/null +++ b/pjcloud-app-server/pjcloud-app-server-api/src/main/java/com/bsd/pjcloud/app/api/dto/AppMenuDto.java @@ -0,0 +1,21 @@ +package com.bsd.pjcloud.app.api.dto; + +import com.bsd.pjcloud.app.api.constant.menu.AppMenuPlatformEnum; +import com.bsd.pjcloud.app.api.constant.menu.AppMenuTypeEnum; +import com.bsd.pjcloud.app.api.entity.AppMenuEntity; +import lombok.Data; + +@Data +public class AppMenuDto extends AppMenuEntity { + + /** + * 平台(小程序、支付宝) + */ + private AppMenuPlatformEnum platformEnum; + + /** + * 菜单类型 + */ + private AppMenuTypeEnum typeEnum; + +} diff --git a/pjcloud-app-server/pjcloud-app-server-biz/src/main/java/com/bsd/pjcloud/app/controller/AppMenuController.java b/pjcloud-app-server/pjcloud-app-server-biz/src/main/java/com/bsd/pjcloud/app/controller/AppMenuController.java index 7117161c9..cc276df23 100755 --- a/pjcloud-app-server/pjcloud-app-server-biz/src/main/java/com/bsd/pjcloud/app/controller/AppMenuController.java +++ b/pjcloud-app-server/pjcloud-app-server-biz/src/main/java/com/bsd/pjcloud/app/controller/AppMenuController.java @@ -2,11 +2,13 @@ package com.bsd.pjcloud.app.controller; import cn.hutool.core.util.ArrayUtil; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.bsd.pjcloud.app.api.constant.menu.AppMenuPlatformEnum; import com.bsd.pjcloud.app.api.constant.menu.AppMenuTypeEnum; +import com.bsd.pjcloud.app.api.dto.AppMenuDto; import com.bsd.pjcloud.app.api.entity.AppMenuEntity; import com.bsd.pjcloud.common.core.constant.enums.YesNoEnum; import com.bsd.pjcloud.common.core.util.R; @@ -44,9 +46,14 @@ public class AppMenuController { */ @Operation(summary = "分页查询", description = "分页查询") @GetMapping("/app/list") - public R> appList(@ParameterObject AppMenuEntity dto) { + public R> appList(@ParameterObject AppMenuDto dto) { dto.setVisible(YesNoEnum.YES.getCode()); - dto.setType(AppMenuTypeEnum.DASHBOARD_TAB.getType()); + if (ObjectUtil.isNotEmpty(dto.getPlatformEnum())) { + dto.setPlatform(dto.getPlatformEnum().getType()); + } + if (ObjectUtil.isNotEmpty(dto.getTypeEnum())) { + dto.setType(dto.getTypeEnum().getType()); + } return R.ok(appMenuService.scopeList(dto, null)); } diff --git a/pjcloud-app-server/pjcloud-app-server-biz/src/main/java/com/bsd/pjcloud/app/mapper/AppMenuMapper.java b/pjcloud-app-server/pjcloud-app-server-biz/src/main/java/com/bsd/pjcloud/app/mapper/AppMenuMapper.java index d6a0fbc90..f5cd746a4 100755 --- a/pjcloud-app-server/pjcloud-app-server-biz/src/main/java/com/bsd/pjcloud/app/mapper/AppMenuMapper.java +++ b/pjcloud-app-server/pjcloud-app-server-biz/src/main/java/com/bsd/pjcloud/app/mapper/AppMenuMapper.java @@ -16,10 +16,10 @@ public interface AppMenuMapper extends PjcloudBaseMapper { default LambdaQueryWrapper conditionWrapper(AppMenuEntity dto) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper - .eq(ObjectUtil.isNotEmpty(dto.getPlatform()), AppMenuEntity::getPage, dto.getPlatform()) + .eq(ObjectUtil.isNotEmpty(dto.getPlatform()), AppMenuEntity::getPlatform, dto.getPlatform()) .eq(ObjectUtil.isNotEmpty(dto.getType()), AppMenuEntity::getType, dto.getType()) .eq(ObjectUtil.isNotEmpty(dto.getVisible()), AppMenuEntity::getVisible, dto.getVisible()) - .orderByDesc(AppMenuEntity::getSort) + .orderByAsc(AppMenuEntity::getSort) .orderByDesc(AppMenuEntity::getCreateTime); return wrapper; } diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/dto/oathmini/ThirdMiniAppPayDto.java b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/dto/oathmini/ThirdMiniAppPayDto.java new file mode 100644 index 000000000..266e9ed6e --- /dev/null +++ b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/dto/oathmini/ThirdMiniAppPayDto.java @@ -0,0 +1,29 @@ +package com.bsd.pjcloud.thirdparty.dto.oathmini; + +import com.bsd.pjcloud.thirdparty.constant.miniplatform.MiniPlatformTypeEnum; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +@Data +public class ThirdMiniAppPayDto { + + /** + * 小程序平台 + */ + @NotNull(message = "小程序平台标识不能为空") + private MiniPlatformTypeEnum miniPlatformType; + + /** + * 金额(分) + */ + @NotNull(message = "金额(分)不能为空") + private Integer amount; + + /** + * 用户标识 + */ + @NotEmpty(message = "用户标识不能为空") + private String openId; + +} diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/dto/oathmini/pay/wechat/ThirdMiniJsapiPayDto.java b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/dto/oathmini/pay/wechat/ThirdMiniJsapiPayDto.java new file mode 100644 index 000000000..5493d3e77 --- /dev/null +++ b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/dto/oathmini/pay/wechat/ThirdMiniJsapiPayDto.java @@ -0,0 +1,26 @@ +package com.bsd.pjcloud.thirdparty.dto.oathmini.pay.wechat; + +import lombok.Data; + +/** + * JSAPI/小程序下单 + */ +@Data +public class ThirdMiniJsapiPayDto { + + /** + * 商户订单号 + */ + private String outTradeNo; + + /** + * 用户标识 + */ + private String openid; + + /** + * 金额(分) + */ + private Integer amount; + +} diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/vo/oathmini/pay/wechat/ThirdMiniJsapiPayVo.java b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/vo/oathmini/pay/wechat/ThirdMiniJsapiPayVo.java new file mode 100644 index 000000000..5260fe2d7 --- /dev/null +++ b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/vo/oathmini/pay/wechat/ThirdMiniJsapiPayVo.java @@ -0,0 +1,48 @@ +package com.bsd.pjcloud.thirdparty.vo.oathmini.pay.wechat; + +import cn.hutool.core.util.ObjectUtil; +import lombok.Data; + +/** + * JSAPI/小程序下单 + */ +@Data +public class ThirdMiniJsapiPayVo { + + public static final String SUCCESS = "SUCCESS"; + + private String return_code; + + private String return_msg; + + private String appid; + + private String mch_id; + + private String device_info; + + private String nonce_str; + + private String sign; + + private String result_code; + + private String err_code; + + private String err_code_des; + + private String trade_type; + + private String prepay_id; + + private String code_url; + + public boolean isHttpSucess() { + return ObjectUtil.equals(ThirdMiniWechatQueryVo.SUCCESS, return_code); + } + + public boolean isPaySucess() { + return ObjectUtil.equals(ThirdMiniWechatQueryVo.SUCCESS, result_code); + } + +} diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/controller/oathmini/ThirdMinAppOAth2Cotroller.java b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/controller/mini/ThirdMinAppOAth2Cotroller.java similarity index 96% rename from pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/controller/oathmini/ThirdMinAppOAth2Cotroller.java rename to pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/controller/mini/ThirdMinAppOAth2Cotroller.java index 3c062ab13..8b8421657 100644 --- a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/controller/oathmini/ThirdMinAppOAth2Cotroller.java +++ b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/controller/mini/ThirdMinAppOAth2Cotroller.java @@ -1,4 +1,4 @@ -package com.bsd.pjcloud.thirdparty.controller.oathmini; +package com.bsd.pjcloud.thirdparty.controller.mini; import com.bsd.pjcloud.common.core.util.R; import com.bsd.pjcloud.common.security.annotation.Inner; diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/controller/mini/ThirdMinAppPayCotroller.java b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/controller/mini/ThirdMinAppPayCotroller.java new file mode 100644 index 000000000..ba4109b92 --- /dev/null +++ b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/controller/mini/ThirdMinAppPayCotroller.java @@ -0,0 +1,37 @@ +package com.bsd.pjcloud.thirdparty.controller.mini; + +import com.bsd.pjcloud.common.core.util.R; +import com.bsd.pjcloud.common.security.annotation.Inner; +import com.bsd.pjcloud.common.security.service.PjcloudUser; +import com.bsd.pjcloud.common.security.util.SecurityUtils; +import com.bsd.pjcloud.thirdparty.dto.oathmini.ThirdMiniAppPayDto; +import com.bsd.pjcloud.thirdparty.service.ThirdMiniAppService; +import com.bsd.pjcloud.thirdparty.vo.oathmini.ThirdMinAppOAth2LoginVo; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.security.SecurityRequirement; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import org.springframework.http.HttpHeaders; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequiredArgsConstructor +@RequestMapping("/third-mini-app-pay") +@Tag(description = "third-mini-app-pay", name = "小程序支付") +@SecurityRequirement(name = HttpHeaders.AUTHORIZATION) +public class ThirdMinAppPayCotroller { + + private final ThirdMiniAppService thirdMiniAppService; + + @Operation(summary = "小程序支付") + @PostMapping("/app/pay") + @Inner(value = false) + public R miniPay(@RequestBody ThirdMiniAppPayDto dto) { + PjcloudUser user = SecurityUtils.getUser(); + return R.ok(thirdMiniAppService.miniPay(user.getId(), dto)); + } + +} diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/ThirdMiniAppService.java b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/ThirdMiniAppService.java index 243b90df7..d374deb99 100644 --- a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/ThirdMiniAppService.java +++ b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/ThirdMiniAppService.java @@ -2,6 +2,7 @@ package com.bsd.pjcloud.thirdparty.service; import com.bsd.pjcloud.thirdparty.dto.oathmini.ThirdMiniAppGetUniqueDto; import com.bsd.pjcloud.thirdparty.dto.oathmini.ThirdMiniAppOAth2LoginDto; +import com.bsd.pjcloud.thirdparty.dto.oathmini.ThirdMiniAppPayDto; import com.bsd.pjcloud.thirdparty.vo.oathmini.ThirdMinAppOAth2LoginVo; public interface ThirdMiniAppService { @@ -16,4 +17,8 @@ public interface ThirdMiniAppService { */ String getUniqueCode(ThirdMiniAppGetUniqueDto dto); + /** + * 小程序支付 + */ + String miniPay(Long userId, ThirdMiniAppPayDto dto); } diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/ThirdMiniAppWechatService.java b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/ThirdMiniAppWechatService.java index 3071ab31a..fcac1eb70 100644 --- a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/ThirdMiniAppWechatService.java +++ b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/ThirdMiniAppWechatService.java @@ -2,14 +2,8 @@ package com.bsd.pjcloud.thirdparty.service; import cn.binarywang.wx.miniapp.bean.WxMaPhoneNumberInfo; -import com.bsd.pjcloud.thirdparty.dto.oathmini.pay.wechat.ThirdMiniWechantReverseDto; -import com.bsd.pjcloud.thirdparty.dto.oathmini.pay.wechat.ThirdMiniWechatQueryDto; -import com.bsd.pjcloud.thirdparty.dto.oathmini.pay.wechat.ThirdMiniWechatRefundDto; -import com.bsd.pjcloud.thirdparty.dto.oathmini.pay.wechat.ThirdMiniWechatRefundQueryDto; -import com.bsd.pjcloud.thirdparty.vo.oathmini.pay.wechat.ThirdMiniWechantReverseVo; -import com.bsd.pjcloud.thirdparty.vo.oathmini.pay.wechat.ThirdMiniWechatQueryVo; -import com.bsd.pjcloud.thirdparty.vo.oathmini.pay.wechat.ThirdMiniWechatRefundQueryVo; -import com.bsd.pjcloud.thirdparty.vo.oathmini.pay.wechat.ThirdMiniWechatRefundVo; +import com.bsd.pjcloud.thirdparty.dto.oathmini.pay.wechat.*; +import com.bsd.pjcloud.thirdparty.vo.oathmini.pay.wechat.*; import org.springframework.http.HttpEntity; import org.springframework.web.bind.annotation.RequestHeader; @@ -17,6 +11,11 @@ import java.util.Map; public interface ThirdMiniAppWechatService { + /** + * JSAPI/小程序下单 + */ + ThirdMiniJsapiPayVo jsapiPay(ThirdMiniJsapiPayDto dto); + /** * 获取openId */ diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/miniapp/ThirdMiniAppServiceImpl.java b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/miniapp/ThirdMiniAppServiceImpl.java index fb757e769..086ef65c8 100644 --- a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/miniapp/ThirdMiniAppServiceImpl.java +++ b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/miniapp/ThirdMiniAppServiceImpl.java @@ -14,10 +14,15 @@ import com.bsd.pjcloud.thirdparty.constant.miniplatform.MiniPlatformLoginErrorEn import com.bsd.pjcloud.thirdparty.constant.miniplatform.MiniPlatformTypeEnum; import com.bsd.pjcloud.thirdparty.dto.oathmini.ThirdMiniAppGetUniqueDto; import com.bsd.pjcloud.thirdparty.dto.oathmini.ThirdMiniAppOAth2LoginDto; +import com.bsd.pjcloud.thirdparty.dto.oathmini.ThirdMiniAppPayDto; +import com.bsd.pjcloud.thirdparty.dto.oathmini.pay.wechat.ThirdMiniJsapiPayDto; +import com.bsd.pjcloud.thirdparty.entity.api.ThirdPayLogEntity; import com.bsd.pjcloud.thirdparty.service.ThirdMiniAppAliPayService; import com.bsd.pjcloud.thirdparty.service.ThirdMiniAppService; import com.bsd.pjcloud.thirdparty.service.ThirdMiniAppWechatService; +import com.bsd.pjcloud.thirdparty.service.ThirdPayLogService; import com.bsd.pjcloud.thirdparty.vo.oathmini.ThirdMinAppOAth2LoginVo; +import com.bsd.pjcloud.thirdparty.vo.oathmini.pay.wechat.ThirdMiniJsapiPayVo; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -37,6 +42,7 @@ public class ThirdMiniAppServiceImpl implements ThirdMiniAppService { private final ThirdMiniAppWechatService thirdMiniAppWechatService; private final ThirdMiniAppAliPayService thirdMiniAppAliPayService; + private final ThirdPayLogService thirdPayLogService; private final RemoteUserService remoteUserService; private final RemoteTokenService remoteTokenService; @@ -112,4 +118,31 @@ public class ThirdMiniAppServiceImpl implements ThirdMiniAppService { return uniqueCode; } + /** + * 小程序支付 + */ + @Override + public String miniPay(Long userId, ThirdMiniAppPayDto dto) { + ThirdPayLogEntity log = new ThirdPayLogEntity(); + try { + // 微信小程序 + if (ObjectUtil.equals(dto.getMiniPlatformType().getType(), MiniPlatformTypeEnum.WECHAT.getType())) { + ThirdMiniJsapiPayDto wechatPayDto = new ThirdMiniJsapiPayDto(); + wechatPayDto.setOutTradeNo(""); + wechatPayDto.setOpenid(dto.getOpenId()); + wechatPayDto.setAmount(dto.getAmount()); + ThirdMiniJsapiPayVo thirdMiniJsapiPayVo = thirdMiniAppWechatService.jsapiPay(wechatPayDto); + } + // 支付宝 + else if (ObjectUtil.equals(dto.getMiniPlatformType().getType(), MiniPlatformTypeEnum.ALI_PAY.getType())) { + + } + } catch (Exception e) { + + } finally { + thirdPayLogService.save(log); + } + return ""; + } + } diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/miniapp/ThirdMiniAppWechatServiceImpl.java b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/miniapp/ThirdMiniAppWechatServiceImpl.java index bd5d9b196..01290c199 100644 --- a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/miniapp/ThirdMiniAppWechatServiceImpl.java +++ b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/miniapp/ThirdMiniAppWechatServiceImpl.java @@ -9,10 +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.MiniAppConfig; -import com.bsd.pjcloud.thirdparty.dto.oathmini.pay.wechat.ThirdMiniWechantReverseDto; -import com.bsd.pjcloud.thirdparty.dto.oathmini.pay.wechat.ThirdMiniWechatQueryDto; -import com.bsd.pjcloud.thirdparty.dto.oathmini.pay.wechat.ThirdMiniWechatRefundDto; -import com.bsd.pjcloud.thirdparty.dto.oathmini.pay.wechat.ThirdMiniWechatRefundQueryDto; +import com.bsd.pjcloud.thirdparty.dto.oathmini.pay.wechat.*; import com.bsd.pjcloud.thirdparty.service.ThirdMiniAppWechatService; import com.bsd.pjcloud.thirdparty.utils.miniapp.pay.wechat.ThirdMiniWechantPayConstant; import com.bsd.pjcloud.thirdparty.vo.oathmini.pay.wechat.*; @@ -49,6 +46,60 @@ public class ThirdMiniAppWechatServiceImpl implements ThirdMiniAppWechatService private final WxMaService wxMaService; + + /** + * JSAPI/小程序下单 + */ + @Override + public ThirdMiniJsapiPayVo jsapiPay(ThirdMiniJsapiPayDto dto) { + MiniAppConfig.WechatConfig wechatConfig = miniAppConfig.getWechatConfig(); + try { + Map params = new HashMap<>(); + // 公众账号ID + params.put("appid", wechatConfig.getAppId()); + // 商户号 + params.put("mch_id", wechatConfig.getMerchantId()); + // 随机字符串 + params.put("nonce_str", getNonceStr()); + // 签名 + params.put("sign", ""); + // 签名类型 + params.put("sign_type", "MD5"); + // 商品描述 + params.put("body", "浦江数勤-钱包充值"); + // 商户订单号 + params.put("out_trade_no", dto.getOutTradeNo()); + // 商户回调地址 + params.put("notify_url", wechatConfig.getRefundCallbackUrl()); + // 订单总金额,单位为分 + params.put("total_fee", dto.getAmount()); + // 终端IP + params.put("spbill_create_ip", wechatConfig.getSpbillCreateIp()); + // 交易类型 + params.put("trade_type", "JSAPI"); + // 用户标识 + params.put("openid", dto.getOpenid()); + // 生成签名 + params.put("sign", generateSign(params)); + ThirdMiniWechantPayConstant.Api api = initApi(ThirdMiniWechantPayConstant.WECHAT_PAY); + String res = api.getHttpRequest().body(XmlUtil.mapToXmlStr(params)).execute().body(); + log.debug("JSAPI/小程序下单,json,xml|{}", res); + if (ObjectUtil.isEmpty(res)) { + log.error("JSAPI/小程序下单,res为空"); + return null; + } + ThirdMiniJsapiPayVo vo = JSONUtil.toBean(JSONUtil.toJsonStr(XmlUtil.xmlToMap(res)), ThirdMiniJsapiPayVo.class); + log.debug("|{}|JSAPI/小程序下单,json,res|{}", TAG, JSONUtil.toJsonStr(vo)); + if (!vo.isHttpSucess()) { + return null; + } + return vo; + } catch (Exception e) { + log.error("|{}|JSAPI/小程序下单,异常", TAG, e); + return null; + } + } + /** * 获取openId */ diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/utils/miniapp/pay/wechat/ThirdMiniWechantPayConstant.java b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/utils/miniapp/pay/wechat/ThirdMiniWechantPayConstant.java index 5e14203ea..68c25875e 100644 --- a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/utils/miniapp/pay/wechat/ThirdMiniWechantPayConstant.java +++ b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/utils/miniapp/pay/wechat/ThirdMiniWechantPayConstant.java @@ -15,6 +15,8 @@ import javax.net.ssl.SSLSocketFactory; */ public class ThirdMiniWechantPayConstant { + public static final Api WECHAT_PAY = Api.builder().summary("微信小程序支付").url("/pay/unifiedorder").method(HttpMethod.POST).isNeedCertificate(false).build(); + public static final Api APY = Api.builder().summary("付款码支付").url("/pay/micropay").method(HttpMethod.POST).isNeedCertificate(false).build(); public static final Api QUERY = Api.builder().summary("查询订单").url("/pay/orderquery").method(HttpMethod.POST).isNeedCertificate(false).build(); diff --git a/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/constant/WalletTypeEnum.java b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/constant/WalletTypeEnum.java index e71c525bb..f11459d43 100644 --- a/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/constant/WalletTypeEnum.java +++ b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/constant/WalletTypeEnum.java @@ -15,6 +15,7 @@ public enum WalletTypeEnum { EAT("1", "饭卡钱包"), PAY("2", "消费钱包"), + TOPUP("3", "充值钱包"), ; private final String code;