编辑 | blame | 历史 | 原始文档

支付宝第三方接口API测试文档

测试环境准备

1. 启动支付模块服务

cd dryad-payment
mvn spring-boot:run

服务默认端口:8080(根据实际配置调整)

接口测试

接口信息

  • 请求地址: POST http://localhost:8080/api/pay/alipay/thirdparty/precreate
  • Content-Type: application/json

Postman测试步骤

1. 创建新请求

  • 方法:POST
  • URL:http://localhost:8080/api/pay/alipay/thirdparty/precreate

2. 设置请求头

Content-Type: application/json

3. 设置请求体(Body -> raw -> JSON)

{
  "bizOrderId": "BF20250012-1",
  "amount": 10000,
  "subject": "急救转运服务费",
  "description": "急救转运任务支付",
  "callbackUrl": "https://dsp.966120.com.cn/alipay/pay_notify"
}

4. 发送请求

预期响应:
json { "code": 200, "msg": "操作成功", "data": { "orderId": 1234567890123456789, "transactionId": 9876543210987654321, "status": "PENDING", "qrBase64": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA...", "expireAt": "2025-11-24T18:00:00" } }

cURL测试命令

基本测试

curl --location --request POST 'http://localhost:8080/api/pay/alipay/thirdparty/precreate' \
--header 'Content-Type: application/json' \
--data-raw '{
  "bizOrderId": "BF20250012-1",
  "amount": 10000,
  "subject": "急救转运服务费",
  "description": "急救转运任务支付",
  "callbackUrl": "https://dsp.966120.com.cn/alipay/pay_notify"
}'

测试不同金额

# 测试1元(100分)
curl --location --request POST 'http://localhost:8080/api/pay/alipay/thirdparty/precreate' \
--header 'Content-Type: application/json' \
--data-raw '{
  "bizOrderId": "TEST001",
  "amount": 100,
  "subject": "测试订单",
  "description": "测试1元支付",
  "callbackUrl": "https://dsp.966120.com.cn/alipay/pay_notify"
}'

测试场景

场景1:正常支付流程

  1. 发送支付请求
  2. 获取订单ID和二维码
  3. 前端展示二维码
  4. 用户扫码支付
  5. 接收支付回调通知

场景2:重复订单测试

# 第一次请求
curl --location --request POST 'http://localhost:8080/api/pay/alipay/thirdparty/precreate' \
--header 'Content-Type: application/json' \
--data-raw '{
  "bizOrderId": "DUPLICATE_TEST_001",
  "amount": 100,
  "subject": "重复订单测试",
  "callbackUrl": "https://dsp.966120.com.cn/alipay/pay_notify"
}'

# 第二次请求(相同bizOrderId)- 应该返回相同的订单信息
curl --location --request POST 'http://localhost:8080/api/pay/alipay/thirdparty/precreate' \
--header 'Content-Type: application/json' \
--data-raw '{
  "bizOrderId": "DUPLICATE_TEST_001",
  "amount": 100,
  "subject": "重复订单测试",
  "callbackUrl": "https://dsp.966120.com.cn/alipay/pay_notify"
}'

场景3:参数校验测试

缺少必填参数

curl --location --request POST 'http://localhost:8080/api/pay/alipay/thirdparty/precreate' \
--header 'Content-Type: application/json' \
--data-raw '{
  "bizOrderId": "TEST001",
  "subject": "测试订单"
}'

预期:返回400错误,提示"金额不能为空"

金额为0

curl --location --request POST 'http://localhost:8080/api/pay/alipay/thirdparty/precreate' \
--header 'Content-Type: application/json' \
--data-raw '{
  "bizOrderId": "TEST001",
  "amount": 0,
  "subject": "测试订单",
  "callbackUrl": "https://dsp.966120.com.cn/alipay/pay_notify"
}'

预期:返回400错误,提示"金额必须大于0"

查询订单接口测试

根据订单ID查询

curl --location --request GET 'http://localhost:8080/api/pay/orders/{orderId}'

示例:
bash curl --location --request GET 'http://localhost:8080/api/pay/orders/1234567890123456789'

查询最新交易记录

curl --location --request GET 'http://localhost:8080/api/pay/orders/{orderId}/transactions/latest'

示例:
bash curl --location --request GET 'http://localhost:8080/api/pay/orders/1234567890123456789/transactions/latest'

第三方接口直接测试

如果需要单独测试第三方接口是否可用:

curl --location --request POST 'https://sys.966120.com.cn/alipay_pay_QR_NotifyUrl.php' \
--header 'Cookie: CAMEName=' \
--form 'notify_url="https://dsp.966120.com.cn/alipay/pay_notify"' \
--form 'out_trade_no="T202511240001"' \
--form 'total_fee="10000"' \
--form 'ServiceOrdID="BF20250012-1"'

日志查看

查看服务日志,关注以下关键日志:

# 接口调用
发起支付宝当面付(第三方接口),请求参数: {...}

# 第三方接口调用
调用第三方支付宝当面付接口,订单号: xxx, 金额: xxx分, 业务订单ID: xxx
发送请求到第三方接口: https://sys.966120.com.cn/alipay_pay_QR_NotifyUrl.php

# 第三方接口响应
第三方接口响应,状态码: 200, 响应内容: xxx
第三方支付宝当面付URL生成成功: xxx

# 订单创建成功
支付宝当面付(第三方接口)创建成功,订单ID: xxx, 交易ID: xxx

常见问题排查

1. 第三方接口调用失败

  • 检查网络连接
  • 验证第三方接口是否可访问
  • 检查请求参数格式是否正确

2. 未返回有效的支付URL

  • 检查第三方接口返回内容
  • 调整 parseQrCodeUrl() 方法以适配实际返回格式

3. 二维码生成失败

  • 检查支付URL格式是否正确
  • 验证ZXing库是否正常工作

数据库验证

查询订单表

SELECT * FROM pay_order 
WHERE biz_order_id = 'BF20250012-1' 
ORDER BY created_at DESC;

查询交易表

SELECT * FROM pay_transaction 
WHERE order_id = '订单ID' 
ORDER BY created_at DESC;

性能测试

并发测试(使用Apache Bench)

# 100个请求,10个并发
ab -n 100 -c 10 -p payload.json -T application/json \
http://localhost:8080/api/pay/alipay/thirdparty/precreate

payload.json:
json { "bizOrderId": "PERF_TEST_${RANDOM}", "amount": 100, "subject": "性能测试", "callbackUrl": "https://dsp.966120.com.cn/alipay/pay_notify" }

前端集成示例

HTML + JavaScript

<!DOCTYPE html>
<html>
<head>
    <title>支付宝支付测试</title>
</head>
<body>
    <h1>支付宝支付测试</h1>
    <button onclick="createPayment()">发起支付</button>
    <div id="qrcode" style="margin-top: 20px;"></div>
    
    <script>
        async function createPayment() {
            try {
                const response = await fetch('http://localhost:8080/api/pay/alipay/thirdparty/precreate', {
                    method: 'POST',
                    headers: {
                        'Content-Type': 'application/json'
                    },
                    body: JSON.stringify({
                        bizOrderId: 'WEB_TEST_' + Date.now(),
                        amount: 100,
                        subject: '测试支付',
                        description: '网页测试',
                        callbackUrl: 'https://dsp.966120.com.cn/alipay/pay_notify'
                    })
                });
                
                const result = await response.json();
                
                if (result.code === 200) {
                    // 显示二维码
                    const qrcodeDiv = document.getElementById('qrcode');
                    qrcodeDiv.innerHTML = `
                        <p>订单ID: ${result.data.orderId}</p>
                        <p>交易ID: ${result.data.transactionId}</p>
                        <p>过期时间: ${result.data.expireAt}</p>
                        <img src="${result.data.qrBase64}" alt="支付二维码" />
                    `;
                } else {
                    alert('支付创建失败: ' + result.msg);
                }
            } catch (error) {
                alert('请求失败: ' + error.message);
            }
        }
    </script>
</body>
</html>

环境配置检查清单

  • [ ] 支付模块服务已启动
  • [ ] 数据库连接正常
  • [ ] 第三方接口可访问
  • [ ] 回调地址已配置
  • [ ] 日志级别设置为DEBUG(开发环境)
  • [ ] 网络防火墙允许访问第三方接口

下一步

测试通过后,可以进行以下工作:
1. 集成到主应用中
2. 完善错误处理
3. 添加监控和告警
4. 性能优化
5. 安全加固