فهرست منبع

优化代码,添加接口

liuchengsen 1 ماه پیش
والد
کامیت
0df57045ec

+ 8 - 8
zhijiayun-gateway/src/main/resources/application-prod.yml

@@ -108,19 +108,19 @@ payment:
   # 支付宝(生产环境):将生产证书文件复制到 certs/prod/alipay/ 或通过环境变量覆盖
   # 支付宝(开发/测试环境):将沙箱证书文件复制到 certs/dev/alipay/ 目录下
   alipay:
-    app-id: ${ALIPAY_APP_ID:2021006169624278}
+    app-id: ${ALIPAY_APP_ID:2021005187690877}
     notify-url: ${ALIPAY_NOTIFY_URL:https://priceapi.kailin.com.cn/api/payment/callback/alipay}
     return-url: ${ALIPAY_RETURN_URL:http:https://priceapi.kailin.com.cn/payment/success}
     server-url: ${ALIPAY_SERVER_URL:https://openapi.alipay.com/gateway.do}
     # 公钥模式(优先):配置了 alipay-public-key 即走公钥模式
-    app-private-key: ${ALIPAY_APP_PRIVATE_KEY:MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDPZKA2tBUzhVUOlQkoSaovA6Mg9hTyHuI/lK0eqx5C478MKi4Ve1LMDdatY7jKhY0HVT5vu8VQ+NYyzP6CXTlRhWRCzzWa6BYPzWvR3JAIj+mJN/7jRsWvMx8DFjzR+1VIaO2eA3FHU673pCJwuM8PTgM0t/dW0NuzoYus6/cEUXAKYoM7Bm8qewHjSVIB7bC9Dy1IUwMwbXLtBjb6IPquYfCkXqcgfLSXspxqQ5PTYbWkUxeI24kP+4IcoDo3C8LwOseXD8EHPo1J9N2IbiPD8mfEmTJPo4F+vvlI8oudFcLLVd46YP5gRcmkZkM3F6863vHumXwciFZgVsqqdOSVAgMBAAECggEAbcoxXoQ67Qlam9ud+2vz4eulAiADuqFK2KnWc/PWk0aJruDtgIXGsStqSGQQQXYt0IH6CaB3toPksQQAf/bmDxf0mcGj+RuAAmGXAIQo4797vB6emqaupC8F7dZp4CeTYD/b+tiLsVzFtWd4q//J7ao43EG/eIAcrp2ImcRZAjk+arRv+ZftP98bNwD5H3zPL+M66Y2mVqYSWq5N6ZNTMdrL8rU3s46piKhLQvcjwtiX3EoCju2ubQswDt0Z4K0gQ+TqL6HctIc4mltJlSzxqBSUb3WyifPzhbZWqFPKbuDU+aU5HSJFA6j0YJgFSV8Lg1NYh3BxCu/l1v2UNE0+CQKBgQDta+QAzNdh0P0je/lMPTcqW5X6s0uCA5hCcOGMhVbDxP9fI6sBOnUeNVp0H3wgG1vFRbeZeIqO6qSrdDOG+TfKuG+8lumQCLg0UxpkBvAS0zyTVsHg5N9+qtJQ0lf2jE2BWiP5x/7vqqlLb0x4tD8QIe2itCdRlZTZthhmbDQRXwKBgQDfnzI8uuT+CF3WNlhyvC8APmvKsplxeIlE2Ejn930hQOmSgomwbgSoSkanzZ3yxF9othOc7gDNyz833aWOQrhZ59t3s3QfrkI/ZHlAhfmQ+/+CuxEMvN+RPbkA9a2dLWNMzU9yPDKcVq0JNmlGvrrkpbG4V0Koaf1iMrYkARZKiwKBgAG6YE11MDghCkag116rr2QaiIvrlCgdGJWbNrkMG2aPX4B0xQDcSQ/wOXlQ5VlieZeE+2Idk3yYzpwE238m/zX1g7KusoJ+3cBbvnxt5H9ulClKX1zgrZPBcIhwD33W5ZWEb3CY+Q0Lg/HtnHPgc/kNFiqx/vtECHJRNfpA3VwnAoGBAKTFxtyc0dKlE4+d57pTE0bYt9BZnVrQ+ER0IfRalicEj5bW/OG1j1T5teo7ReD19V9Qmk8NyCXbVy+w8CZM303P3BTtc+lMG6BeRkHW9jdwl6sab8u09/8rPcCJRm4EXaDfv2RrGte7vjCFmTj5nPiRZsxv77vsrTnIKBGLg4NVAoGBAKei4bfOwPsh33KT+e0jMJFlDO3lJ3KvQ47j6kela2LyFvG8rAkwDfqQjdUp2HfrumSQ8+WeJ1fYKpfKEn5XMRAtsCBhCYr0wQyhevG3m1JcuJqioAqo1WljYfUL9PJUFskssAmF9FxrG14mthdbiIlo5H0hYLWTn8aKYv3uvS+e}
-    alipay-public-key: ${ALIPAY_PUBLIC_KEY:MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ZB3OubP0KcNtCVLFsXdkvwMGXnzlLse6lFifFTjo5z3UJQQCRjRgFVgPO5idGiUT4TQaV5IzqDGoP/S4w9l2+oFYw/6Lc5QBAjO441NlD8hf05K8+HEc6qtRAhzimzVyvGPsPFjHxmLaQbjiF0Oqvhez5UKUoFiZcBrqnpy+bB9ym5rMoUUPaTKV/fgdAnS3h4NxIzb2kP/nWMIEWt320yQkkeyIbiWcKmdHwwzgPOIjJm6gDfoN4KQvjuc8CwNXb21YTn4FFqfXMhCSIW5Weh4uS+MN5YL8JeqBaMtit9x1crqnBKKYLxhbrV381O/O9P6qbsI3tPk6ePLFVGxWQIDAQAB}
+    app-private-key: ${ALIPAY_APP_PRIVATE_KEY:}
+    alipay-public-key: ${ALIPAY_PUBLIC_KEY:}
     # 证书模式(备选):未配置 alipay-public-key 时回退到证书模式,从 certs/dev/alipay/ 读取
-    app-private-key-path: ${ALIPAY_APP_PRIVATE_KEY_PATH:certs/prod/alipay/appPrivateKey.txt}
-    app-cert-path: ${ALIPAY_APP_CERT_PATH:certs/prod/alipay/appCertPublicKey_2021005188648051.crt}
-    alipay-cert-path: ${ALIPAY_CERT_PATH:certs/prod/alipay/alipayCertPublicKey_RSA2.crt}
-    alipay-root-cert-path: ${ALIPAY_ROOT_CERT_PATH:certs/prod/alipay/alipayRootCert.crt}
-  # 微信支付(开发/测试环境):将测试商户证书文件复制到 certs/dev/wechat/ 目录下
+    app-private-key-path: ${ALIPAY_APP_PRIVATE_KEY_PATH:certs/dev/alipay/appPrivateKey.txt}
+    app-cert-path: ${ALIPAY_APP_CERT_PATH:certs/dev/alipay/appCertPublicKey_2021005187690877.crt}
+    alipay-cert-path: ${ALIPAY_CERT_PATH:certs/dev/alipay/alipayCertPublicKey_RSA2.crt}
+    alipay-root-cert-path: ${ALIPAY_ROOT_CERT_PATH:certs/dev/alipay/alipayRootCert.crt}
+ # 微信支付(开发/测试环境):将测试商户证书文件复制到 certs/dev/wechat/ 目录下
   wechat:
     app-id: ${WECHAT_PAY_APP_ID:wxf2f254f9981651dd}
     mch-id: ${WECHAT_PAY_MCH_ID:1612111355}

+ 12 - 6
zhijiayun-payment/src/main/java/com/xuekairui/payment/service/PaymentOrderService.java

@@ -11,7 +11,9 @@ import com.github.binarywang.wxpay.service.WxPayService;
 import com.xuekairui.common.BusinessException;
 import com.xuekairui.common.ErrorCode;
 import com.xuekairui.payment.config.PaymentProperties;
-import com.xuekairui.payment.dto.*;
+import com.xuekairui.payment.dto.CreateOrderRequest;
+import com.xuekairui.payment.dto.OrderResponse;
+import com.xuekairui.payment.dto.PaymentResultResponse;
 import com.xuekairui.payment.entity.PaymentOrder;
 import com.xuekairui.payment.entity.PaymentPlan;
 import com.xuekairui.payment.enums.PaymentChannel;
@@ -76,7 +78,7 @@ public class PaymentOrderService {
             qrContent = "MOCK_PAY:" + orderNo;
         } else {
             // 生产模式:调用对应渠道预下单接口获取支付链接
-            PrepayResult prepayResult = createPrepay(channel, orderNo, plan.getPrice(), plan.getPlanName());
+            PrepayResult prepayResult = createPrepay(channel, orderNo, plan.getPrice(), plan.getPlanName(), plan.getDescription());
             qrContent = prepayResult.getQrContent();
             payUrl = prepayResult.getPayUrl();
         }
@@ -282,14 +284,15 @@ public class PaymentOrderService {
      * @param channel  支付渠道
      * @param orderNo  订单号
      * @param amount   金额
-     * @param subject  商品描述
+     * @param subject  商品标题
+     * @param body     商品详细描述
      * @return 预下单结果
      */
     private PrepayResult createPrepay(PaymentChannel channel, String orderNo,
-                                      java.math.BigDecimal amount, String subject) {
+                                      java.math.BigDecimal amount, String subject, String body) {
         return switch (channel) {
             case WECHAT -> createWechatPrepay(orderNo, amount, subject);
-            case ALIPAY -> createAlipayPrepay(orderNo, amount, subject);
+            case ALIPAY -> createAlipayPrepay(orderNo, amount, subject, body);
         };
     }
 
@@ -357,7 +360,7 @@ public class PaymentOrderService {
      *
      * @see <a href="https://opendocs.alipay.com/open/02ekfh">统一收单线下交易预创建</a>
      */
-    private PrepayResult createAlipayPrepay(String orderNo, java.math.BigDecimal amount, String subject) {
+    private PrepayResult createAlipayPrepay(String orderNo, java.math.BigDecimal amount, String subject, String body) {
         PaymentProperties.Alipay al = paymentProperties.getAlipay();
         if (al.getAppId() == null || al.getAppPrivateKey() == null) {
             throw new BusinessException(ErrorCode.PAY_CHANNEL_NOT_CONFIGURED,
@@ -377,6 +380,9 @@ public class PaymentOrderService {
         model.setOutTradeNo(orderNo);
         model.setTotalAmount(amount.toPlainString());
         model.setSubject(subject);
+        if (body != null && !body.isBlank()) {
+            model.setBody(body);
+        }
         model.setProductCode("QR_CODE_OFFLINE");
         model.setTimeoutExpress(paymentProperties.getOrderExpireMinutes() + "m");
         request.setBizModel(model);

+ 3 - 2
zhijiayun-test/src/main/resources/static/invite-test.html

@@ -364,7 +364,8 @@ async function runTest(sectionId, method, path, body, requireAuth, validatorName
             qrBox.style.cssText = 'text-align:center;padding:12px;background:#fff;border-radius:4px;margin-top:8px;';
             rawEl.parentNode.insertBefore(qrBox, rawEl.nextSibling);
         }
-        qrBox.innerHTML = '<img src="' + qrBase64 + '" style="max-width:220px;border:1px solid #eee;border-radius:4px;"><div style="margin-top:6px;font-size:12px;color:#666;">微信扫码付款后回调自动激活,也可手动确认支付测试回调</div>';
+        const channelName = channel === 'WECHAT' ? '微信' : (channel || '相应平台');
+        qrBox.innerHTML = '<img src="' + qrBase64 + '" style="max-width:220px;border:1px solid #eee;border-radius:4px;"><div style="margin-top:6px;font-size:12px;color:#666;">' + channelName + '扫码付款后回调自动激活,也可手动确认支付测试回调</div>';
     } else {
         const oldBox = document.getElementById(sectionId + '-qrcode');
         if (oldBox) oldBox.remove();
@@ -1617,7 +1618,7 @@ function showAlipayModal(qrBase64, amount, orderNo) {
         + '<div class="alipay-modal-amount">' + amountText + '</div>'
         + '<div class="alipay-modal-qr"><img src="' + qrBase64 + '" alt="支付宝付款码"></div>'
         + '<div class="alipay-modal-status" id="alipay-modal-status">轮询支付状态中...</div>'
-        + '<div class="alipay-modal-hint">二维码有效期 15 分钟<br>请尽快完成付款</div>'
+        + '<div class="alipay-modal-hint">二维码有效期 15 分钟<br>请尽快完成付款<br>支付成功后回调自动激活,也可手动点击“确认支付”测试回调</div>'
         + '</div>';
     document.body.appendChild(overlay);
     currentAlipayModal = overlay;