feat:第三方支付接口
This commit is contained in:
1 parent
970bae2ddb
commit
26de11e567
8 files changed
+109
-9
No files matched your search
+13
@@ -0,0 +1,13 @@
|
||||
package com.bsd.pjcloud.thirdparty.dto.pay;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class PayGetWalletInfoDto {
|
||||
|
||||
/**
|
||||
* sm4加密后的手机号
|
||||
*/
|
||||
private String signPhone;
|
||||
|
||||
}
|
||||
+14
@@ -5,6 +5,20 @@ import lombok.Data;
|
||||
@Data
|
||||
public class PayGetWalletInfoVo {
|
||||
|
||||
/**
|
||||
* sm4加密后的手机号
|
||||
*/
|
||||
private String signPhone;
|
||||
|
||||
/**
|
||||
* 用户真实姓名
|
||||
*/
|
||||
private String username;
|
||||
|
||||
/**
|
||||
* 用户余额(分)
|
||||
*/
|
||||
private int balance;
|
||||
|
||||
|
||||
}
|
||||
+8
-3
@@ -2,16 +2,20 @@ package com.bsd.pjcloud.thirdparty.controller.pay;
|
||||
|
||||
|
||||
import com.bsd.pjcloud.common.core.util.R;
|
||||
import com.bsd.pjcloud.thirdparty.dto.pay.PayGetWalletInfoDto;
|
||||
import com.bsd.pjcloud.thirdparty.service.ThirdPayApiService;
|
||||
import com.bsd.pjcloud.thirdparty.service.ThirdPayLogService;
|
||||
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.HttpEntity;
|
||||
import org.springframework.http.HttpHeaders;
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* 第三方支付日志
|
||||
*/
|
||||
@@ -25,9 +29,10 @@ public class ThirdPayApiController {
|
||||
private final ThirdPayApiService thirdPayApiService;
|
||||
|
||||
@Operation(summary = "通过手机号查询用户钱包信息", description = "通过手机号查询用户钱包信息")
|
||||
@GetMapping("/{signPhone}")
|
||||
public R getWalletInfo(@PathVariable("signPhone") String signPhone) {
|
||||
return R.ok(thirdPayApiService.getWalletInfo(signPhone));
|
||||
@GetMapping("/user-wallet")
|
||||
public R getWalletInfo(HttpEntity<String> httpEntity, @RequestHeader Map<String, String> headers) {
|
||||
String body = httpEntity.getBody();
|
||||
return R.ok(thirdPayApiService.getWalletInfo(body, headers));
|
||||
}
|
||||
|
||||
|
||||
|
||||
+8
@@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.bsd.pjcloud.thirdparty.constant.ThirdKeyTypeEnum;
|
||||
import com.bsd.pjcloud.thirdparty.entity.ThirdKeyManageEntity;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
public interface ThirdKeyManageService extends IService<ThirdKeyManageEntity> {
|
||||
|
||||
/**
|
||||
@@ -20,4 +22,10 @@ public interface ThirdKeyManageService extends IService<ThirdKeyManageEntity> {
|
||||
* 获取第三方key配置
|
||||
*/
|
||||
ThirdKeyManageEntity get(ThirdKeyTypeEnum type);
|
||||
|
||||
/**
|
||||
* 验签并且返回配置
|
||||
*/
|
||||
ThirdKeyManageEntity checkSignAndReturnConfig(String json, Map<String, String> headers);
|
||||
|
||||
}
|
||||
+4
-1
@@ -2,11 +2,14 @@ package com.bsd.pjcloud.thirdparty.service;
|
||||
|
||||
|
||||
import com.bsd.pjcloud.thirdparty.dto.pay.PayDto;
|
||||
import com.bsd.pjcloud.thirdparty.dto.pay.PayGetWalletInfoDto;
|
||||
import com.bsd.pjcloud.thirdparty.dto.pay.RefundDto;
|
||||
import com.bsd.pjcloud.thirdparty.vo.pay.PayGetWalletInfoVo;
|
||||
import com.bsd.pjcloud.thirdparty.vo.pay.PayVo;
|
||||
import com.bsd.pjcloud.thirdparty.vo.pay.RefundVo;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
public interface ThirdPayApiService {
|
||||
|
||||
/**
|
||||
@@ -22,5 +25,5 @@ public interface ThirdPayApiService {
|
||||
/**
|
||||
* 根据加密的手机号查询用户钱包信息
|
||||
*/
|
||||
PayGetWalletInfoVo getWalletInfo(String phone);
|
||||
PayGetWalletInfoVo getWalletInfo(String json, Map<String, String> headers);
|
||||
}
|
||||
+43
@@ -9,9 +9,13 @@ import com.bsd.pjcloud.thirdparty.mapper.ThirdKeyManageMapper;
|
||||
import com.bsd.pjcloud.thirdparty.service.ThirdKeyManageService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.codec.digest.DigestUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* 第三方密钥管理
|
||||
*/
|
||||
@@ -52,6 +56,45 @@ public class ThirdKeyManageServiceImpl extends ServiceImpl<ThirdKeyManageMapper,
|
||||
return baseMapper.selectOne(new LambdaQueryWrapper<ThirdKeyManageEntity>().eq(ThirdKeyManageEntity::getBizType, type.getType()));
|
||||
}
|
||||
|
||||
/**
|
||||
* 验签并且返回配置
|
||||
*/
|
||||
@Override
|
||||
public ThirdKeyManageEntity checkSignAndReturnConfig(String json, Map<String, String> headers) {
|
||||
Map<String, String> transitionHeader = new LinkedHashMap<>();
|
||||
for (Map.Entry<String, String> entry : headers.entrySet()) {
|
||||
transitionHeader.put(entry.getKey().toUpperCase(), entry.getValue());
|
||||
}
|
||||
// 验签
|
||||
String appKey = transitionHeader.get("APP-KEY");
|
||||
String bizType = transitionHeader.get("BIZ-TYPE");
|
||||
String timestamp = transitionHeader.get("TIMESTAMP");
|
||||
String sign = transitionHeader.get("SIGN");
|
||||
if (!ObjectUtil.isAllNotEmpty(appKey, bizType, timestamp, sign)) {
|
||||
return null;
|
||||
}
|
||||
// 判断bizType
|
||||
ThirdKeyTypeEnum keyType = ThirdKeyTypeEnum.valueOfByType(bizType);
|
||||
if (ObjectUtil.isEmpty(keyType)) {
|
||||
return null;
|
||||
}
|
||||
// 查询配置
|
||||
ThirdKeyManageEntity keyManage = get(keyType);
|
||||
if (ObjectUtil.isEmpty(keyManage)) {
|
||||
return null;
|
||||
}
|
||||
if (ObjectUtil.notEqual(appKey, keyManage.getAppKey())) {
|
||||
return null;
|
||||
}
|
||||
// 计算签名
|
||||
String signStr = String.format("%s%s%s%s%s", keyManage.getAppKey(), keyManage.getAppSecret(), keyManage.getBizType(), timestamp, json);
|
||||
String successSignMd5 = DigestUtils.md5Hex(signStr);
|
||||
if (ObjectUtil.notEqual(successSignMd5.toLowerCase(), sign.toLowerCase())) {
|
||||
return null;
|
||||
}
|
||||
return keyManage;
|
||||
}
|
||||
|
||||
/**
|
||||
* 第三方类型不能重复
|
||||
*/
|
||||
|
||||
+19
-5
@@ -1,10 +1,14 @@
|
||||
package com.bsd.pjcloud.thirdparty.service.impl.pay;
|
||||
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.json.JSONUtil;
|
||||
import com.bsd.pjcloud.thirdparty.constant.pay.ThirdPayApiBizTypeEnum;
|
||||
import com.bsd.pjcloud.thirdparty.dto.pay.PayDto;
|
||||
import com.bsd.pjcloud.thirdparty.dto.pay.PayGetWalletInfoDto;
|
||||
import com.bsd.pjcloud.thirdparty.dto.pay.RefundDto;
|
||||
import com.bsd.pjcloud.thirdparty.entity.ThirdKeyManageEntity;
|
||||
import com.bsd.pjcloud.thirdparty.entity.api.ThirdPayLogEntity;
|
||||
import com.bsd.pjcloud.thirdparty.service.ThirdKeyManageService;
|
||||
import com.bsd.pjcloud.thirdparty.service.ThirdPayApiService;
|
||||
import com.bsd.pjcloud.thirdparty.service.ThirdPayLogService;
|
||||
import com.bsd.pjcloud.thirdparty.utils.lb.tool.LbRetailSignUtils;
|
||||
@@ -17,6 +21,7 @@ import org.springframework.stereotype.Service;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* 第三方支付
|
||||
@@ -29,7 +34,8 @@ public class ThirdPayApiServiceImpl implements ThirdPayApiService {
|
||||
|
||||
private final String TAG = "第三方支付";
|
||||
|
||||
private final ThirdPayLogService thirdPayLogService;
|
||||
private final ThirdKeyManageService keyManageService;
|
||||
private final ThirdPayLogService payLogService;
|
||||
|
||||
/**
|
||||
* 扣款
|
||||
@@ -47,7 +53,7 @@ public class ThirdPayApiServiceImpl implements ThirdPayApiService {
|
||||
logObj.setError(error);
|
||||
} finally {
|
||||
logObj.setTimeConsuming(Long.toString(System.currentTimeMillis() - startTime));
|
||||
thirdPayLogService.save(logObj);
|
||||
payLogService.save(logObj);
|
||||
}
|
||||
return vo;
|
||||
}
|
||||
@@ -68,7 +74,7 @@ public class ThirdPayApiServiceImpl implements ThirdPayApiService {
|
||||
logObj.setError(error);
|
||||
} finally {
|
||||
logObj.setTimeConsuming(Long.toString(System.currentTimeMillis() - startTime));
|
||||
thirdPayLogService.save(logObj);
|
||||
payLogService.save(logObj);
|
||||
}
|
||||
return vo;
|
||||
}
|
||||
@@ -77,9 +83,17 @@ public class ThirdPayApiServiceImpl implements ThirdPayApiService {
|
||||
* 根据加密的手机号查询用户钱包信息
|
||||
*/
|
||||
@Override
|
||||
public PayGetWalletInfoVo getWalletInfo(String signPhone) {
|
||||
public PayGetWalletInfoVo getWalletInfo(String json, Map<String, String> headers) {
|
||||
ThirdKeyManageEntity keySetting = keyManageService.checkSignAndReturnConfig(json, headers);
|
||||
if (ObjectUtil.isEmpty(keySetting)) {
|
||||
|
||||
return null;
|
||||
}
|
||||
PayGetWalletInfoDto dto = JSONUtil.toBean(json, PayGetWalletInfoDto.class);
|
||||
// 手机号解密
|
||||
String phone = LbRetailSignUtils.sm4Decrypt(signPhone, "");
|
||||
String phone = LbRetailSignUtils.sm4Decrypt(dto.getSignPhone(), keySetting.getFieldKey());
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
Binary file not shown.
Reference in new issue
Block a user