🐔 小鸡统一支付网关

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 系统错误

1️⃣ 获取用户OpenID

通过微信网页授权获取用户OpenID(必须在微信浏览器中访问)

GET /api/get_openid.php

请求参数

参数名 类型 必填 说明
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

成功响应(JSON方式)

{
  "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>

⚠️ 注意事项:

  • 必须在微信浏览器中访问
  • 需要在公众平台配置网页授权域名
  • 使用静默授权(snsapi_base),用户无感知

2️⃣ 创建支付订单

创建微信JSAPI支付订单,返回前端所需的支付参数

POST /api/create_order.php

请求参数

参数名 类型 必填 说明
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);
  }
});

3️⃣ 查询订单状态

根据商户订单号查询订单支付状态

GET /api/query_order.php

请求参数

参数名 类型 必填 说明
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 已关闭

4️⃣ 支付回调通知

微信支付成功后的异步回调通知(由微信服务器调用)

POST /api/notify.php

说明:此接口由微信支付服务器调用,开发者无需手动调用。

配置:在管理后台配置notify_url为: http://payv.xiaojiaixhs.com/api/notify.php

验证:接口会自动验证签名和金额,确保支付数据安全。

日志:所有回调记录会保存在 cache/notify_YYYY-MM-DD.log 文件中。

微信回调数据格式(XML)

<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>

处理流程

  1. 接收微信回调数据
  2. 验证签名有效性
  3. 检查支付状态(SUCCESS)
  4. 验证订单金额
  5. 更新订单状态为"支付成功"
  6. 返回"SUCCESS"给微信

💡 完整使用示例

场景:用户在微信浏览器中购买商品

// 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('支付成功!');
      }
    });
}

⚠️ 注意事项

📧 技术支持

如有问题,请访问管理后台查看订单日志

文档更新时间:2024-11-26