feat:免密支付
This commit is contained in:
1 parent
d84bf561ac
commit
8990e31f78
9 files changed
+162
-13
No files matched your search
+29
@@ -0,0 +1,29 @@
|
||||
package com.bsd.pjcloud.hard.api.constant;
|
||||
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
/**
|
||||
* 第三方面密类型
|
||||
*/
|
||||
@AllArgsConstructor
|
||||
@Getter
|
||||
public enum HardThirdMiStatusEnum {
|
||||
|
||||
CREATE_ORDER("10", "创建订单"),
|
||||
PAY("20", "支付订单"),
|
||||
REFUND("30", "取消/退款"),
|
||||
;
|
||||
|
||||
private final String type;
|
||||
private final String description;
|
||||
|
||||
public static HardThirdMiStatusEnum valueOfByType(String type) {
|
||||
if (ObjectUtil.isEmpty(type)) return null;
|
||||
return Arrays.stream(values()).filter(v -> ObjectUtil.equals(type, v.getType())).findFirst().get();
|
||||
}
|
||||
|
||||
}
|
||||
+26
-2
@@ -39,6 +39,12 @@ public class HardThirdMiOrderEntity extends Model<HardThirdMiOrderEntity> {
|
||||
@Schema(description = "用户id")
|
||||
private Long userId;
|
||||
|
||||
/**
|
||||
* 用户类型
|
||||
*/
|
||||
@Schema(description = "用户类型")
|
||||
private String userType;
|
||||
|
||||
/**
|
||||
* 授权id
|
||||
*/
|
||||
@@ -91,13 +97,31 @@ public class HardThirdMiOrderEntity extends Model<HardThirdMiOrderEntity> {
|
||||
* 订单状态
|
||||
*/
|
||||
@Schema(description = "订单状态")
|
||||
private Integer orderStatus;
|
||||
private String orderStatus;
|
||||
|
||||
/**
|
||||
* 押金
|
||||
*/
|
||||
@Schema(description = "押金")
|
||||
private int depositPrice;
|
||||
|
||||
/**
|
||||
* 订单金额
|
||||
*/
|
||||
@Schema(description = "订单金额")
|
||||
private int orderPrice;
|
||||
|
||||
/**
|
||||
* 支付金额
|
||||
*/
|
||||
@Schema(description = "支付金额")
|
||||
private int payPrice;
|
||||
|
||||
/**
|
||||
* 原始json数据
|
||||
*/
|
||||
@Schema(description = "原始json数据")
|
||||
private String orgJson;
|
||||
private String orgOrderJson;
|
||||
|
||||
/**
|
||||
* 创建人
|
||||
|
||||
+1
-1
@@ -59,7 +59,7 @@ public class HardAuthController {
|
||||
public R<Long> appAuthHardDoor(@Valid @RequestBody HardAuthAppDto dto) {
|
||||
PjcloudUser user = SecurityUtils.getUser();
|
||||
dto.setUserId(user.getId());
|
||||
dto.setUserType(UserTypeEnum.valueOfByStatus(user.getUserType()));
|
||||
dto.setUserType(UserTypeEnum.TOB);
|
||||
return R.ok(hardAuthService.appAuthHardDoor(dto));
|
||||
}
|
||||
|
||||
|
||||
+11
-1
@@ -27,13 +27,23 @@ import java.util.Objects;
|
||||
*/
|
||||
@RestController
|
||||
@RequiredArgsConstructor
|
||||
@RequestMapping("/hardThirdMiOrder")
|
||||
@RequestMapping("/hard-third-mi-order")
|
||||
@Tag(description = "hardThirdMiOrder", name = "硬件商品免密订单管理")
|
||||
@SecurityRequirement(name = HttpHeaders.AUTHORIZATION)
|
||||
public class HardThirdMiOrderController {
|
||||
|
||||
private final HardThirdMiOrderService hardThirdMiOrderService;
|
||||
|
||||
/**
|
||||
* 刷新订单
|
||||
*/
|
||||
@Operation(summary = "刷新订单", description = "刷新订单")
|
||||
@GetMapping("/refresh")
|
||||
public R refresh(@RequestParam("id") Long id) {
|
||||
hardThirdMiOrderService.refresh(id);
|
||||
return R.ok();
|
||||
}
|
||||
|
||||
/**
|
||||
* 分页查询
|
||||
*/
|
||||
|
||||
+5
@@ -5,4 +5,9 @@ import com.bsd.pjcloud.hard.api.entity.HardThirdMiOrderEntity;
|
||||
|
||||
public interface HardThirdMiOrderService extends IService<HardThirdMiOrderEntity> {
|
||||
|
||||
/**
|
||||
* 刷新订单
|
||||
*/
|
||||
void refresh(Long id);
|
||||
|
||||
}
|
||||
+4
-3
@@ -2,6 +2,7 @@ package com.bsd.pjcloud.hard.service;
|
||||
|
||||
|
||||
import com.alipay.api.response.*;
|
||||
import com.bsd.pjcloud.common.core.constant.enums.UserTypeEnum;
|
||||
|
||||
public interface MiniAlipayService {
|
||||
|
||||
@@ -13,17 +14,17 @@ public interface MiniAlipayService {
|
||||
/**
|
||||
* 创建支付宝免密订单
|
||||
*/
|
||||
AlipayTradeCreateResponse miCreateOrder(String openId, Long authId);
|
||||
AlipayTradeCreateResponse miCreateOrder(String openId, Long authId, Long userId, UserTypeEnum userType);
|
||||
|
||||
/**
|
||||
* 查询支付宝免密订单
|
||||
*/
|
||||
ZhimaCreditPayafteruseCreditbizorderQueryResponse miQueryOrder(String alipayOrderNo, String authId);
|
||||
ZhimaCreditPayafteruseCreditbizorderQueryResponse miQueryOrder(String alipayOrderNo, Long authId);
|
||||
|
||||
/**
|
||||
* 支付宝免密扣款
|
||||
*/
|
||||
AlipayTradeOrderPayResponse miQueryPay(String authId, String alipayTradeNo, int price);
|
||||
AlipayTradeOrderPayResponse miPay(String authId, String alipayTradeNo, int price);
|
||||
|
||||
/**
|
||||
* 支付宝免密(取消/退款)
|
||||
|
||||
+1
-1
@@ -147,7 +147,7 @@ public class HardAuthServiceImpl extends ServiceImpl<HardAuthMapper, HardAuthEnt
|
||||
|
||||
HardAppCreateThirdDoorOrderVo res = new HardAppCreateThirdDoorOrderVo();
|
||||
|
||||
AlipayTradeCreateResponse alipayRes = miniAlipayService.miCreateOrder(appUser.getOpenid(), authEntity.getId());
|
||||
AlipayTradeCreateResponse alipayRes = miniAlipayService.miCreateOrder(appUser.getOpenid(), authEntity.getId(), dto.getUserId(), dto.getUserType());
|
||||
if (ObjectUtil.isEmpty(alipayRes)) {
|
||||
throw new RuntimeException("创建支付宝免密订单失败");
|
||||
}
|
||||
|
||||
+62
@@ -1,15 +1,77 @@
|
||||
package com.bsd.pjcloud.hard.service.impl;
|
||||
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.alipay.api.response.ZhimaCreditPayafteruseCreditbizorderQueryResponse;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.bsd.pjcloud.hard.api.constant.HardThirdMiStatusEnum;
|
||||
import com.bsd.pjcloud.hard.api.constant.HardThirdMiTypeEnum;
|
||||
import com.bsd.pjcloud.hard.api.entity.HardThirdMiOrderEntity;
|
||||
import com.bsd.pjcloud.hard.mapper.HardThirdMiOrderMapper;
|
||||
import com.bsd.pjcloud.hard.service.HardThirdMiOrderService;
|
||||
import com.bsd.pjcloud.hard.service.MiniAlipayService;
|
||||
import lombok.AllArgsConstructor;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
/**
|
||||
* 硬件商品免密订单
|
||||
*/
|
||||
@Service
|
||||
@AllArgsConstructor
|
||||
public class HardThirdMiOrderServiceImpl extends ServiceImpl<HardThirdMiOrderMapper, HardThirdMiOrderEntity> implements HardThirdMiOrderService {
|
||||
|
||||
private final MiniAlipayService miniAlipayService;
|
||||
|
||||
/**
|
||||
* 刷新订单
|
||||
*/
|
||||
@Override
|
||||
public void refresh(Long id) {
|
||||
HardThirdMiOrderEntity order = baseMapper.selectById(id);
|
||||
if (ObjectUtil.isEmpty(order)) {
|
||||
throw new RuntimeException("订单不存在");
|
||||
}
|
||||
// 微信免密支付
|
||||
if (ObjectUtil.equals(order.getBizType(), HardThirdMiTypeEnum.MI_WECHAT.getType())) {
|
||||
|
||||
return;
|
||||
}
|
||||
// 支付宝-芝麻先享
|
||||
if (ObjectUtil.equals(order.getBizType(), HardThirdMiTypeEnum.MI_ALIPAY.getType())) {
|
||||
ZhimaCreditPayafteruseCreditbizorderQueryResponse res = miniAlipayService.miQueryOrder(null, order.getAuthId());
|
||||
if (ObjectUtil.isEmpty(res)) {
|
||||
throw new RuntimeException("支付宝-芝麻先享中,未查询到此订单");
|
||||
}
|
||||
HardThirdMiOrderEntity updateObj = new HardThirdMiOrderEntity();
|
||||
updateObj.setId(order.getId());
|
||||
// 押金
|
||||
updateObj.setDepositPrice(new BigDecimal(res.getTotalAmount()).multiply(BigDecimal.valueOf(100)).intValue());
|
||||
// 扣款金额
|
||||
if (ObjectUtil.isNotEmpty(res.getTotalCreditPayAmount())) {
|
||||
updateObj.setPayPrice(new BigDecimal(res.getTotalCreditPayAmount()).multiply(BigDecimal.valueOf(100)).intValue());
|
||||
}
|
||||
// 订单状态
|
||||
if (ObjectUtil.isNotEmpty(res.getOrderStatus())) {
|
||||
String orderStatus = res.getOrderStatus();
|
||||
switch (orderStatus) {
|
||||
// 下单状态
|
||||
case "INIT":
|
||||
updateObj.setOrderStatus(HardThirdMiStatusEnum.CREATE_ORDER.getType());
|
||||
break;
|
||||
// 订单取消或者交易全额退款
|
||||
case "TRADE_CLOSED":
|
||||
updateObj.setOrderStatus(HardThirdMiStatusEnum.REFUND.getType());
|
||||
break;
|
||||
// 扣款成功状态
|
||||
case "TRADE_FINISHED":
|
||||
updateObj.setOrderStatus(HardThirdMiStatusEnum.PAY.getType());
|
||||
break;
|
||||
}
|
||||
}
|
||||
baseMapper.updateById(updateObj);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
+23
-5
@@ -11,7 +11,12 @@ import com.alipay.api.DefaultAlipayClient;
|
||||
import com.alipay.api.domain.*;
|
||||
import com.alipay.api.request.*;
|
||||
import com.alipay.api.response.*;
|
||||
import com.bsd.pjcloud.common.core.constant.enums.UserTypeEnum;
|
||||
import com.bsd.pjcloud.hard.api.constant.HardThirdMiStatusEnum;
|
||||
import com.bsd.pjcloud.hard.api.constant.HardThirdMiTypeEnum;
|
||||
import com.bsd.pjcloud.hard.api.entity.HardThirdMiOrderEntity;
|
||||
import com.bsd.pjcloud.hard.config.MiniAlipayConf;
|
||||
import com.bsd.pjcloud.hard.mapper.HardThirdMiOrderMapper;
|
||||
import com.bsd.pjcloud.hard.service.MiniAlipayService;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
@@ -29,6 +34,8 @@ import java.time.LocalDateTime;
|
||||
@Slf4j
|
||||
public class MiniAlipayServiceImpl implements MiniAlipayService {
|
||||
|
||||
private final HardThirdMiOrderMapper hardThirdMiOrderMapper;
|
||||
|
||||
private final MiniAlipayConf conf;
|
||||
|
||||
static private AlipayClient client = null;
|
||||
@@ -83,7 +90,14 @@ public class MiniAlipayServiceImpl implements MiniAlipayService {
|
||||
* 创建支付宝免密订单
|
||||
*/
|
||||
@Override
|
||||
public AlipayTradeCreateResponse miCreateOrder(String openId, Long authId) {
|
||||
public AlipayTradeCreateResponse miCreateOrder(String openId, Long authId, Long userId, UserTypeEnum userType) {
|
||||
HardThirdMiOrderEntity thirdOrder = new HardThirdMiOrderEntity();
|
||||
thirdOrder.setBizType(HardThirdMiTypeEnum.MI_ALIPAY.getType());
|
||||
thirdOrder.setAuthId(authId);
|
||||
thirdOrder.setUserId(userId);
|
||||
thirdOrder.setUserType(userType.getStatus());
|
||||
thirdOrder.setCreateOrderTime(LocalDateTime.now());
|
||||
thirdOrder.setOrderStatus(HardThirdMiStatusEnum.CREATE_ORDER.getType());
|
||||
AlipayTradeCreateRequest request = new AlipayTradeCreateRequest();
|
||||
try {
|
||||
JSONObject bizContent = new JSONObject();
|
||||
@@ -108,18 +122,21 @@ public class MiniAlipayServiceImpl implements MiniAlipayService {
|
||||
extraParam.putOnce("creditTradeScene", "CREDIT_PAY");
|
||||
bizContent.putOnce("extend_params", extraParam);
|
||||
request.setBizContent(bizContent.toString());
|
||||
// request.setNotifyUrl("https://www.notifyURL.com");
|
||||
AlipayTradeCreateResponse response = getClient().execute(request);
|
||||
if (!response.isSuccess()) {
|
||||
log.error("|创建支付宝订单|失败,json|{}", response.getBody());
|
||||
return null;
|
||||
}
|
||||
log.info("|创建支付宝订单|成功,json|{}", response.getBody());
|
||||
thirdOrder.setOutOrderNo(String.valueOf(authId));
|
||||
thirdOrder.setThirdOrderNo(response.getTradeNo());
|
||||
return response;
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
log.error("|创建支付宝订单|意外的错误", e);
|
||||
return null;
|
||||
} finally {
|
||||
hardThirdMiOrderMapper.insert(thirdOrder);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -127,15 +144,16 @@ public class MiniAlipayServiceImpl implements MiniAlipayService {
|
||||
* 查询支付宝免密订单
|
||||
*/
|
||||
@Override
|
||||
public ZhimaCreditPayafteruseCreditbizorderQueryResponse miQueryOrder(String alipayOrderNo, String authId) {
|
||||
public ZhimaCreditPayafteruseCreditbizorderQueryResponse miQueryOrder(String alipayOrderNo, Long authId) {
|
||||
ZhimaCreditPayafteruseCreditbizorderQueryRequest request = new ZhimaCreditPayafteruseCreditbizorderQueryRequest();
|
||||
ZhimaCreditPayafteruseCreditbizorderQueryModel model = new ZhimaCreditPayafteruseCreditbizorderQueryModel();
|
||||
if (ObjectUtil.isNotEmpty(alipayOrderNo)) {
|
||||
model.setCreditBizOrderId(alipayOrderNo);
|
||||
}
|
||||
if (ObjectUtil.isNotEmpty(authId)) {
|
||||
model.setOutOrderNo(authId);
|
||||
model.setOutOrderNo(String.valueOf(authId));
|
||||
}
|
||||
request.setBizModel(model);
|
||||
try {
|
||||
ZhimaCreditPayafteruseCreditbizorderQueryResponse response = getClient().execute(request);
|
||||
if (!response.isSuccess()) {
|
||||
@@ -155,7 +173,7 @@ public class MiniAlipayServiceImpl implements MiniAlipayService {
|
||||
* 支付宝免密扣款
|
||||
*/
|
||||
@Override
|
||||
public AlipayTradeOrderPayResponse miQueryPay(String authId, String alipayTradeNo, int price) {
|
||||
public AlipayTradeOrderPayResponse miPay(String authId, String alipayTradeNo, int price) {
|
||||
AlipayTradeOrderPayRequest request = new AlipayTradeOrderPayRequest();
|
||||
JSONObject bizContent = new JSONObject();
|
||||
// 商家外部协议号,自定义确保唯一
|
||||
|
||||
Reference in new issue
Block a user