diff --git a/src/main/java/com/gxwebsoft/common/core/utils/RequestUtil.java b/src/main/java/com/gxwebsoft/common/core/utils/RequestUtil.java index 1b37e14..1787122 100644 --- a/src/main/java/com/gxwebsoft/common/core/utils/RequestUtil.java +++ b/src/main/java/com/gxwebsoft/common/core/utils/RequestUtil.java @@ -2,10 +2,7 @@ package com.gxwebsoft.common.core.utils; import cn.hutool.http.HttpRequest; import com.alibaba.fastjson.JSONObject; -import com.gxwebsoft.common.system.entity.MerchantAccount; -import com.gxwebsoft.common.system.entity.Payment; -import com.gxwebsoft.common.system.entity.User; -import com.gxwebsoft.common.system.entity.UserRole; +import com.gxwebsoft.common.system.entity.*; import com.wechat.pay.java.service.partnerpayments.jsapi.model.Transaction; import org.springframework.stereotype.Component; @@ -27,15 +24,37 @@ public class RequestUtil { ACCESS_TOKEN = token; } - // 微信支付通知 - public String pushWxPayNotify(Transaction transaction, Payment payment){ + + // 余额支付通知 + public void pushBalancePayNotify(Transaction transaction, Payment payment) { + System.out.println("payment = " + payment); + System.out.println("transaction = " + transaction); // 设置租户ID setTenantId(payment.getTenantId().toString()); // 推送支付通知地址 String path = payment.getNotifyUrl(); try { // 链式构建请求 - return HttpRequest.post(path) + HttpRequest.post(path) + .header("Tenantid", TENANT_ID) + .body(JSONUtil.toJSONString(transaction))//表单内容 + .timeout(20000)//超时,毫秒 + .execute().body(); + + } catch (Exception e) { + e.printStackTrace(); + } + } + + // 微信支付通知 + public void pushWxPayNotify(Transaction transaction, Payment payment) { + // 设置租户ID + setTenantId(payment.getTenantId().toString()); + // 推送支付通知地址 + String path = payment.getNotifyUrl(); + try { + // 链式构建请求 + HttpRequest.post(path) .header("Tenantid", TENANT_ID) .body(JSONUtil.toJSONString(transaction))//表单内容 .timeout(20000)//超时,毫秒 @@ -44,7 +63,6 @@ public class RequestUtil { } catch (Exception e) { e.printStackTrace(); } - return "支付失败"; } public User getMerchantAccountByPhone(String phone) { diff --git a/src/main/java/com/gxwebsoft/common/system/controller/PaymentController.java b/src/main/java/com/gxwebsoft/common/system/controller/PaymentController.java index 3e5d8cd..be1be70 100644 --- a/src/main/java/com/gxwebsoft/common/system/controller/PaymentController.java +++ b/src/main/java/com/gxwebsoft/common/system/controller/PaymentController.java @@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.gxwebsoft.common.core.exception.BusinessException; import com.gxwebsoft.common.core.utils.RedisUtil; +import com.gxwebsoft.common.core.utils.RequestUtil; import com.gxwebsoft.common.core.web.BaseController; import com.gxwebsoft.common.system.entity.*; import com.gxwebsoft.common.system.service.PaymentService; @@ -16,6 +17,9 @@ import com.gxwebsoft.common.core.web.BatchParam; import com.gxwebsoft.common.core.annotation.OperationLog; import com.gxwebsoft.common.system.service.UserBalanceLogService; import com.gxwebsoft.common.system.service.UserService; +import com.wechat.pay.java.service.partnerpayments.jsapi.model.Transaction; +import com.wechat.pay.java.service.partnerpayments.model.TransactionAmount; +import com.wechat.pay.java.service.payments.jsapi.model.Amount; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.security.access.prepost.PreAuthorize; @@ -25,6 +29,7 @@ import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import java.math.BigDecimal; import java.util.List; +import java.util.UUID; import java.util.concurrent.TimeUnit; import static com.gxwebsoft.common.core.constants.BalanceConstants.BALANCE_ADMIN; @@ -48,6 +53,8 @@ public class PaymentController extends BaseController { private UserBalanceLogService userBalanceLogService; @Resource private RedisUtil redisUtil; + @Resource + private RequestUtil requestUtil; @ApiOperation("余额支付接口") @PostMapping("/balancePay") @@ -75,11 +82,29 @@ public class PaymentController extends BaseController { BigDecimal balance = buyer.getBalance().add(order.getPayPrice()); userBalanceLog.setBalance(balance); userBalanceLog.setComments(order.getMerchantName()); + userBalanceLog.setTransactionId(UUID.randomUUID().toString()); userBalanceLog.setOrderNo(order.getOrderNo()); final boolean save = userBalanceLogService.save(userBalanceLog); System.out.println("save = " + save); - + // 推送微信官方支付结果(携带租户ID的POST请求) + final Transaction transaction = new Transaction(); + transaction.setOutTradeNo(order.getOrderNo()); + transaction.setTransactionId(order.getOrderNo()); + final TransactionAmount amount = new TransactionAmount(); + // 计算金额 +// BigDecimal decimal = order.getTotalPrice(); +// final BigDecimal multiply = decimal.multiply(new BigDecimal(100)); +// // 将 BigDecimal 转换为 Integer +// Integer money = multiply.intValue(); + amount.setTotal(order.getPayPrice().intValue()); + amount.setCurrency("CNY"); + transaction.setAmount(amount); + // 获取支付配置信息用于解密 + String key = "Payment:0:".concat(order.getTenantId().toString()); + System.out.println("key = " + key); + final Payment payment = redisUtil.get(key, Payment.class); + requestUtil.pushBalancePayNotify(transaction, payment); return success("支付成功",order.getOrderNo()); } diff --git a/src/main/java/com/gxwebsoft/common/system/controller/RechargeOrderController.java b/src/main/java/com/gxwebsoft/common/system/controller/RechargeOrderController.java index c5aea12..1902a96 100644 --- a/src/main/java/com/gxwebsoft/common/system/controller/RechargeOrderController.java +++ b/src/main/java/com/gxwebsoft/common/system/controller/RechargeOrderController.java @@ -1,6 +1,7 @@ package com.gxwebsoft.common.system.controller; import cn.hutool.core.util.IdUtil; +import com.gxwebsoft.common.core.utils.CommonUtil; import com.gxwebsoft.common.core.web.ApiResult; import com.gxwebsoft.common.core.web.BaseController; import com.gxwebsoft.common.core.web.BatchParam; @@ -22,6 +23,7 @@ import javax.annotation.Resource; import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; +import java.util.UUID; import static com.gxwebsoft.common.core.constants.BalanceConstants.BALANCE_ADMIN; @@ -54,6 +56,7 @@ public class RechargeOrderController extends BaseController { userService.updateById(user); // 保存充值记录 rechargeOrder.setOrderNo(Long.toString(IdUtil.getSnowflakeNextId())); + rechargeOrder.setTradeId(Integer.valueOf(CommonUtil.createOrderNo())); rechargeOrder.setBalance(balance); if (rechargeOrderService.save(rechargeOrder)) { // 记录余额明细 @@ -62,6 +65,7 @@ public class RechargeOrderController extends BaseController { userBalanceLog.setScene(BALANCE_ADMIN); userBalanceLog.setMoney(rechargeOrder.getPayPrice()); userBalanceLog.setBalance(balance); + userBalanceLog.setTransactionId(UUID.randomUUID().toString()); userBalanceLog.setComments("操作人:" + getLoginUser().getNickname()); userBalanceLog.setRemark(rechargeOrder.getComments()); userBalanceLog.setMerchantCode(rechargeOrder.getMerchantCode()); diff --git a/src/main/java/com/gxwebsoft/common/system/entity/UserBalanceLog.java b/src/main/java/com/gxwebsoft/common/system/entity/UserBalanceLog.java index aad6941..81641fc 100644 --- a/src/main/java/com/gxwebsoft/common/system/entity/UserBalanceLog.java +++ b/src/main/java/com/gxwebsoft/common/system/entity/UserBalanceLog.java @@ -42,6 +42,9 @@ public class UserBalanceLog implements Serializable { @ApiModelProperty(value = "订单编号") private String orderNo; + @ApiModelProperty(value = "支付流水号") + private String transactionId; + @ApiModelProperty(value = "管理员备注") private String remark;