CXPAY Logo

CXPAY 开放 API 对接文档

v2.4 Standard EPay Specification

体验在线收银台 商户控制中心
概述

CXPAY 开放 API 接口规范说明

CXPAY 完全兼容行业通用的**易支付 (EPay) 标准接口协议**。无论您的业务系统是基于 WordPress、Discuz、ThinkPHP、Next.js 还是独创微服务,均可无缝接轨发起支付、处理异步通知与查询账单。

极速响应
基于 Webman 协程架构,接口 QPS 吞吐能力达 3000+。
零手续费损耗
智能金额随机浮动去重,精确匹配挂机回调账单。
高风控防封
动态代理 IP 隔离与通道单日熔断保护机制。
身份凭证

获取商户 PID 与 签名密钥 (Key)

登录商户控制中心后,在【API 密钥与回调配置】菜单中可查阅您的专属凭证:

// 请从商户中心获取真实凭据
商户 PID (pid) : YOUR_PID
商户密钥 (key) : YOUR_SECRET_KEY
安全规范

MD5 签名生成算法与规则

  1. 将所有请求参数(排除 signsign_type,以及空值字段)按照 ASCII 码字母升序(a-z)进行排序。
  2. 使用 key1=value1&key2=value2... 拼接成待签名字符串。
  3. 在拼接好的待签名字符串末尾直接追加您的 **商户密钥 (Key)**。
  4. 对最终计算出的字符串进行 32 位小写 MD5 运算,即得到签名 sign 值。
GET / POST /submit.php

发起支付下单 (跳转 H5/PC 收银台)

请求参数说明:

参数名 类型 必填 说明
pid String 商户 PID (例: 1000)
type String 支付通道标识 (alipay 支付宝 / wxpay 微信 / qqpay QQ)
out_trade_no String 商户系统内部唯一订单号 (最长64位)
notify_url String 服务器异步回调通知 URL (必须以 http:// 或 https:// 开头)
return_url String 支付成功后前端同步跳转页面地址
name String 商品名称/说明标题,最长255个字符
money Decimal 订单金额(单位:元,最多8位整数和2位小数)
sign String 32位小写 MD5 签名结果串
sign_type String 签名类型;传入时填写 MD5
异步通知

服务端异步回调通知 (Notify Protocol)

支付订单完成事务结算后,CXPAY 会以 GET 方式向商户的 notify_url 发送带签名参数的异步通知。

// 回调请求数据示例
pid=1000&trade_no=CX20260726170001&out_trade_no=OD98765432&type=alipay&name=VIP会员&money=99.00&trade_status=TRADE_SUCCESS&sign=5d41402abc4b2a76b9719d911017c592&sign_type=MD5
⚠️ 商户收到通知后的响应规范:
商户后端服务处理完订单充值发货逻辑后,**必须在 HTTP Response Body 中纯文本打印输出 `success`**(不区分大小写,且前后不要附加任何 HTML 或空格)。若未返回 `success`,系统将触发自动重试通知策略。
快速集成代码

PHP MD5 签名与下单完整代码

<?php
// 1. 初始化对接参数
$pid = "YOUR_PID";
$key = "YOUR_SECRET_KEY";
$gateWayUrl = "http://localhost:8787/submit.php";

$params = [
    'pid'          => $pid,
    'type'         => 'alipay',
    'out_trade_no' => 'ORDER_' . time(),
    'notify_url'   => 'https://yourdomain.com/notify.php',
    'return_url'   => 'https://yourdomain.com/return.php',
    'name'         => '测试VIP高级卡',
    'money'        => '99.00',
];

// 2. 参数按 ASCII 字典升序排序
ksort($params);

// 3. 拼接待签名字符串
$signStr = "";
foreach ($params as $k => $v) {
    if ($k !== 'sign' && $k !== 'sign_type' && $v !== '') {
        $signStr .= $k . '=' . $v . '&';
    }
}
$signStr = rtrim($signStr, '&') . $key;

// 4. 计算 32 位小写 MD5 签名
$params['sign']      = md5($signStr);
$params['sign_type'] = 'MD5';

// 5. 构建自动跳转 POST 表单调起收银台
echo "<form id='epayform' action='{$gateWayUrl}' method='POST'>";
foreach ($params as $k => $v) {
    echo "<input type='hidden' name='{$k}' value='{$v}' />";
}
echo "</form><script>document.getElementById('epayform').submit();</script>";