发起支付请求网站名称参数可以为空,其他为必填项
签名算法与支付宝签名算法相同
💴 API接口支付
接口描述
POST数据:pid={商户ID}&type={支付方式}&out_trade_no={商户订单号}&notify_url={服务器异步通知地址}&return_url={页面跳转通知地址}&name={商品名称}&money={金额}&sitename={网站名称}&sign={签名字符串}&sign_type=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'; //创建订单所需的参数
\$http_type = ((isset(\$_SERVER['HTTPS']) && \$_SERVER['HTTPS'] == 'on') || (isset(\$_SERVER['HTTP_X_FORWARDED_PROTO']) && \$_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')) ? 'https://' : 'http://';
\$url = \$http_type . "域名/pay/apisubmit?{\$query}"; //请求地址
echo file_get_contents(\$url); //获取返回json
?>
🛡️ V免签接口支付
接口描述
与易支付 API 接口并存,供习惯 V免签格式的商户对接,默认返回 JSON(isHtml=1 时跳转本站收银页)。通讯密钥与易支付共用。
参数:payId={商户订单号}¶m={透传参数}&type={支付方式}&price={金额}¬ifyUrl={异步通知地址}&returnUrl={跳转地址}&sign={签名}
请求参数
响应参数
签名算法
待签名参数按 固定顺序 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"] 渲染收款码
}
?>
🐯虎皮椒接口 · API支付
接口说明
该接口按虎皮椒格式直接返回 JSON 收款码。请求参数:app_id / trade_order_id / total_fee / order_type / notify_url / hash;可选 title / return_url / attach / nonce_str / time。
order_type:WECHAT 微信、ALIPAY 支付宝。商户ID和通讯密钥复用易支付配置。
签名与响应
过滤空值和 hash 字段后,参数按 key ASCII 升序拼为 a=1&b=2…,末尾追加通讯密钥:
hash = md5(参数字典序串 . 商户密钥)
成功响应:{"code":1,"url":"收款码内容","qr":"收款码内容","trade_order_id":"商户订单号","cloud_order_id":"平台订单号","total_fee":"订单金额","real_fee":"实付金额"}。异步通知说明见支付结果通知 · 虎皮椒。
💠码支付接口
当前支持范围
本系统当前实现码支付页面支付入口 /creat_order/,验签后跳转本站收银台;未额外提供码支付 JSON API 下单入口。完整下单参数与 PHP 示例见页面跳转支付 · 码支付。
支付方式固定为:1 支付宝、2 QQ、3 微信。签名规则为字典序 MD5:sign = md5(参数字典序串 . 商户密钥)。
🔐易支付V2接口 · API下单
请求参数
支持 Form 或 JSON 请求体:pid / type / out_trade_no / notify_url / name / money / sign / sign_type 为必填;return_url / sitename / clientip / device / method / timestamp 选填(官方V2惯用参数,参与签名但不参与业务)。支付方式:wxpay / alipay / qqpay / rmbpay。
请求参数过滤空值与 sign/sign_type 后按 key ASCII 升序拼接,使用后台“查看对接密钥”中提供的应用私钥签名。sign_type 为 RSA2(SHA256withRSA,推荐)或 RSA(SHA1withRSA)。
响应验签
按官方V2约定返回:{"code":0,"msg":"成功","pay_info":"支付跳转地址","timestamp":…,"sign":"平台签名","sign_type":"RSA2"},code=0 为成功(code 非 0 时 msg 为失败原因)。
成功响应的 sign 为除 sign/sign_type 外全部字段(含 timestamp)的平台签名;请使用后台“查看对接密钥”中的平台公钥验证。异步通知见支付结果通知 · 易支付V2,查单见单笔订单查询 · 易支付V2。
PHP 签名示例
<?php
// \$params 为下单参数,移除 sign/sign_type 和空值后按 key ASCII 升序拼接
ksort(\$params);
\$pairs = [];
foreach (\$params as \$key => \$value) {
if (\$value === '' || \$key === 'sign' || \$key === 'sign_type') continue;
\$pairs[] = \$key . '=' . \$value;
}
\$content = implode('&', \$pairs);
openssl_sign(\$content, \$signature, \$applicationPrivateKey, OPENSSL_ALGO_SHA256);
\$params['sign'] = base64_encode(\$signature);
\$params['sign_type'] = 'RSA2';
?>