chao vor 3 Jahren
Ursprung
Commit
7abc974840

+ 34 - 2
src/main/java/com/caimei365/order/controller/PayOrderApi.java

@@ -7,6 +7,7 @@ import com.caimei365.order.model.dto.PayLinkDto;
 import com.caimei365.order.service.PayOrderService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
 import lombok.RequiredArgsConstructor;
 import org.apache.commons.lang3.StringUtils;
@@ -210,9 +211,40 @@ public class PayOrderApi {
         return payOrderService.paymentCallback(data);
     }
 
+    /**
+     * 判断此次支付是否完成
+     * @param orderId           订单id
+     * @param paySuccessCounter 付款次数
+     */
+    @ApiOperation("判断此次支付是否完成(旧:/PayOrder/payWhetherSuccess)")
+    @ApiImplicitParams({
+            @ApiImplicitParam(required = false, name = "orderId", value = "订单id"),
+            @ApiImplicitParam(required = false, name = "paySuccessCounter", value = "付款次数")
+    })
+    @GetMapping("/payWhetherSuccess")
+    public ResponseJson<String> payWhetherSuccess(Integer orderId, Integer paySuccessCounter) {
+        if (null == orderId) {
+            return ResponseJson.error("订单Id不能为空!", null);
+        }
+        if (null == paySuccessCounter) {
+            return ResponseJson.error("付款次数不能为空!", null);
+        }
+        return payOrderService.payWhetherSuccess(orderId, paySuccessCounter);
+    }
 
-
-
+    /**
+     * 查询本次支付订单结果
+     * @param mbOrderId 平台唯一流水号
+     */
+    @ApiOperation("查询本次支付订单结果(旧:/PayOrder/findOrderStatus)")
+    @ApiImplicitParam(required = false, name = "mbOrderId", value = "平台唯一流水号")
+    @GetMapping("/findOrderStatus")
+    public ResponseJson<JSONObject> getPayOrderResult(String mbOrderId) {
+        if (null == mbOrderId) {
+            return ResponseJson.error("平台唯一流水号不能为空!", null);
+        }
+        return payOrderService.getPayOrderResult(mbOrderId);
+    }
 
 
 

+ 5 - 3
src/main/java/com/caimei365/order/mapper/PayOrderMapper.java

@@ -68,7 +68,9 @@ public interface PayOrderMapper {
      * @param orderId 订单Id
      */
     Integer getOrderPromotionsId(Integer orderId);
-
-
-
+    /**
+     * 付款次数
+     * @param orderId 订单Id
+     */
+    Integer getDbPaySuccessCounter(Integer orderId);
 }

+ 11 - 1
src/main/java/com/caimei365/order/service/PayOrderService.java

@@ -89,5 +89,15 @@ public interface PayOrderService {
      * 支付异步通知回调
      */
     String paymentCallback(String data) throws NoSuchAlgorithmException, InvalidKeySpecException;
-
+    /**
+     * 判断此次支付是否完成
+     * @param orderId           订单id
+     * @param paySuccessCounter 付款次数
+     */
+    ResponseJson<String> payWhetherSuccess(Integer orderId, Integer paySuccessCounter);
+    /**
+     * 查询本次支付订单结果
+     * @param mbOrderId 平台唯一流水号
+     */
+    ResponseJson<JSONObject> getPayOrderResult(String mbOrderId);
 }

+ 52 - 1
src/main/java/com/caimei365/order/service/impl/PayOrderServiceImpl.java

@@ -570,7 +570,7 @@ public class PayOrderServiceImpl implements PayOrderService {
     public String paymentCallback(String data) throws NoSuchAlgorithmException, InvalidKeySpecException {
         log.info("******************** 支付异步回调 start *******************");
         // 公钥解密
-        JSONObject json = PayUtil.decryptDataPublic(data, PayUtil.publicKey);
+        JSONObject json = PayUtil.publicKeyDecrypt(data, PayUtil.publicKey);
         log.info("公钥解密>>>>>>" + json);
         // 公钥验签
         String signaa = json.getString("sign");
@@ -805,4 +805,55 @@ public class PayOrderServiceImpl implements PayOrderService {
         }
         return "SUCCESS";
     }
+
+    /**
+     * 判断此次支付是否完成
+     *
+     * @param orderId           订单id
+     * @param paySuccessCounter 付款次数
+     */
+    @Override
+    public ResponseJson<String> payWhetherSuccess(Integer orderId, Integer paySuccessCounter) {
+        Integer dbPayCounter = payOrderMapper.getDbPaySuccessCounter(orderId);
+        if (paySuccessCounter.equals(dbPayCounter)) {
+            return ResponseJson.error(-2, "支付失败", "付款次数异常");
+        } else if (dbPayCounter > paySuccessCounter) {
+            return ResponseJson.success("支付成功");
+        } else {
+            return ResponseJson.error("支付异常", null);
+        }
+    }
+
+    /**
+     * 查询本次支付订单结果
+     *
+     * @param mbOrderId 平台唯一流水号
+     */
+    @Override
+    public ResponseJson<JSONObject> getPayOrderResult(String mbOrderId) {
+        // 时间戳
+        long time = System.currentTimeMillis() / 1000;
+        JSONObject json = new JSONObject();
+        json.put("merAccount", PayUtil.merAccount);
+        json.put("mbOrderId", mbOrderId);
+        json.put("time", time);
+        // 生成RSA签名
+        String sign = PayUtil.getPaySign(json, PayUtil.merKey);
+        json.put("sign", sign);
+        String data = "";
+        try {
+            // 私钥加密
+            data = PayUtil.privateKeyEncrypt(json, PayUtil.merKey);
+        } catch (Exception e) {
+            log.error("【查询本次支付订单结果】>>>>>错误信息:", e);
+        }
+        JSONObject result = PayUtil.httpGet("https://platform.mhxxkj.com/paygateway/mbpay/order/query/v1_1", PayUtil.merAccount, data);
+        String code = result.getString("code");
+        if (!"000000".equals(code)) {
+            String msg = result.getString("msg");
+            log.info("【查询本次支付订单结果】>>>>>>>>>>>>>>第三方查询订单失败>msg:" + msg);
+            return ResponseJson.error(msg, null);
+        }
+        return ResponseJson.success(result);
+    }
 }

+ 11 - 1
src/main/java/com/caimei365/order/utils/PayUtil.java

@@ -101,10 +101,20 @@ public class PayUtil {
         return JSON.parseObject(responseBody);
     }
 
-    public static JSONObject decryptDataPublic(String data, String publicKey) throws NoSuchAlgorithmException, InvalidKeySpecException {
+    /**
+     * 公钥解密
+     */
+    public static JSONObject publicKeyDecrypt(String data, String publicKey) throws NoSuchAlgorithmException, InvalidKeySpecException {
         JSONObject result	= null;
         String jsonStr = RSAUtil.publicDecrypt(data.trim(), publicKey);
         result = JSON.parseObject(jsonStr);
         return result;
     }
+
+    /**
+     * 私钥加密
+     */
+    public static String privateKeyEncrypt(JSONObject json, String privateKey) throws NoSuchAlgorithmException, InvalidKeySpecException {
+        return RSAUtil.privateEncrypt(json.toJSONString(), privateKey);
+    }
 }

+ 4 - 0
src/main/resources/mapper/PayOrderMapper.xml

@@ -139,5 +139,9 @@
     <select id="getOrderPromotionsId" resultType="java.lang.Integer">
         SELECT id FROM cm_promotions_order WHERE orderId = #{orderId} LIMIT 1
     </select>
+    <select id="getDbPaySuccessCounter" resultType="java.lang.Integer">
+        SELECT paySuccessCounter FROM cm_order
+        WHERE orderID = #{orderId} AND delFlag = '0'
+    </select>
 
 </mapper>