cd dryad-payment
mvn spring-boot:run
服务默认端口:8080(根据实际配置调整)
POST http://localhost:8080/api/pay/alipay/thirdparty/precreateapplication/jsonPOSThttp://localhost:8080/api/pay/alipay/thirdparty/precreateContent-Type: application/json
{
"bizOrderId": "BF20250012-1",
"amount": 10000,
"subject": "急救转运服务费",
"description": "急救转运任务支付",
"callbackUrl": "https://dsp.966120.com.cn/alipay/pay_notify"
}
预期响应:json { "code": 200, "msg": "操作成功", "data": { "orderId": 1234567890123456789, "transactionId": 9876543210987654321, "status": "PENDING", "qrBase64": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA...", "expireAt": "2025-11-24T18:00:00" } }
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"
}'
# 第一次请求
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"
}'
curl --location --request POST 'http://localhost:8080/api/pay/alipay/thirdparty/precreate' \
--header 'Content-Type: application/json' \
--data-raw '{
"bizOrderId": "TEST001",
"subject": "测试订单"
}'
预期:返回400错误,提示"金额不能为空"
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"
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
parseQrCodeUrl() 方法以适配实际返回格式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;
# 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" }
<!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>
测试通过后,可以进行以下工作:
1. 集成到主应用中
2. 完善错误处理
3. 添加监控和告警
4. 性能优化
5. 安全加固