API 接口文档 v1.0
Base URL: http://payv.xiaojiaixhs.com
编码格式: UTF-8
数据格式: JSON
支付方式: 微信JSAPI支付
{
"code": 0, // 0表示成功,非0表示失败
"message": "success",// 响应消息
"data": { ... } // 响应数据(可选)
}
| 错误码 | 说明 |
|---|---|
| 0 | 成功 |
| 1 | 通用错误(具体见message) |
| -1 | 参数错误 |
| -2 | 系统错误 |
通过微信网页授权获取用户OpenID(必须在微信浏览器中访问)
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| redirect | String | 否 | 授权成功后的回调地址(会自动追加openid参数) |
方式1:重定向方式
// 跳转到授权页面,授权后返回指定页面并带上openid
window.location.href = 'https://payv.xiaojiaixhs.com/api/get_openid.php?redirect=' +
encodeURIComponent('https://your-page.com/pay.html');
方式2:直接获取JSON
// 不传redirect参数,授权后返回JSON
GET https://payv.xiaojiaixhs.com/api/get_openid.php
{
"code": 0,
"message": "获取OpenID成功",
"data": {
"openid": "oHaZG6jqqQXeLZTm4DXIzO-zNsJ8",
"access_token": "ACCESS_TOKEN",
"expires_in": 7200
}
}
<!-- pay.html -->
<script>
// 页面加载时检查是否有openid
window.onload = function() {
const urlParams = new URLSearchParams(window.location.search);
const openid = urlParams.get('openid');
if (openid) {
// 已获取到openid,可以进行支付
console.log('用户OpenID:', openid);
} else {
// 跳转获取openid
const currentUrl = window.location.href.split('?')[0];
window.location.href = 'https://payv.xiaojiaixhs.com/api/get_openid.php?redirect=' +
encodeURIComponent(currentUrl);
}
};
</script>
⚠️ 注意事项:
创建微信JSAPI支付订单,返回前端所需的支付参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| openid | String | 是 | 用户的微信OpenID |
| body | String | 是 | 商品描述(最多128字符) |
| total_fee | Integer | 是 | 订单金额(单位:分) |
| out_trade_no | String | 否 | 商户订单号(不传则自动生成) |
| attach | String | 否 | 附加数据,支付回调时原样返回 |
POST /api/create_order.php
Content-Type: application/json
{
"openid": "oUpF8uMuAJO_M2pxb1Q9zNjWeS6o",
"body": "测试商品-iPhone 15 Pro",
"total_fee": 999900,
"attach": "order_data_123"
}
{
"code": 0,
"message": "订单创建成功",
"data": {
"out_trade_no": "20241126153022123456",
"prepay_id": "wx261530229abcdef1234567890",
"jsapi_params": {
"appId": "wx3760xxxxxxxxxxxx",
"timeStamp": "1732606222",
"nonceStr": "abc123def456",
"package": "prepay_id=wx261530229abcdef1234567890",
"signType": "MD5",
"paySign": "C380BEC2BFD727A4B6845133519F3AD6"
},
"timestamp": 1732606222
}
}
// 使用微信JSSDK发起支付
wx.chooseWXPay({
timestamp: data.jsapi_params.timeStamp,
nonceStr: data.jsapi_params.nonceStr,
package: data.jsapi_params.package,
signType: data.jsapi_params.signType,
paySign: data.jsapi_params.paySign,
success: function(res) {
console.log('支付成功', res);
},
fail: function(res) {
console.log('支付失败', res);
}
});
根据商户订单号查询订单支付状态
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| out_trade_no | String | 是 | 商户订单号 |
GET /api/query_order.php?out_trade_no=20241126153022123456
{
"code": 0,
"message": "查询成功",
"data": {
"out_trade_no": "20241126153022123456",
"transaction_id": "4200001234567890",
"openid": "oUpF8uMuAJO_M2pxb1Q9zNjWeS6o",
"body": "测试商品-iPhone 15 Pro",
"total_fee": 999900,
"total_fee_yuan": "9999.00",
"status": "success",
"status_text": "支付成功",
"pay_time": "2024-11-26 15:32:10",
"created_at": "2024-11-26 15:30:22"
}
}
| 状态值 | 说明 |
|---|---|
| pending | 待支付 |
| paying | 支付中 |
| success | 支付成功 |
| closed | 已关闭 |
微信支付成功后的异步回调通知(由微信服务器调用)
说明:此接口由微信支付服务器调用,开发者无需手动调用。
配置:在管理后台配置notify_url为: http://payv.xiaojiaixhs.com/api/notify.php
验证:接口会自动验证签名和金额,确保支付数据安全。
日志:所有回调记录会保存在 cache/notify_YYYY-MM-DD.log 文件中。
<xml>
<appid><![CDATA[wx3760xxxxxxxxxxxx]]></appid>
<mch_id><![CDATA[1234567890]]></mch_id>
<nonce_str><![CDATA[abc123]]></nonce_str>
<sign><![CDATA[SIGN]]></sign>
<result_code><![CDATA[SUCCESS]]></result_code>
<return_code><![CDATA[SUCCESS]]></return_code>
<out_trade_no><![CDATA[20241126153022123456]]></out_trade_no>
<transaction_id><![CDATA[4200001234567890]]></transaction_id>
<total_fee>999900</total_fee>
<time_end><![CDATA[20241126153210]]></time_end>
</xml>
// Step 1: 获取用户OpenID
const urlParams = new URLSearchParams(window.location.search);
let userOpenid = urlParams.get('openid');
if (!userOpenid) {
// 跳转获取openid
const currentUrl = window.location.href.split('?')[0];
window.location.href = 'https://payv.xiaojiaixhs.com/api/get_openid.php?redirect=' +
encodeURIComponent(currentUrl);
// 授权后会带openid参数返回
}
// Step 2: 创建订单
fetch('http://payv.xiaojiaixhs.com/api/create_order.php', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
openid: userOpenId,
body: '商品名称',
total_fee: 100 // 1元 = 100分
})
})
.then(res => res.json())
.then(data => {
if (data.code === 0) {
// Step 3: 调起微信支付
const params = data.data.jsapi_params;
wx.chooseWXPay({
timestamp: params.timeStamp,
nonceStr: params.nonceStr,
package: params.package,
signType: params.signType,
paySign: params.paySign,
success: function() {
// Step 4: 支付成功,查询订单确认
checkOrderStatus(data.data.out_trade_no);
}
});
}
});
// 查询订单状态
function checkOrderStatus(orderNo) {
fetch(`http://payv.xiaojiaixhs.com/api/query_order.php?out_trade_no=${orderNo}`)
.then(res => res.json())
.then(data => {
if (data.code === 0 && data.data.status === 'success') {
alert('支付成功!');
}
});
}