feat:转账
This commit is contained in:
1 parent
9bc553e816
commit
64ab364ac5
6 files changed
+97
-32
No files matched your search
+1
-2
@@ -118,8 +118,7 @@ public class AppBrokerageUserController {
|
||||
|
||||
@GetMapping("/child-summary-page")
|
||||
@Operation(summary = "获得下级分销统计分页")
|
||||
public CommonResult<PageResult<AppBrokerageUserChildSummaryRespVO>> getBrokerageUserChildSummaryPage(
|
||||
AppBrokerageUserChildSummaryPageReqVO pageReqVO) {
|
||||
public CommonResult<PageResult<AppBrokerageUserChildSummaryRespVO>> getBrokerageUserChildSummaryPage(AppBrokerageUserChildSummaryPageReqVO pageReqVO) {
|
||||
PageResult<AppBrokerageUserChildSummaryRespVO> pageResult = brokerageUserService.getBrokerageUserChildSummaryPage(pageReqVO, getLoginUserId());
|
||||
return success(pageResult);
|
||||
}
|
||||
|
||||
+1
-1
@@ -237,7 +237,7 @@ public class PayWalletRechargeServiceImpl implements PayWalletRechargeService {
|
||||
.setTitle(String.format("用户[%s]充值[%s]元", user.getNickname(), fenToYuanStr(payOrderDO.getPrice())))
|
||||
);
|
||||
}};
|
||||
tradeBrokerageRecordApi.addBrokerage(recharge.getId(), BrokerageRecordBizTypeEnum.ORDER, brokerageList);
|
||||
tradeBrokerageRecordApi.addBrokerage(user.getId(), BrokerageRecordBizTypeEnum.ORDER, brokerageList);
|
||||
|
||||
// 5. 发送订阅消息
|
||||
getSelf().sendWalletRechargerPaidMessage(payOrderId, recharge);
|
||||
|
||||
+24
-3
@@ -15,7 +15,7 @@ public class PayTransferRespDTO {
|
||||
|
||||
/**
|
||||
* 转账状态
|
||||
*
|
||||
* <p>
|
||||
* 关联 {@link PayTransferStatusRespEnum#getStatus()}
|
||||
*/
|
||||
private Integer status;
|
||||
@@ -50,11 +50,20 @@ public class PayTransferRespDTO {
|
||||
*/
|
||||
private String channelErrorMsg;
|
||||
|
||||
/**
|
||||
* 渠道 package 信息
|
||||
* <p>
|
||||
* 特殊:目前只有微信转账有这个东西!!!
|
||||
*
|
||||
* @see <a href="https://pay.weixin.qq.com/doc/v3/merchant/4012716430">JSAPI 调起用户确认收款</a>
|
||||
*/
|
||||
private String channelPackageInfo;
|
||||
|
||||
/**
|
||||
* 创建【WAITING】状态的转账返回
|
||||
*/
|
||||
public static PayTransferRespDTO waitingOf(String channelTransferNo,
|
||||
String outTransferNo, Object rawData) {
|
||||
String outTransferNo, Object rawData) {
|
||||
PayTransferRespDTO respDTO = new PayTransferRespDTO();
|
||||
respDTO.status = PayTransferStatusRespEnum.WAITING.getStatus();
|
||||
respDTO.channelTransferNo = channelTransferNo;
|
||||
@@ -63,6 +72,18 @@ public class PayTransferRespDTO {
|
||||
return respDTO;
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建【IN_PROGRESS】状态的转账返回
|
||||
*/
|
||||
public static PayTransferRespDTO processingOf(String channelTransferNo, String outTransferNo, Object rawData) {
|
||||
PayTransferRespDTO respDTO = new PayTransferRespDTO();
|
||||
respDTO.status = PayTransferStatusRespEnum.IN_PROGRESS.getStatus();
|
||||
respDTO.channelTransferNo = channelTransferNo;
|
||||
respDTO.outTransferNo = outTransferNo;
|
||||
respDTO.rawData = rawData;
|
||||
return respDTO;
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建【IN_PROGRESS】状态的转账返回
|
||||
*/
|
||||
@@ -95,7 +116,7 @@ public class PayTransferRespDTO {
|
||||
* 创建【SUCCESS】状态的转账返回
|
||||
*/
|
||||
public static PayTransferRespDTO successOf(String channelTransferNo, LocalDateTime successTime,
|
||||
String outTransferNo, Object rawData) {
|
||||
String outTransferNo, Object rawData) {
|
||||
PayTransferRespDTO respDTO = new PayTransferRespDTO();
|
||||
respDTO.status = PayTransferStatusRespEnum.SUCCESS.getStatus();
|
||||
respDTO.channelTransferNo = channelTransferNo;
|
||||
|
||||
+66
-24
@@ -7,6 +7,7 @@ import cn.hutool.core.date.LocalDateTimeUtil;
|
||||
import cn.hutool.core.date.TemporalAccessorUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import cn.iocoder.yudao.framework.common.util.io.FileUtils;
|
||||
import cn.iocoder.yudao.framework.common.util.json.JsonUtils;
|
||||
import cn.iocoder.yudao.framework.common.util.object.ObjectUtils;
|
||||
import cn.iocoder.yudao.framework.pay.core.client.dto.order.PayOrderRespDTO;
|
||||
import cn.iocoder.yudao.framework.pay.core.client.dto.order.PayOrderUnifiedReqDTO;
|
||||
@@ -24,10 +25,7 @@ import com.github.binarywang.wxpay.bean.notify.WxPayRefundNotifyResult;
|
||||
import com.github.binarywang.wxpay.bean.notify.WxPayRefundNotifyV3Result;
|
||||
import com.github.binarywang.wxpay.bean.request.*;
|
||||
import com.github.binarywang.wxpay.bean.result.*;
|
||||
import com.github.binarywang.wxpay.bean.transfer.QueryTransferBatchesRequest;
|
||||
import com.github.binarywang.wxpay.bean.transfer.QueryTransferBatchesResult;
|
||||
import com.github.binarywang.wxpay.bean.transfer.TransferBatchesRequest;
|
||||
import com.github.binarywang.wxpay.bean.transfer.TransferBatchesResult;
|
||||
import com.github.binarywang.wxpay.bean.transfer.*;
|
||||
import com.github.binarywang.wxpay.config.WxPayConfig;
|
||||
import com.github.binarywang.wxpay.exception.WxPayException;
|
||||
import com.github.binarywang.wxpay.service.WxPayService;
|
||||
@@ -460,30 +458,74 @@ public abstract class AbstractWxPayClient extends AbstractPayClient<WxPayClientC
|
||||
}
|
||||
}
|
||||
|
||||
// @Override
|
||||
// protected PayTransferRespDTO doUnifiedTransfer(PayTransferUnifiedReqDTO reqDTO) throws WxPayException {
|
||||
// // 1. 构建 TransferBatchesRequest 请求
|
||||
// List<TransferBatchesRequest.TransferDetail> transferDetailList = Collections.singletonList(
|
||||
// TransferBatchesRequest.TransferDetail.newBuilder()
|
||||
// .outDetailNo(reqDTO.getOutTransferNo())
|
||||
// .transferAmount(reqDTO.getPrice())
|
||||
// .transferRemark(reqDTO.getSubject())
|
||||
// .openid(reqDTO.getOpenid())
|
||||
// .build());
|
||||
// // TODO @luchi:能不能我们搞个 TransferBatchesRequestX extends TransferBatchesRequest,这样更简洁一点。
|
||||
// TransferBatchesRequest transferBatches = TransferBatchesRequest.newBuilder()
|
||||
// .appid(this.config.getAppId())
|
||||
// .outBatchNo(reqDTO.getOutTransferNo())
|
||||
// .batchName(reqDTO.getSubject())
|
||||
// .batchRemark(reqDTO.getSubject())
|
||||
// .totalAmount(reqDTO.getPrice())
|
||||
// .totalNum(transferDetailList.size())
|
||||
// .transferDetailList(transferDetailList).build()
|
||||
// .setNotifyUrl(reqDTO.getNotifyUrl());
|
||||
// // 2.1 执行请求
|
||||
// TransferBatchesResult transferBatchesResult = client.getTransferService().transferBatches(transferBatches);
|
||||
// // 2.2 创建返回结果
|
||||
// return PayTransferRespDTO.dealingOf(transferBatchesResult.getBatchId(), reqDTO.getOutTransferNo(), transferBatchesResult);
|
||||
// }
|
||||
|
||||
@Override
|
||||
protected PayTransferRespDTO doUnifiedTransfer(PayTransferUnifiedReqDTO reqDTO) throws WxPayException {
|
||||
// 1. 构建 TransferBatchesRequest 请求
|
||||
List<TransferBatchesRequest.TransferDetail> transferDetailList = Collections.singletonList(
|
||||
TransferBatchesRequest.TransferDetail.newBuilder()
|
||||
.outDetailNo(reqDTO.getOutTransferNo())
|
||||
.transferAmount(reqDTO.getPrice())
|
||||
.transferRemark(reqDTO.getSubject())
|
||||
.openid(reqDTO.getOpenid())
|
||||
.build());
|
||||
// TODO @luchi:能不能我们搞个 TransferBatchesRequestX extends TransferBatchesRequest,这样更简洁一点。
|
||||
TransferBatchesRequest transferBatches = TransferBatchesRequest.newBuilder()
|
||||
// 1. 构建 TransferBillsRequest 请求
|
||||
TransferBillsRequest request = TransferBillsRequest.newBuilder()
|
||||
.appid(this.config.getAppId())
|
||||
.outBatchNo(reqDTO.getOutTransferNo())
|
||||
.batchName(reqDTO.getSubject())
|
||||
.batchRemark(reqDTO.getSubject())
|
||||
.totalAmount(reqDTO.getPrice())
|
||||
.totalNum(transferDetailList.size())
|
||||
.transferDetailList(transferDetailList).build()
|
||||
.setNotifyUrl(reqDTO.getNotifyUrl());
|
||||
.outBillNo(reqDTO.getOutTransferNo())
|
||||
.transferAmount(reqDTO.getPrice())
|
||||
.transferRemark(reqDTO.getSubject())
|
||||
.transferSceneId(reqDTO.getChannelExtras().get("sceneId"))
|
||||
.openid(reqDTO.getOpenid())
|
||||
.userName(reqDTO.getUserName())
|
||||
.transferSceneReportInfos(JsonUtils.parseArray(reqDTO.getChannelExtras().get("sceneReportInfos"),
|
||||
TransferBillsRequest.TransferSceneReportInfo.class))
|
||||
.notifyUrl(reqDTO.getNotifyUrl())
|
||||
.build();
|
||||
// 特殊:微信转账,必须 0.3 元起,才允许传入姓名
|
||||
if (reqDTO.getPrice() < 30) {
|
||||
request.setUserName(null);
|
||||
}
|
||||
// 2.1 执行请求
|
||||
TransferBatchesResult transferBatchesResult = client.getTransferService().transferBatches(transferBatches);
|
||||
// 2.2 创建返回结果
|
||||
return PayTransferRespDTO.dealingOf(transferBatchesResult.getBatchId(), reqDTO.getOutTransferNo(), transferBatchesResult);
|
||||
try {
|
||||
TransferBillsResult response = client.getTransferService().transferBills(request);
|
||||
|
||||
// 2.2 创建返回结果
|
||||
String state = response.getState();
|
||||
if (ObjectUtils.equalsAny(state, "ACCEPTED", "PROCESSING", "WAIT_USER_CONFIRM", "TRANSFERING")) {
|
||||
return PayTransferRespDTO.processingOf(response.getTransferBillNo(), response.getOutBillNo(), response)
|
||||
.setChannelPackageInfo(response.getPackageInfo()); // 一般情况下,只有 WAIT_USER_CONFIRM 会有!
|
||||
}
|
||||
if (Objects.equals("SUCCESS", state)) {
|
||||
return PayTransferRespDTO.successOf(response.getTransferBillNo(), parseDateV3(response.getCreateTime()),
|
||||
response.getOutBillNo(), response);
|
||||
}
|
||||
return PayTransferRespDTO.closedOf(state, response.getFailReason(),
|
||||
response.getOutBillNo(), response);
|
||||
} catch (WxPayException e) {
|
||||
log.error("[doUnifiedTransfer][转账({}) 发起微信支付异常", reqDTO, e);
|
||||
String errorCode = getErrorCode(e);
|
||||
String errorMessage = getErrorMessage(e);
|
||||
return PayTransferRespDTO.closedOf(errorCode, errorMessage,
|
||||
reqDTO.getOutTransferNo(), e.getXmlString());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+4
-1
@@ -274,7 +274,10 @@ public class SocialClientServiceImpl implements SocialClientService {
|
||||
try {
|
||||
String urlScheme = service.getWxMaSchemeService().generate(WxMaGenerateSchemeRequest.newBuilder()
|
||||
.jumpWxa(
|
||||
WxMaGenerateSchemeRequest.JumpWxa.newBuilder().path(path).query(json).envVersion("trial").build()
|
||||
// 正式版本-release
|
||||
// 体验版-trial
|
||||
// 开发版-develop
|
||||
WxMaGenerateSchemeRequest.JumpWxa.newBuilder().path(path).query(json).envVersion("release").build()
|
||||
)
|
||||
.expireTime(expireTime)
|
||||
.expireType(0)
|
||||
|
||||
@@ -109,7 +109,7 @@ aj:
|
||||
cache-number: 1000 # local 缓存的阈值,达到这个值,清除缓存
|
||||
timing-clear: 180 # local定时清除过期缓存(单位秒),设置为0代表不执行
|
||||
type: blockPuzzle # 验证码类型 default两种都实例化。 blockPuzzle 滑块拼图 clickWord 文字点选
|
||||
water-mark: 芋道源码 # 右下角水印文字(我的水印),可使用 https://tool.chinaz.com/tools/unicode.aspx 中文转 Unicode,Linux 可能需要转 unicode
|
||||
water-mark: 荷塘月色 # 右下角水印文字(我的水印),可使用 https://tool.chinaz.com/tools/unicode.aspx 中文转 Unicode,Linux 可能需要转 unicode
|
||||
interference-options: 0 # 滑动干扰项(0/1/2)
|
||||
req-frequency-limit-enable: false # 接口请求次数一分钟限制是否开启 true|false
|
||||
req-get-lock-limit: 5 # 验证失败 5 次,get接口锁定
|
||||
|
||||
Reference in new issue
Block a user