| 项目 | 说明 |
|---|---|
| 提交数据格式 | application/x-www-form-urlencoded |
| 返回数据格式 | JSON |
| 字符编码 | UTF-8 |
| 签名算法 | SHA256WithRSA |
timestamp 入参(±300 秒校验)。V1 使用 MD5 签名,走 submit.php / mapi.php。
登录商户中心 → API 信息 → 点击【生成商户 RSA 密钥对】。 私钥只显示一次,对接时只用商户私钥签名与平台公钥验签。
sign、sign_type,按键名 ASCII 码升序排序。k1=v1&k2=v2 形式,得到待签名字符串。sign。sign 做 SHA256WithRSA 验签。function epay_sign(array $params, string $privateKey): string { unset($params['sign'], $params['sign_type']); $params = array_filter($params, fn($v) => $v !== '' && $v !== null); ksort($params, SORT_STRING); $str = urldecode(http_build_query($params)); openssl_sign($str, $sign, $privateKey, OPENSSL_ALGO_SHA256); return base64_encode($sign); }
-----BEGIN PUBLIC KEY----- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvXslqtr8QH/6jw06m9gI votIXkHonRPD4ujCZuzS7yiKEvYq03DDDGXeVMZPTP6Ny66v4sG514ps3Hw0441s SYB1DAmR9eUz8nTOmGANOXsmgcu9KvIKKY7e4O8uxvUxXVQuHq50m93WXtUsMwtM FIBW0wPpCfREJQEdwidJ+/Xk9za0Oe9sFVihkLtDab8L/dSylbpLL/8UbZp44rUs eUSQH5vekfu7MrhnDmGYjXrihsvloJaYjDrlVwnrHkqrXAL38/L5iZzt1fj/nEcj hcqQ7IRkOPrOw7fGyuqqjBvI2uadD/bxFT5hoX7lrWmohoIfPez2V6ghaWpJNmPS UwIDAQAB -----END PUBLIC KEY-----
| 调用值 | 描述 |
|---|---|
alipay | 支付宝 |
wxpay | 微信支付 |
qqpay | QQ钱包 |
bank | 网银支付 |
jdpay | 京东支付 |
paypal | PayPal |
usdt | 泰达币 USDT |
stripepay | 银行卡/钱包 |
stripealipay | Stripe 支付宝 |
stripewxpay | Stripe 微信支付 |
实际可用方式以商户所属用户组启用的支付方式为准。
请求地址:https://shanhe.site/api/pay/submit
用于用户前台直接发起支付,可用 form 表单跳转或拼接 URL 跳转。
| 字段名 | 变量名 | 必填 | 类型 | 示例值 | 描述 |
|---|---|---|---|---|---|
| 商户ID | pid | 是 | Int | 1001 | |
| 支付方式 | type | 否 | String | alipay | 不传则跳转收银台 |
| 商户订单号 | out_trade_no | 是 | String | 20160806151343349 | |
| 异步通知地址 | notify_url | 是 | String | http://pay.com/notify.php | |
| 跳转通知地址 | return_url | 是 | String | http://pay.com/return.php | |
| 商品名称 | name | 是 | String | VIP会员 | 超过 127 字节自动截断 |
| 商品金额 | money | 是 | String | 1.00 | 单位元,两位小数 |
| 业务扩展参数 | param | 否 | String | 支付后原样返回 | |
| 自定义通道ID | channel_id | 否 | Int | 对应进件商户列表 ID | |
| 当前时间戳 | timestamp | 是 | String | 1721206072 | 10 位整数,单位秒 |
| 签名字符串 | sign | 是 | String | 参考签名规则 | |
| 签名类型 | sign_type | 是 | String | RSA | 固定 RSA |
请求地址:https://shanhe.site/api/pay/create
服务器后端调用,返回支付链接与二维码内容。
| 字段名 | 变量名 | 必填 | 类型 | 示例值 | 描述 |
|---|---|---|---|---|---|
| 商户ID | pid | 是 | Int | 1001 | |
| 接口类型 | method | 是 | String | web | web / jump / api |
| 设备类型 | device | 否 | String | pc | pc / mobile / qq / wechat / alipay |
| 支付方式 | type | 特殊 | String | alipay | 见支付方式列表 |
| 商户订单号 | out_trade_no | 是 | String | 20160806151343349 | |
| 异步通知地址 | notify_url | 是 | String | http://pay.com/notify.php | |
| 跳转通知地址 | return_url | 是 | String | http://pay.com/return.php | |
| 商品名称 | name | 是 | String | VIP会员 | |
| 商品金额 | money | 是 | String | 1.00 | |
| 用户IP | clientip | 是 | String | 192.168.1.100 | |
| 业务扩展参数 | param | 否 | String | ||
| 当前时间戳 | timestamp | 是 | String | 1721206072 | |
| 签名字符串 | sign | 是 | String | ||
| 签名类型 | sign_type | 是 | String | RSA |
| 字段名 | 变量名 | 类型 | 描述 |
|---|---|---|---|
| 返回状态码 | code | Int | 0 表示成功 |
| 错误信息 | msg | String | 失败原因 |
| 平台订单号 | trade_no | String | |
| 商户订单号 | out_trade_no | String | |
| 支付链接 | payurl | String | 直接跳转的收银台地址 |
| 二维码内容 | qrcode | String | 可生成二维码 |
| 小程序路径 | urlscheme | String | App / 小程序唤起链接 |
| 时间戳 | timestamp | String | |
| 签名 | sign | String | 平台私钥签名 |
{
"code": 0,
"msg": "success",
"trade_no": "20261108123456789012",
"out_trade_no": "ORDER1730000000",
"payurl": "https://shanhe.site/pay.php?trade_no=20261108123456789012",
"qrcode": "https://shanhe.site/pay.php?trade_no=20261108123456789012",
"timestamp": "1721206072",
"sign": "Base64...",
"sign_type": "RSA"
}
请求地址:https://shanhe.site/api/pay/query
| 字段名 | 变量名 | 必填 | 类型 | 描述 |
|---|---|---|---|---|
| 商户ID | pid | 是 | Int | |
| 平台订单号 | trade_no | 二选一 | String | 与 out_trade_no 二选一,都传以 trade_no 为准 |
| 商户订单号 | out_trade_no | 二选一 | String | |
| 当前时间戳 | timestamp | 是 | String | |
| 签名字符串 | sign | 是 | String | |
| 签名类型 | sign_type | 是 | String | RSA |
| 字段名 | 变量名 | 类型 | 描述 |
|---|---|---|---|
| 返回状态码 | code | Int | 0 成功 |
| 平台订单号 | trade_no | String | |
| 商户订单号 | out_trade_no | String | |
| 接口订单号 | api_trade_no | String | 上游通道返回单号 |
| 支付方式 | type | String | |
| 支付状态 | status | Int | 0未支付 1已支付 2已退款 3已冻结 4预授权 |
| 订单金额 | money | String | |
| 已退款金额 | refundmoney | String | 仅部分退款返回 |
| 创建时间 | addtime | String | |
| 完成时间 | endtime | String | 仅完成返回 |
| 支付用户标识 | buyer | String | 一般为 openid |
| 业务扩展参数 | param | String |
请求地址:https://shanhe.site/api/pay/refund
| 字段名 | 变量名 | 必填 | 类型 | 描述 |
|---|---|---|---|---|
| 商户ID | pid | 是 | Int | |
| 平台订单号 | trade_no | 二选一 | String | |
| 商户订单号 | out_trade_no | 二选一 | String | |
| 退款金额 | money | 是 | String | 不能大于可退金额 |
| 当前时间戳 | timestamp | 是 | String | |
| 签名字符串 | sign | 是 | String | |
| 签名类型 | sign_type | 是 | String | RSA |
| 字段名 | 变量名 | 类型 | 描述 |
|---|---|---|---|
| 返回状态码 | code | Int | 0 成功 |
| 平台订单号 | trade_no | String | |
| 退款金额 | refundmoney | String | 累计已退款金额 |
| 订单状态 | status | Int | 1 部分退款,2 全额退款 |
请求地址:https://shanhe.site/api/pay/refundquery
参数同订单查询,返回 money、refundmoney、status。
请求地址:https://shanhe.site/api/pay/close
参数:pid、trade_no 或 out_trade_no、timestamp、sign、sign_type。
已支付订单不可关闭。
通知类型:服务器异步通知(notify_url)、页面跳转通知(return_url),请求方式 GET。
| 字段名 | 变量名 | 类型 | 描述 |
|---|---|---|---|
| 商户ID | pid | Int | |
| 平台订单号 | trade_no | String | |
| 商户订单号 | out_trade_no | String | |
| 接口订单号 | api_trade_no | String | |
| 支付方式 | type | String | |
| 交易状态 | trade_status | String | 固定 TRADE_SUCCESS |
| 创建时间 | addtime | String | |
| 完成时间 | endtime | String | |
| 商品名称 | name | String | |
| 商品金额 | money | String | |
| 业务扩展参数 | param | String | |
| 支付用户标识 | buyer | String | |
| 当前时间戳 | timestamp | String | |
| 签名字符串 | sign | String | |
| 签名类型 | sign_type | String | RSA |
sign 并判断 trade_status === 'TRADE_SUCCESS';
处理完成后返回纯文本 success(不能带任何 HTML 或 JSON);平台可能增加扩展字段,验签需兼容。
请求地址:https://shanhe.site/api/merchant/info
参数:pid、timestamp、sign、sign_type。
| 字段名 | 变量名 | 类型 | 描述 |
|---|---|---|---|
| 商户ID | pid | Int | |
| 商户状态 | status | Int | 0 封禁,1 正常,2 待审核 |
| 支付状态 | pay_status | Int | 0 关闭,1 开启 |
| 结算状态 | settle_status | Int | 0 关闭,1 开启 |
| 商户余额 | money | String | 单位元 |
| 结算方式 | settle_type | Int | 1支付宝 2微信 3QQ 4银行卡 |
| 结算账户 | settle_account | String | |
| 结算姓名 | settle_name | String | |
| 订单总数 | order_num | Int | |
| 今日订单数 | order_num_today | Int | |
| 昨日订单数 | order_num_lastday | Int | |
| 今日收入 | order_money_today | String | |
| 昨日收入 | order_money_lastday | String |
请求地址:https://shanhe.site/api/merchant/orders
| 字段名 | 变量名 | 必填 | 类型 | 描述 |
|---|---|---|---|---|
| 商户ID | pid | 是 | Int | |
| 查询偏移 | offset | 是 | Int | 从 0 开始 |
| 每页条数 | limit | 是 | Int | 最大 50 |
| 过滤状态 | status | 否 | Int | 0 未支付,1 已支付 |
| 当前时间戳 | timestamp | 是 | String | |
| 签名字符串 | sign | 是 | String | |
| 签名类型 | sign_type | 是 | String | RSA |
返回 data 数组,元素结构同订单查询。
请求地址:https://shanhe.site/api/transfer/submit
| 字段名 | 变量名 | 必填 | 类型 | 描述 |
|---|---|---|---|---|
| 商户ID | pid | 是 | Int | |
| 商户转账单号 | out_trade_no | 是 | String | 唯一 |
| 转账金额 | money | 是 | String | 不能超过可用余额 |
| 收款方式 | type | 是 | Int | 1支付宝 2微信 3QQ 4银行卡 |
| 收款账号 | account | 是 | String | |
| 收款姓名 | name | 是 | String | |
| 转账备注 | remark | 否 | String | |
| 当前时间戳 | timestamp | 是 | String | |
| 签名字符串 | sign | 是 | String | |
| 签名类型 | sign_type | 是 | String | RSA |
请求地址:https://shanhe.site/api/transfer/query
参数:pid、trade_no 或 out_trade_no、timestamp、sign、sign_type。
返回 status:0 处理中,1 成功,2 失败。
请求地址:https://shanhe.site/api/transfer/balance
返回 money(可用余额)、freeze_money(冻结金额)、settle_status。
| 状态值 | 描述 |
|---|---|
0 | 未支付 |
1 | 已支付 |
2 | 已退款 |
3 | 已冻结 |
4 | 预授权 |
| 状态值 | 描述 |
|---|---|
1 | 支付宝 |
2 | 微信 |
3 | QQ钱包 |
4 | 银行卡 |
| 调用值 | 描述 |
|---|---|
pc | 电脑端 |
mobile | 手机端 |
qq | 手机 QQ |
wechat | 微信内 |
alipay | 支付宝内 |
| 调用值 | 描述 |
|---|---|
web | 通用网页支付 |
jump | 跳转支付 |
api | API 接口支付 |