Commit 283a9c1f by 程裕兵

feat:app pay

parent 532339d7
package com.jiejing.fitness.finance.api.pay;
import com.jiejing.common.model.JsonResult;
import com.jiejing.fitness.finance.api.pay.request.AppPayRequest;
import com.jiejing.fitness.finance.api.pay.request.NativePayRequest;
import com.jiejing.paycenter.api.pay.request.PayRequest;
import com.jiejing.paycenter.api.pay.request.SyncPayRequest;
......@@ -22,6 +23,10 @@ public interface FitPayApi {
@PostMapping(value = "/private/pay/nativePay")
JsonResult<PayVO> nativePay(NativePayRequest request);
@ApiOperation(value = "app支付", tags = {TAG})
@PostMapping(value = "/private/pay/appPay")
JsonResult<PayVO> appPay(AppPayRequest request);
@ApiOperation(value = "同步支付状态", tags = {TAG})
@PostMapping(value = "/private/pay/get")
JsonResult<PayVO> get(SyncPayRequest request);
......
package com.jiejing.fitness.finance.api.pay;
import com.jiejing.common.model.JsonResult;
import com.jiejing.fitness.finance.api.pay.request.AppPayRequest;
import com.jiejing.fitness.finance.api.pay.request.NativePayRequest;
import com.jiejing.paycenter.api.pay.request.PayRequest;
import com.jiejing.paycenter.api.pay.request.SyncPayRequest;
......@@ -25,6 +26,11 @@ public class FitPayApiFallback implements FallbackFactory<FitPayApi> {
}
@Override
public JsonResult<PayVO> appPay(AppPayRequest request) {
return JsonResult.rpcError();
}
@Override
public JsonResult<PayVO> get(SyncPayRequest request) {
return JsonResult.rpcError();
}
......
package com.jiejing.fitness.finance.api.pay.request;
import com.alibaba.fastjson.JSONObject;
import com.jiejing.fitness.enums.finance.PayOrderTypeEnum;
import com.jiejing.paycenter.common.enums.common.PayChannelEnums;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.math.BigDecimal;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author chengyubing
* @since 2024/4/11 13:58
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@ApiModel(description = "App支付请求")
public class AppPayRequest {
@ApiModelProperty(name = "业务订单号", required = true)
@NotBlank(message = "业务订单号不能为空")
private String orderNo;
@ApiModelProperty(name = "支付渠道", required = true)
@NotNull(message = "支付渠道不能为空")
private PayChannelEnums channel;
@ApiModelProperty(name = "业务订单类型", required = true)
@NotNull(message = "业务订单类型不能为空")
private PayOrderTypeEnum orderType;
@ApiModelProperty(name = "商品名称", required = true)
@NotBlank(message = "商品名称不能为空")
private String goods;
@ApiModelProperty(name = "支付总金额(元)", required = true)
@NotNull(message = "支付总金额不能为空")
private BigDecimal amount;
@ApiModelProperty(name = "过期时间(单位:秒)", required = true)
@NotNull(message = "过期时间不能为空")
@Min(value = 60, message = "过期时间最低60秒")
private Integer timeExpire;
@ApiModelProperty(name = "业务扩展信息", required = true)
@NotNull(message = "业务参扩展信息不能为空")
private JSONObject extra;
}
\ No newline at end of file
package com.jiejing.fitness.finance.app.controller.pay;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
import com.jiejing.common.exception.BizException;
import com.jiejing.common.model.JsonResult;
import com.jiejing.common.utils.convert.BeanUtil;
import com.jiejing.fitness.enums.finance.PayOrderTypeEnum;
import com.jiejing.fitness.finance.api.pay.FitPayApi;
import com.jiejing.fitness.finance.api.pay.request.AppPayRequest;
import com.jiejing.fitness.finance.api.pay.request.NativePayRequest;
import com.jiejing.fitness.finance.service.enums.FinanceErrorEnums;
import com.jiejing.fitness.finance.service.pay.PayService;
import com.jiejing.fitness.finance.service.pay.params.AppPayParams;
import com.jiejing.fitness.finance.service.pay.params.NativePayParams;
import com.jiejing.paycenter.api.pay.PayApi;
import com.jiejing.paycenter.api.pay.request.PayRequest;
import com.jiejing.paycenter.api.pay.request.SyncPayRequest;
import com.jiejing.paycenter.common.enums.pay.PayTypeEnums;
import com.jiejing.paycenter.common.model.vo.PayVO;
import io.swagger.annotations.ApiOperation;
import java.math.BigDecimal;
import java.util.Date;
import javax.annotation.Resource;
import javax.validation.Valid;
import org.springframework.web.bind.annotation.PostMapping;
......@@ -45,6 +38,13 @@ public class FitPayController implements FitPayApi {
return JsonResult.success(payService.nativePay(BeanUtil.map(request, NativePayParams.class)));
}
@ApiOperation(value = "app支付", tags = {TAG})
@PostMapping(value = "/private/pay/appPay")
@Override
public JsonResult<PayVO> appPay(@RequestBody @Valid AppPayRequest request) {
return JsonResult.success(payService.appPay(BeanUtil.map(request, AppPayParams.class)));
}
@ApiOperation(value = "同步支付状态", tags = {TAG})
@PostMapping(value = "/private/pay/get")
public JsonResult<PayVO> get(@RequestBody @Valid SyncPayRequest request) {
......
......@@ -19,3 +19,5 @@ finance:
cashier: "001"
ali_native: "002"
wx_native: "003"
ali_app: "002"
wx_app: "003"
\ No newline at end of file
......@@ -19,3 +19,5 @@ finance:
cashier: "001"
ali_native: "002"
wx_native: "003"
ali_app: "002"
wx_app: "003"
\ No newline at end of file
......@@ -24,3 +24,5 @@ finance:
cashier: "001"
ali_native: "002"
wx_native: "003"
ali_app: "002"
wx_app: "003"
\ No newline at end of file
......@@ -19,3 +19,5 @@ finance:
cashier: "001"
ali_native: "002"
wx_native: "003"
ali_app: "002"
wx_app: "003"
\ No newline at end of file
......@@ -19,3 +19,5 @@ finance:
cashier: "001"
ali_native: "002"
wx_native: "003"
ali_app: "002"
wx_app: "003"
......@@ -19,4 +19,8 @@ public class PayChannelProperties {
private String wxNative;
private String wxApp;
private String aliApp;
}
package com.jiejing.fitness.finance.service.pay;
import com.jiejing.fitness.finance.service.pay.params.AppPayParams;
import com.jiejing.fitness.finance.service.pay.params.NativePayParams;
import com.jiejing.fitness.finance.service.pay.params.StudioMerchantPayParams;
import com.jiejing.fitness.finance.service.pay.params.BrandMerchantRefundParams;
......@@ -35,6 +36,14 @@ public interface PayService {
PayVO nativePay(NativePayParams params);
/**
* App支付
*
* @param params 参数
* @return 结果
*/
PayVO appPay(AppPayParams params);
/**
* 支付
*
* @param params 请求参数
......
......@@ -35,6 +35,7 @@ import com.jiejing.fitness.finance.service.enums.GlobalConfigEnums;
import com.jiejing.fitness.finance.service.pay.PayService;
import com.jiejing.fitness.finance.service.pay.convert.PayConvert;
import com.jiejing.fitness.finance.service.pay.enums.PayFailMessageReplaceEnums;
import com.jiejing.fitness.finance.service.pay.params.AppPayParams;
import com.jiejing.fitness.finance.service.pay.params.BrandMerchantRefundParams;
import com.jiejing.fitness.finance.service.pay.params.NativePayParams;
import com.jiejing.fitness.finance.service.pay.params.StudioMerchantPayParams;
......@@ -185,6 +186,11 @@ public class PayServiceImpl implements PayService {
}
@Override
public PayVO appPay(AppPayParams params) {
return payRpcService.pay(convertAppPay(params));
}
@Override
public PayVO merchantPay(StudioMerchantPayParams params) {
Pair<PartyToMerchant, StudioVO> pair = this.checkBeforeMerchantPay(params);
......@@ -444,6 +450,17 @@ public class PayServiceImpl implements PayService {
}
}
private String getChannelNo(AppPayParams params) {
switch (params.getChannel()) {
case WX:
return config.getWxApp();
case ALI:
return config.getAliApp();
default:
throw new BizException(FinanceErrorEnums.NOT_SUPPORT_TYPE);
}
}
private PayRequest convertNativePay(NativePayParams params) {
PayRequest req = new PayRequest();
req.setChannelNo(getChannelNo(params));
......@@ -459,6 +476,22 @@ public class PayServiceImpl implements PayService {
return req;
}
private PayRequest convertAppPay(AppPayParams params) {
PayRequest req = new PayRequest();
req.setChannelNo(getChannelNo(params));
req.setTransNo(IdWorker.getIdStr());
req.setAmount(params.getAmount());
req.setPayType(PayTypeEnums.APP);
req.setGoods(params.getGoods());
req.setOrderNo(params.getOrderNo());
req.setOrderType(params.getOrderType().getCode());
req.setTimeExpire(params.getTimeExpire());
req.setTradingTime(new Date());
req.setExtra(params.getExtra());
return req;
}
private void sendPaySuccessMessage(PayEvent e) {
Long studioId = e.getExtra().getLong("studioId");
String buyerName = e.getExtra().getString("buyerName");
......
package com.jiejing.fitness.finance.service.pay.params;
import com.alibaba.fastjson.JSONObject;
import com.jiejing.fitness.enums.finance.PayOrderTypeEnum;
import com.jiejing.paycenter.common.enums.common.PayChannelEnums;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.math.BigDecimal;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author chengyubing
* @since 2024/4/11 13:58
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@ApiModel(description = "App支付请求")
public class AppPayParams {
@ApiModelProperty(name = "业务订单号", required = true)
@NotBlank(message = "业务订单号不能为空")
private String orderNo;
@ApiModelProperty(name = "支付渠道", required = true)
@NotNull(message = "支付渠道不能为空")
private PayChannelEnums channel;
@ApiModelProperty(name = "业务订单类型", required = true)
@NotNull(message = "业务订单类型不能为空")
private PayOrderTypeEnum orderType;
@ApiModelProperty(name = "商品名称", required = true)
@NotBlank(message = "商品名称不能为空")
private String goods;
@ApiModelProperty(name = "支付总金额(元)", required = true)
@NotNull(message = "支付总金额不能为空")
private BigDecimal amount;
@ApiModelProperty(name = "过期时间(单位:秒)", required = true)
@NotNull(message = "过期时间不能为空")
@Min(value = 60, message = "过期时间最低60秒")
private Integer timeExpire;
@ApiModelProperty(name = "业务扩展信息", required = true)
@NotNull(message = "业务参扩展信息不能为空")
private JSONObject extra;
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment