💵 页面跳转支付

POST http://登录后接口配置里的域名/submit.php

接口描述

POST数据:pid={商户ID}&type={支付方式}&out_trade_no={商户订单号}&notify_url={服务器异步通知地址}&return_url={页面跳转通知地址}&name={商品名称}&money={金额}&sitename={网站名称}&sign={签名字符串}&sign_type=MD5

请求参数

字段名
参数名
必填
类型
示例值
描述
商户ID
pid
必填
Int
1000
商户ID
支付方式
type
必填
String
alipay
支付方式:alipay:支付宝,qqpay:QQ钱包,wxpay:微信支付,rmbpay:数字人民币,usdt:USDT
商户订单号
out_trade_no
必填
String
20160806151343349
商户订单号
异步通知地址
notify_url
必填
String
http://站点域名/notify_url.php
服务器异步通知地址
跳转通知地址
return_url
必填
String
http://站点域名/return_url.php
页面跳转通知地址
商品名称
name
必填
String
一个奥利奥
商品名称
商品金额
money
必填
String
1.00
商品金额
签名字符串
sign
必填
String
202cb962ac59075b964b07152d234b70
签名字符串,签名算法与支付宝签名算法相同
签名类型
sign_type
必填
String
MD5
默认为MD5

说明

发起支付请求网站名称参数可以为空,其他为必填项
签名算法与支付宝签名算法相同

示例

<?php
\$zzcode_id="1000";//这里改成您的商户id
\$zzcode_key="AMEQ6D96SADsE545413419MuS"; //这是您的KEY
//构造要请求的参数数组,无需改动
\$parameter = array(
    "pid" => \$zzcode_id,//你的商户ID
    "type" => 'alipay',//alipay支付宝支付、wxpay微信支付
    "notify_url" => '',//异步通知地址
    "return_url" => '',//页面返回地址
    "out_trade_no" => '20200530203427207',//订单号
    "name" => 'VIP会员',//商品名称
    "money" => 1.00,//支付金额
    "sitename" => '$title',//网站名称
);
ksort(\$parameter); //重新排序\$parameter数组
reset(\$parameter); //内部指针指向数组中的第一个元素
\$sign = ''; //初始化需要签名的字符为空
\$urls = ''; //初始化URL参数为空
foreach (\$parameter AS \$key => \$val) { //遍历需要传递的参数
    if (\$val == '' || \$key == 'sign' || \$key == "sign_type" ) continue; //跳过这些不参数签名
    if (\$sign != '') { //后面追加&拼接URL
        \$sign .= "&";
        \$urls .= "&";
    }
    \$sign .= "\$key=\$val"; //拼接为url参数形式
    \$urls .= "\$key=" . urlencode(\$val); //拼接为url参数形式并URL编码参数值
}
\$query = \$urls . '&sign=' . md5(\$sign .\$zzcode_key) . '&sign_type=MD5'; //创建订单所需的参数
\$url = "http://域名/submit.php?{\$query}"; //支付页面
header("location:{\$url}"); //跳转到支付页面
?>

🛡️ V免签接口支付

POST/GET http://登录后接口配置里的域名/createOrder

接口描述

与「页面跳转支付」(易支付协议) 并存,供习惯 V免签接口格式的商户对接,通讯密钥与易支付共用。
参数:payId={商户订单号}&param={透传参数}&type={支付方式}&price={金额}&notifyUrl={异步通知地址}&returnUrl={跳转地址}&sign={签名}

请求参数

字段名
参数名
必填
类型
示例值
描述
商户订单号
payId
必填
String
20260619001
商户订单号(唯一)
透传参数
param
选填
String
vip123
自定义透传,回调原样回传
支付方式
type
必填
Int
1
1微信 2支付宝 3QQ 4数字人民币 5USDT
订单金额
price
必填
String
1.00
订单金额(元)
异步通知地址
notifyUrl
必填
String
http://站点域名/notify.php
服务器异步通知地址
页面跳转地址
returnUrl
选填
String
http://站点域名/return.php
支付完成同步跳转地址
签名字符串
sign
必填
String
202cb962ac59075b964b07152d234b70
MD5签名,见签名算法
跳转收银页
isHtml
选填
Int
0
1=跳转本站收银页,0=返回JSON

签名算法

待签名参数按 固定顺序 payId → param → type → price 拼接,末尾追加通讯密钥,取 MD5 小写:

sign = md5(payId . param . type . price . 密钥)

注意:与易支付的「字典序排序」不同,V免签为固定顺序拼接,param 为空时按空串参与。

异步通知与同步跳转

收款后系统以 GET 请求 notifyUrl,参数:payId / param / type / price / reallyPrice / sign,验签:

sign = md5(payId . param . type . price . reallyPrice . 密钥)

商户处理成功须输出纯字符串 success。同步跳转 returnUrl 参数与异步通知一致。成功判定与易支付相同:响应包含 success 即视为成功。

示例

<?php
\$key = '您的通讯密钥'; // 同易支付密钥
\$param = array(
    "payId"     => 'ORDER'.time(),     //商户订单号
    "param"     => 'vip123',           //透传参数
    "type"      => 1,                  //1微信 2支付宝 3QQ 4数字人民币 5USDT
    "price"     => '1.00',             //金额
    "notifyUrl" => 'http://商户/notify.php',
    "returnUrl" => 'http://商户/return.php',
);
//固定顺序签名(注意与易支付字典序不同)
\$param["sign"] = md5(\$param["payId"].\$param["param"].\$param["type"].\$param["price"].\$key);
\$query = http_build_query(\$param);
\$resp = file_get_contents("http://域名/createOrder?{\$query}");
\$data = json_decode(\$resp, true);
if (\$data["code"] === 1) {
    //用 \$data["data"]["payUrl"] 渲染收款码
}
?>

🐯 虎皮椒接口支付

POST http://接口配置里的域名/payment/do.html

接口描述

对齐虎皮椒官方接口格式,供习惯虎皮椒 SDK 的商户对接;标准支付(do.html,跳转收银台)与直接支付(easypay.html,JSON返回收款码)两个入口并存。
商户ID/通讯密钥与易支付共用。参数:app_id={商户ID}&trade_order_id={商户订单号}&total_fee={金额}&order_type={WECHAT|ALIPAY}&hash={签名}

请求参数

字段名
参数名
必填
类型
示例值
描述
商户ID
app_id
必填
Int
1000
商户ID(同易支付 pid)
商户订单号
trade_order_id
必填
String
20260821001
商户订单号(唯一)
订单金额
total_fee
必填
String
1.00
订单金额(元,两位小数)
支付方式
order_type
必填
String
WECHAT
WECHAT微信 / ALIPAY 支付宝
商品名称
title
选填
String
VIP会员
缺省时用商户订单号充当
异步通知地址
notify_url
必填
String
http://站点域名/notify.php
服务器异步通知地址
同步跳转地址
return_url
选填
String
http://站点域名/return.php
支付完成同步跳转地址(仅标准支付)
透传参数
attach
选填
String
vip123
自定义透传,回调原样回传
签名字符串
hash
必填
String
202cb962ac59075b964b07152d234b70
MD5字典序签名,见签名算法

签名算法

参数按 key ASCII 升序 拼接为 a=1&b=2…(滤空值与 hash 自身),末尾追加通讯密钥,取 MD5 小写:

hash = md5(app_id=1000&attach=vip123&…&total_fee=1.00 + 密钥)

与易支付「字典序排序」规则一致,仅排除字段为 hash。

直接支付返回与异步通知

直接支付(easypay.html)返回 JSON:code=1 时 url/qr 为收款二维码内容(同值),cloud_order_id 为平台订单号。

异步通知:收款后系统以 POST JSON 请求 notify_url:

{"trans_id":"平台订单号","out_trade_no":"商户订单号","total_fee":"订单金额","order_status":"OD","transaction_id":"平台订单号","timestamp":时间戳,"attach":"透传","hash":"签名"}

商户按同样算法验证 hash(滤 hash 自身),处理成功须响应包含 success。order_status=OD 表示已支付。

示例

<?php
\$app_id = '1000';          //商户ID
\$key     = '您的通讯密钥';   //同易支付密钥
\$param = array(
    "app_id"         => \$app_id,
    "trade_order_id" => 'XH'.time(),   //商户订单号
    "total_fee"      => '1.00',        //金额
    "order_type"     => 'WECHAT',      //WECHAT微信 ALIPAY支付宝
    "title"          => 'VIP会员',      //商品名称
    "notify_url"     => 'http://商户/notify.php',
    "return_url"     => 'http://商户/return.php',
    "attach"         => 'vip123',      //透传
    "nonce_str"      => mt_rand(100000,999999),
);
ksort(\$param); //按 key ASCII 升序
\$sign = '';
foreach (\$param as \$k => \$v) {
    if (\$v === '' || \$k == 'hash') continue;
    \$sign .= (\$sign == '' ? '' : '&') . \$k . '=' . \$v;
}
\$param['hash'] = md5(\$sign . \$key);
//标准支付:表单提交到 /payment/do.html 后跳转收银台
\$query = http_build_query(\$param);
header("location:http://域名/payment/do.html?{\$query}");
//直接支付:POST 到 /payment/easypay.html,取返回 JSON 的 url/qr 渲染收款码
?>

💠 码支付接口支付

POST/GET http://接口配置里的域名/creat_order/

接口描述

对齐码支付(CodePay)官方接口格式,验签通过后跳转本站收银台完成收款。商户ID/通讯密钥与易支付共用。
参数:id={商户ID}&pay_id={商户订单号}&type={1|2|3}&price={金额}&sign={签名}&sign_type=MD5

请求参数

字段名
参数名
必填
类型
示例值
描述
商户ID
id
必填
Int
1000
商户ID(同易支付 pid)
商户订单号
pay_id
必填
String
20260821001
商户订单号(唯一)
支付方式
type
必填
Int
3
1支付宝 / 2QQ / 3微信(注意顺序与其他协议不同)
订单金额
price
必填
String
1.00
订单金额(元,两位小数)
透传参数
param
选填
String
vip123
自定义透传,回调原样回传
异步通知地址
notify_url
必填
String
http://站点域名/notify.php
服务器异步通知地址
同步跳转地址
return_url
选填
String
http://站点域名/return.php
支付完成同步跳转地址
签名字符串
sign
必填
String
202cb962ac59075b964b07152d234b70
MD5字典序签名,规则同易支付

签名算法

与易支付完全一致:参数按 key ASCII 升序 拼接 a=1&b=2…(滤空值与 sign/sign_type),末尾追加通讯密钥取 MD5 小写:

sign = md5(id=1000¬ify_url=…&pay_id=…&price=1.00&type=3 + 密钥)

异步通知

收款后系统以 GET 请求 notify_url,参数:money(实付金额) / price(订单金额) / pay_id / param / type(1|2|3,与下单一致) / pay_no(平台订单号) / out_time(时间戳) / status(1=已支付) / sign / sign_type=MD5

商户按同样算法验证 sign,处理成功须响应包含 success。

示例

<?php
\$id  = '1000';            //商户ID
\$key = '您的通讯密钥';      //同易支付密钥
\$param = array(
    "id"         => \$id,
    "pay_id"     => 'CP'.time(),  //商户订单号
    "type"       => 3,            //1支付宝 2QQ 3微信
    "price"      => '1.00',       //金额
    "param"      => 'vip123',     //透传
    "notify_url" => 'http://商户/notify.php',
    "return_url" => 'http://商户/return.php',
);
ksort(\$param); //按 key ASCII 升序
\$sign = '';
foreach (\$param as \$k => \$v) {
    if (\$v === '' || \$k == 'sign' || \$k == 'sign_type') continue;
    \$sign .= (\$sign == '' ? '' : '&') . \$k . '=' . \$v;
}
\$param['sign'] = md5(\$sign . \$key);
\$param['sign_type'] = 'MD5';
\$query = http_build_query(\$param);
header("location:http://域名/creat_order/?{\$query}"); //跳转收银台
?>

🔐 易支付V2接口(RSA双向签名)

POST http://接口配置里的域名/api/pay/create

接口描述

官方易支付V2协议:在易支付参数体系上把 MD5 签名升级为 RSA 双向签名(签名算法 SHA256WithRSA),参数命名与易支付一致(pid/type/out_trade_no/name/money 等),支持表单或 JSON 两种提交方式。三个入口:
页面支付 /api/pay/submit(表单提交,跳转支付页)、API下单 /api/pay/create(返回 pay_info 支付地址)、订单查询 /api/pay/query。
密钥全部由平台后台「支付配置」页自动生成:应用私钥(商户签请求)、平台公钥(商户验平台响应与回调),直接复制即可对接;要求填裸 base64(去 PEM 头尾)的对接系统请复制裸 base64 形态。

请求参数(下单)

字段名
参数名
必填
类型
示例值
描述
商户ID
pid
必填
Int
1000
商户ID(同易支付)
支付方式
type
必填
String
wxpay
wxpay微信 / alipay支付宝 / qqpay QQ / rmbpay数字人民币 / usdt USDT
商户订单号
out_trade_no
必填
String
20260821001
商户订单号(唯一)
异步通知地址
notify_url
必填
String
http://站点域名/notify.php
服务器异步通知地址
同步跳转地址
return_url
选填
String
http://站点域名/return.php
页面跳转通知地址
商品名称/金额
name / money
必填
String
VIP会员 / 1.00
商品名称、订单金额(元,两位小数)
透传参数
sitename
选填
String
vip123
自定义透传,回调原样回传
客户端IP/设备/方式/时间戳
clientip / device / method / timestamp
选填
String
192.168.1.1 / pc / jump / 1725168000
官方V2惯用参数,参与签名但不参与业务
签名/签名类型
sign / sign_type
必填
String
base64…/RSA2
RSA 签名与 RSA2/RSA 签名类型;声明与实际算法不一致时平台自动兼容

签名算法(双向)

商户请求签名:参数按 key ASCII 升序 拼接 a=1&b=2…(滤空值与 sign/sign_type),用平台公示的应用私钥 RSA 签名后 base64:

sign = base64( RSA_sign(参数字典序串, 应用私钥, SHA256) )

平台响应/回调验签:响应 data 与异步通知均携带 sign,用平台公示的平台公钥验签(RSA2=SHA256withRSA,RSA=SHA1withRSA,以平台配置为准)。

响应与异步通知

API下单(/api/pay/create)按官方V2约定返回 JSON:{"code":0,"msg":"成功","pay_info":"支付跳转地址","timestamp":…,"sign":"…","sign_type":"RSA2"},code=0 为成功(code 非 0 时 msg 为失败原因),成功响应携带平台签名,用平台公钥验签。

订单查询(/api/pay/query,参数 pid + trade_no/out_trade_no 二选一 + sign)返回 status:1已支付 / 0未支付(含已过期),响应同样携带平台签名。

异步通知:收款后系统以 POST JSON 请求 notify_url,字段与易支付 MD5 回调一致(pid/type/out_trade_no/trade_no/name/money/trade_status=TRADE_SUCCESS/timestamp)并携带 RSA sign;验签成功须响应包含 success。

示例

<?php
\$pid = '1000';                          //商户ID
\$appPrivKey = '平台公示的应用私钥(裸base64,去PEM头尾)'; //后台支付配置页复制
\$param = array(
    "pid"          => \$pid,
    "type"         => 'wxpay',
    "out_trade_no" => 'V2'.time(),
    "notify_url"   => 'http://商户/notify.php',
    "return_url"   => 'http://商户/return.php',
    "name"         => 'VIP会员',
    "money"        => '1.00',
    "timestamp"    => time().'',
);
//1. 参数按 key ASCII 升序拼 a=1&b=2…(滤空值与 sign/sign_type)
ksort(\$param);
\$signStr = '';
foreach (\$param as \$k => \$v) {
    if (\$v === '' || \$k == 'sign' || \$k == 'sign_type') continue;
    \$signStr .= (\$signStr == '' ? '' : '&') . \$k . '=' . \$v;
}
//2. 应用私钥 RSA2 签名(base64,官方SDK为SHA256withRSA)
\$pem = "-----BEGIN PRIVATE KEY-----\n" . wordwrap(\$appPrivKey, 64, "\n", true) . "\n-----END PRIVATE KEY-----";
openssl_sign(\$signStr, \$signature, \$pem, OPENSSL_ALGO_SHA256);
\$param['sign'] = base64_encode(\$signature);
\$param['sign_type'] = 'RSA2';
//3. 表单方式提交下单(官方协议提交格式 application/x-www-form-urlencoded)
\$ch = curl_init('http://域名/api/pay/create');
curl_setopt_array(\$ch, [CURLOPT_POST => true,
    CURLOPT_POSTFIELDS => http_build_query(\$param),
    CURLOPT_RETURNTRANSFER => true]);
\$data = json_decode(curl_exec(\$ch), true);
if (\$data['code'] === 0) {
    //\$data['pay_info'] 为支付跳转地址
    //\$data['sign'] 用「平台公钥」+ openssl_verify(响应字典序串(滤sign/sign_type), base64_decode(\$data['sign']), \$platPubKey, OPENSSL_ALGO_SHA256) 验签
}
?>