TRX 1 năm trước cách đây
mục cha
commit
094b89140d

+ 3 - 0
PaymentClient/src/main/java/com/zhongshu/payment/client/payModel/commn/CreateOrderParam.java

@@ -52,4 +52,7 @@ public class CreateOrderParam {
 
     @Schema(description = "商品描述")
     private String description;
+
+    @Schema(description = "商品信息")
+    private Object goodsInfo;
 }

+ 2 - 0
PaymentServer/src/main/java/com/zhongshu/payment/server/core/dao/unionFrictionlessPay/UnionUserOpenInfoDao.java

@@ -16,6 +16,8 @@ public interface UnionUserOpenInfoDao extends MongoDao<UnionUserOpenInfo>, Union
 
     UnionUserOpenInfo findTopById(String id);
 
+    UnionUserOpenInfo findTopByUserIdAndMid(String userId, String mid);
+
     List<UnionUserOpenInfo> findByUserId(String userId);
 
     UnionUserOpenInfo findTopByUserId(String userId);

+ 20 - 1
PaymentServer/src/main/java/com/zhongshu/payment/server/core/domain/wallet/RechargeRecord.java

@@ -118,6 +118,9 @@ public class RechargeRecord extends SuperEntity {
     @Schema(description = "附加信息")
     private Object attach;
 
+    @Schema(description = "商品信息")
+    private Object goodsInfo;
+
     @Schema(description = "订单支付说明")
     private String payMsg;
 
@@ -152,10 +155,26 @@ public class RechargeRecord extends SuperEntity {
         this.paymentTime = DateUtils.paresTime(System.currentTimeMillis(), DateUtils.patternyyyySSS);
     }
 
+    //------------------------------支付请求数据 start ----------------
+    @Schema(description = "请求数据")
+    private Object requestParam;
+
+    @Schema(description = "请求调用响应数据")
+    private Object responseParam;
+
+    @Schema(description = "支付结果,异步")
+    private Object payResult;
+
+    @Schema(description = "是否时间")
+    private Long payTime;
+
     //----------------------------退款相关数据 start
 
+    @Schema(description = "订单最终状态说明")
+    private String orderMsg = "";
+
     @Schema(description = "请求数据")
-    private Object requestParam;
+    private Object refundRequestParam;
 
     @Schema(description = "退款订单号")
     private String merOrderId;

+ 7 - 7
PaymentServer/src/main/java/com/zhongshu/payment/server/core/service/RechargeService.java

@@ -132,7 +132,7 @@ public class RechargeService extends SuperService {
             return ResultContent.buildFail("获取用户信息失败");
         }
         rechargeRecord.setUserInfo(orgUserDetail.getContent());
-        rechargeRecord.setRechargeState(OrderState.NOTPAY);
+        rechargeRecord.setRechargeState(OrderState.WAIT_PAYMENT);
         rechargeRecord.setWallet(userWallet);
         long createTIme = System.currentTimeMillis();
         rechargeRecord.setCreateTime(createTIme);
@@ -155,8 +155,8 @@ public class RechargeService extends SuperService {
         }
         // 检查订单状态
         OrderState rechargeState = record.getRechargeState();
-        if (rechargeState != OrderState.NOTPAY) {
-            return ResultContent.buildFail(String.format("订单状态不为:%s", OrderState.NOTPAY.getRemark()));
+        if (rechargeState != OrderState.WAIT_PAYMENT) {
+            return ResultContent.buildFail(String.format("订单状态不为:%s", OrderState.WAIT_PAYMENT.getRemark()));
         }
         if (record.getExpireTime() <= System.currentTimeMillis()) {
             record.setRechargeState(OrderState.CLOSED);
@@ -210,8 +210,8 @@ public class RechargeService extends SuperService {
         if (record == null) {
             return ResultContent.buildFail("充值订单:" + outTradeNo + "不存在");
         }
-        if (record.getRechargeState().equals(OrderState.NOTPAY) && !record.isCommit()) {
-            return ResultContent.buildSuccess(OrderState.NOTPAY.name());
+        if (record.getRechargeState().equals(OrderState.WAIT_PAYMENT) && !record.isCommit()) {
+            return ResultContent.buildSuccess(OrderState.WAIT_PAYMENT.name());
         }
 
         ProjectWxPayParam wxPayParam = new ProjectWxPayParam();
@@ -237,7 +237,7 @@ public class RechargeService extends SuperService {
             return ResultContent.buildFail("充值订单:" + outTradeNo + "不存在");
         }
         // 判断状态
-        if (record.getRechargeState() != OrderState.NOTPAY) {
+        if (record.getRechargeState() != OrderState.WAIT_PAYMENT) {
             return ResultContent.buildFail(String.format("订单状态不为[%s]不能关闭"));
         }
         ExecuteMethodInfo executeMethodInfo = executeMethodInfoDao.findTopByPaymentType(record.getPaymentType());
@@ -259,7 +259,7 @@ public class RechargeService extends SuperService {
         if (record == null) {
             return ResultContent.buildFail("充值订单:" + outTradeNo + "不存在");
         }
-        if (!record.getRechargeState().equals(OrderState.NOTPAY)) {
+        if (!record.getRechargeState().equals(OrderState.WAIT_PAYMENT)) {
             return ResultContent.buildSuccess("订单状态不是未支付");
         }
         record.setRechargeState(OrderState.CLOSED);

+ 55 - 18
PaymentServer/src/main/java/com/zhongshu/payment/server/core/service/pay/impl/unionFrictionlessPay/UnionFrictionlessPayMainService.java

@@ -51,6 +51,7 @@ import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
 import org.springframework.stereotype.Service;
+import org.springframework.util.StopWatch;
 
 import java.math.BigDecimal;
 import java.util.ArrayList;
@@ -112,14 +113,15 @@ public class UnionFrictionlessPayMainService extends SuperPayService {
         UserCountModel userCountModel = resultContent.getContent();
 
         // 验证学校信息
-
+        String mid = UnionPaymentConfig.mid;
         // 商户签约协议号 商户生成。在该商户号下唯一
         String contractNo = collectionIdService.getNextNo();
-        UnionUserOpenInfo unionUserOpenInfo = unionUserOpenInfoDao.findTopByUserId(userId);
+        UnionUserOpenInfo unionUserOpenInfo = unionUserOpenInfoDao.findTopByUserIdAndMid(userId, mid);
         if (ObjectUtils.isEmpty(unionUserOpenInfo)) {
             unionUserOpenInfo = new UnionUserOpenInfo();
             unionUserOpenInfo.setShopOid(shopOid);
             unionUserOpenInfo.setUserId(userId);
+            unionUserOpenInfo.setMid(mid);
             unionUserOpenInfo.setUnionUserOpenType(UnionUserOpenType.User);
             unionUserOpenInfo.setContractState(ContractState.UNSIGNED);
         }
@@ -247,11 +249,26 @@ public class UnionFrictionlessPayMainService extends SuperPayService {
     public ResultContent createAndPayOrder(CreateOrderParam param) {
         // 查询是否签约
         String userId = param.getUserId();
+
+        StopWatch watch = new StopWatch();
+        watch.start("查询用户信息");
+        // 查询用户在学校的信息
+        OrgUserDetailParam orgUserDetailParam = new OrgUserDetailParam();
+        orgUserDetailParam.setOid(param.getSchoolId());
+        orgUserDetailParam.setUserId(userId);
+        ResultContent<OrganizationUserModel> orgUserDetail = organizationFeignService.getOrgUserDetail(orgUserDetailParam);
+        if (orgUserDetail.isFailed()) {
+            return ResultContent.buildFail("获取用户信息失败");
+        }
+        OrganizationUserModel userModel = orgUserDetail.getContent();
+        watch.stop();
+        watch.start("2");
+
         String shopId = param.getShopId();
         // 创建订单
         String outTradeNo = param.getOutTradeNo();
         BigDecimal total = param.getTotal();
-
+        String mid = UnionPaymentConfig.mid;
         RechargeRecord rechargeRecord = rechargeRecordDao.findByOutTradeNo(outTradeNo);
         if (rechargeRecord == null) {
             // 创建充值订单
@@ -285,31 +302,51 @@ public class UnionFrictionlessPayMainService extends SuperPayService {
             // 订单过期时间
             rechargeRecord.setExpireTime(createTIme + TimeConfig.rechargeExpireTime);
 
-            // 查询用户在学校的信息
-            OrgUserDetailParam orgUserDetailParam = new OrgUserDetailParam();
-            orgUserDetailParam.setOid(param.getSchoolId());
-            orgUserDetailParam.setUserId(userId);
-            ResultContent<OrganizationUserModel> orgUserDetail = organizationFeignService.getOrgUserDetail(orgUserDetailParam);
-            if (orgUserDetail.isFailed()) {
-                return ResultContent.buildFail("获取用户信息失败");
-            }
-            rechargeRecord.setUserInfo(orgUserDetail.getContent());
+            rechargeRecord.setUserInfo(userModel);
             rechargeRecord.setAttach(param.getAttach());
+        }
+        watch.stop();
+        watch.start("3");
+        // 查询无感支付签约信息
+        UnionUserOpenInfo unionUserOpenInfo = unionUserOpenInfoDao.findTopByUserIdAndMid(userId, mid);
+        if (ObjectUtils.isEmpty(unionUserOpenInfo)) {
+            rechargeRecord.setRechargeState(OrderState.CLOSED);
             rechargeRecordDao.save(rechargeRecord);
+            log.info("{}", watch.prettyPrint());
+            return ResultContent.buildFail(String.format("%s用户未签约", userModel.getRealName()));
         }
 
-        SenselessPayParam senselessPayParam = new SenselessPayParam();
-        senselessPayParam.setRequestTimestamp(DateUtils.paresTime(System.currentTimeMillis(), DateUtils.FORMAT_LONG));
-
+        SenselessPayParam requestParam = new SenselessPayParam();
+        requestParam.setRequestTimestamp(DateUtils.paresTime(System.currentTimeMillis(), DateUtils.FORMAT_LONG));
+        if (ObjectUtils.isNotEmpty(unionUserOpenInfo)) {
+            requestParam.setMid(unionUserOpenInfo.getMid());
+            requestParam.setTid(payConfig.getTid());
+            requestParam.setContractId(unionUserOpenInfo.getContractId());
+            requestParam.setPlanId(unionUserOpenInfo.getPlanId());
+        }
+        requestParam.setMerOrderId(outTradeNo);
+        requestParam.setMsgId(CommonUtil.UUID());
+        requestParam.setOrderDesc(param.getDescription());
+        requestParam.setTotalAmount(param.getTotal().intValue());
+        requestParam.setSrcReserve(outTradeNo);
+        requestParam.setNotifyUrl(payConfig.getPayNotifyUrl() + "/" + outTradeNo);
+
+        rechargeRecord.setGoodsInfo(param.getGoodsInfo());
+        rechargeRecord.setRequestParam(requestParam);
         String url = payApiConfig.getUrl(UnionFrictionlessPayApiConfig.senselessPay);
-        SuperResponseModel requestAPI = unionRequestService.requestUnionAPI(url, senselessPayParam, SenselessPayResponse.class);
+        SuperResponseModel requestAPI = unionRequestService.requestUnionAPI(url, requestParam, SenselessPayResponse.class);
+        rechargeRecord.setResponseParam(requestAPI);
         if (requestAPI.isFailed()) {
+            rechargeRecord.setRechargeState(OrderState.CLOSED);
+            rechargeRecord.setOrderMsg("支付服务调用失败");
+            rechargeRecordDao.save(rechargeRecord);
             return ResultContent.buildFail(requestAPI.getMsg());
         }
         SenselessPayResponse response = (SenselessPayResponse) requestAPI;
         log.info("state: {}", response.isSuccess());
-
-        return ResultContent.buildSuccess();
+        rechargeRecord.setRechargeState(OrderState.PAY_IN_PROGRESS);
+        rechargeRecordDao.save(rechargeRecord);
+        return ResultContent.buildSuccess(rechargeRecord);
     }
 
     /**

+ 1 - 1
PaymentServer/src/main/java/com/zhongshu/payment/server/core/service/pay/impl/unionFrictionlessPay/UnionNotifyService.java

@@ -68,7 +68,7 @@ public class UnionNotifyService extends SuperService {
      */
     @SneakyThrows
     public ResultContent signNotify(HttpServletRequest request, String contractNo) {
-
+        log.info("signNotify");
         ServletInputStream inputStream = request.getInputStream();
         StringBuffer stringBuffer = new StringBuffer();
         BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));

+ 6 - 2
PaymentServer/src/main/java/com/zhongshu/payment/server/core/service/pay/impl/wallet/WalletMainService.java

@@ -147,7 +147,7 @@ public class WalletMainService extends SuperPayService {
             // 订单号(唯一)
             rechargeRecord.setOutTradeNo(outTradeNo);
             // 未支付状态
-            rechargeRecord.setRechargeState(OrderState.NOTPAY);
+            rechargeRecord.setRechargeState(OrderState.WAIT_PAYMENT);
             rechargeRecord.setDescription(param.getDescription());
             // 金额
             rechargeRecord.setTotal(total);
@@ -184,7 +184,7 @@ public class WalletMainService extends SuperPayService {
         if (rechargeRecord == null) {
             return ResultContent.buildFail(String.format("订单数据未找到", param.getOutTradeNo()));
         }
-        if (rechargeRecord.getRechargeState() != OrderState.NOTPAY) {
+        if (rechargeRecord.getRechargeState() != OrderState.WAIT_PAYMENT) {
             return ResultContent.buildFail(String.format("订单状态不为未支付状态:%s", rechargeRecord.getRechargeState().getRemark()));
         }
         if (rechargeRecord.getExpireTime() <= System.currentTimeMillis()) {
@@ -219,6 +219,10 @@ public class WalletMainService extends SuperPayService {
         shopWallet.setAmount(shopWallet.getAmount().add(total));
         shopWallet.setTotalAmount(shopWallet.getTotalAmount().add(total));
         walletDao.save(shopWallet);
+        // 标记订单已支付
+        rechargeRecord.setPayTime(System.currentTimeMillis());
+        rechargeRecord.setRechargeState(OrderState.HAVE_PAID);
+        rechargeRecordDao.save(rechargeRecord);
         // 商户钱包流水
         createWalletFlow(shopWallet.getId(), total, param.getOutTradeNo(), TradeType.InCome, rechargeRecord.getAttach(), rechargeRecord.getSchoolId());
         return ResultContent.buildSuccess();

+ 1 - 1
PaymentServer/src/main/java/com/zhongshu/payment/server/core/service/pay/impl/wxPaymentV3/WxPaymentMainService.java

@@ -116,7 +116,7 @@ public class WxPaymentMainService extends SuperPayService {
         }
         record.setOpenid(param.getOpenid());
         record.setPrePayModel(prepayResult.getContent());
-        record.setRechargeState(OrderState.NOTPAY);
+        record.setRechargeState(OrderState.WAIT_PAYMENT);
         record.setCommit(true);
         rechargeRecordDao.save(record);
         return prepayResult;

+ 1 - 1
PaymentServer/src/main/java/com/zhongshu/payment/server/core/timer/ComplexTimer.java

@@ -47,7 +47,7 @@ public class ComplexTimer implements ApplicationRunner {
     //    @Scheduled(fixedRate = 5000)
     public void closeNoPay() {
 
-        List<RechargeRecord> list = rechargeRecordDao.listTimeOut(OrderState.NOTPAY);
+        List<RechargeRecord> list = rechargeRecordDao.listTimeOut(OrderState.WAIT_PAYMENT);
         for (RechargeRecord noPay : list){
             try {
                 rechargeService.closeNoPay(noPay.getOutTradeNo());