聚合支付 - 接口开发文档 SDK示例下载

支付下单接口

请求API地址
https://18pay.net/pay.html
提示:安全起见,提交方式推荐使用 POST ,请不要用 GET 方式提交。
请求参数列表
参数名称 参数含义 是否必填 参与签名 参数说明
appid 商户编号 平台分配商户编号
payid 唯一标识 可以是用户ID,或者订单编号(必须确保是唯一的)
money 订单金额 订单提交的金额
type 支付方式 传入数字(1:支付宝 2:微信支付 3:QQ钱包),或者支付通道英文标识
notify_url 异步通知地址 接收平台通知的URL,需给绝对路径,并确保平台能通过互联网访问该地址
return_url 同步通知地址 前端页面跳转的URL(支付成功后会跳转到这个地址),
该地址只作为前端页面的一个跳转,须使用notify_url通知结果作为支付最终结果
subject 商品名称 商品名称(建议填写,值为空时不参与签名)
param 自定义参数 原封返回,避免特殊字符(值为空时不参与签名)
account 充值账号 接口用于游戏充值时,可传入玩家账号
contact 联系方式 接口用于游戏充值时,可传入玩家联系方式
native 原生接口 native不为空时,接口返回原生支付结果,比如支付宝和微信的官方二维码链接
sign 数据MD5签名 对数据进行md5加密签名,请参考签名算法
charset 编码 utf-8或gb2312,默认utf-8
支付通道英文标识表
支付通道名称 英文标识(严格区分大小写)
支付宝电脑网站支付 AlipayPc
支付宝手机网站支付 AlipayWap
支付宝当面付 AlipayFace
支付宝JSAPI支付 AlipayApp
微信支付 Weixin
微信H5支付 WeixinH5
财付通 Tenpay
易生支付 - 支付宝 YspayAlipay
易生支付 - 微信支付 YspayWeixin
支付宝 - 收款码 AlipayQrcode
微信支付 - 收款码 WeixinQrcode
QQ钱包 - 收款码 QQWallet
云闪付 - 收款码 YunShanFu
收钱吧 - 收款码 ShouQianBa
易支付 - 支付宝 YipayAlipay
易支付 - 微信支付 YipayWeixin
易支付 - QQ钱包 YipayQQ
汇付 - 支付宝 AdaAlipay
汇付 - 微信支付 AdaWeixin
签名算法
  • 第一步

    设所有发送或者接收到的数据为集合,将集合内非空参数值的参数按照参数名从小到大排序(ASCII码字典序),使用 URL 键值对的格式(即key1=value1&key2=value2…)拼接成字符串 str 。

    
    $urlDatas=array(
    	"appid" => $appid,
    	"money" => $money,
    	"payid" => $payid,
    	"type" => $type,
    	"notify_url" => $notify_url,
    	"return_url" => $return_url
    );
    //ksort()对数组按照键名进行升序排序
    ksort($urlDatas);
    //reset()内部指针指向数组中的第一个元素
    reset($urlDatas);
    $str = ASCII($urlDatas);
    function ASCII($urlDatas = array()){
    	$str = '';//初始化
    	foreach ($urlDatas AS $key => $val) { //遍历参数数组
    		if ($val == ''||$key == 'sign') continue; //跳过这些不签名
    		if ($str) $str .= '&'; //第一个字符串签名不加& 其他加&连接起来参数
    		$str .= "$key=$val"; //拼接为url参数形式
    	}		
    	return $str;
    }
    
  • 第二步

    然后在字符串 str 后面拼接上 appkey(平台商户密钥),得到 stringSignTemp 字符串,最后对stringSignTemp 进行 MD5 运算,得到 sign 值

    
    $str="appid=$appid&money=$money&notify_url=$notify_url&payid=$payid&type=$type&return_url=$return_url";
    $stringSignTemp=$str.$appkey;
    $sign=md5($stringSignTemp);
    
提交native参数时,以json格式返回原生支付结果
参数名称 参数含义 参数说明
pay_no 交易流水号 平台生成的唯一交易流水号
code_url 二维码链接 商户可用此参数自定义去生成二维码后展示出来进行扫码支付
code_img 二维码图片 此参数的值即是根据code_url生成的可以扫码支付的二维码图片地址
订单通知

订单支付成功时,系统会以post请求方式通知到异步通知地址(notify_url),通知结果参数如下表:

参数名称 参数含义 参与签名 参数说明
pay_id 唯一标识 提交的的唯一标识,可以是用户ID,或者订单编号
pay_money 订单金额 实际付款金额
pay_no 交易流水号 平台生成的唯一交易流水号
pay_time 交易时间 付款的时间戳
pay_type 支付方式 1:支付宝 2:微信支付 3:QQ钱包
param 扩展返回 商户附加数据,原封返回,提交什么就返回什么。注意:值为空时不参与签名
sign 数据签名 验证订单是否为合法

通知返回的参数示例如下:


pay_id=admin&pay_money=100.00&pay_no=20200217200042408995&pay_time=1487597795&pay_type=1&sign=c47f3cba123456b6b24542110a8928af
业务处理返回
返回类型 返回数据
业务处理完成返回 ok 或者 success
业务处理失败还需要下次继续通知返回 fail

1、业务处理完成返回:ok 或者 success

2、业务处理失败还需要下次继续通知返回:fail

3、注意:一定要验证是否有pay_no参数值,因为只有该值存在,才是付款成功 。

  • notify_url异步通知示例(Thinkphp):

    
    $appkey="平台的商户密钥";
    if (empty($_POST)) $_POST = $_GET; //如果为GET方式访问 
    //ksort()对数组按照键名进行升序排序 
    ksort($_POST); 
    //reset()内部指针指向数组中的第一个元素 
    reset($_POST); 
    $sign = '';//初始化 
    foreach ($_POST AS $key => $val) { //遍历POST参数 
    if ($val == ''||$key == 'sign') continue; //跳过这些不签名 
    if ($sign) $sign .= '&'; //第一个字符串签名不加& 其他加&连接起来参数 
    $sign .= "$key=$val"; //拼接为url参数形式 
    } 
    $pay_id = $_POST['pay_id']; //需要充值的ID 或订单号 或用户名 
    $pay_money = (float)$_POST['pay_money']; //实际付款金额
    $pay_no = $_POST['pay_no']; //交易流水号 
    $pay_time = $_POST['pay_time']; //付款的时间戳 
    $pay_type = (int)$_POST['pay_type']; //支付方式 1:支付宝 2:微信支付 3:QQ钱包 
    $param = isset($_POST['param'])?$_POST['param']:'';//自定义参数 
    if (!$_POST['pay_no'] || md5($sign . $appkey) != $_POST['sign']) { //不合法的数据 
    exit('fail'); //返回失败 继续补单 
    } else { //合法的数据 
    /** 
    * 业务处理在这里写 
    */ 
    exit('success'); //返回成功,业务处理完成,下面不再执行了
     } 
    
  • return_url同步通知示例(Thinkphp):

    
    $appkey="平台的商户密钥";
    if (empty($_POST)) $_POST = $_GET; //如果为GET方式访问 
    //ksort()对数组按照键名进行升序排序 
    ksort($_POST); 
    //reset()内部指针指向数组中的第一个元素 
    reset($_POST); 
    $sign = '';//初始化 
    foreach ($_POST AS $key => $val) { //遍历POST参数 
    if ($val == ''||$key == 'sign') continue; //跳过这些不签名 
    if ($sign) $sign .= '&'; //第一个字符串签名不加& 其他加&连接起来参数 
    $sign .= "$key=$val"; //拼接为url参数形式 
    } 
    $pay_id = $_POST['pay_id']; //需要充值的ID 或订单号 或用户名 
    $pay_money = (float)$_POST['pay_money']; //实际付款金额 
    $pay_no = $_POST['pay_no']; //交易流水号 
    $pay_time = $_POST['pay_time']; //付款的时间戳 
    $pay_type = (int)$_POST['pay_type']; //支付方式 1:支付宝 2:微信支付 3:QQ钱包
    $param = isset($_POST['param'])?$_POST['param']:'';//自定义参数 
    if (!$_POST['pay_no'] || md5($sign . $appkey) != $_POST['sign']) { //不合法的数据 
    $result = '支付失败';
    } else { //合法的数据 
    /** 
    * 业务处理在这里写 
    */ 
    $result = '支付成功'; 
    } 
    $this->assign('pay_id',$pay_id);
    $this->assign('pay_no',$pay_no);
    $this->assign('pay_money',$pay_money);
    $this->assign('pay_type',$pay_type);
    $this->assign('pay_time',date("Y-m-d H:i:s",$pay_time));
    $this->assign('param',$param);
    $this->assign('result',$result);
    return view();
    

支付查询接口

查询API地址
https://18pay.net/pay/query.html
查询参数列表
参数名称 参数含义 是否必填 参与签名 参数说明
appid 商户编号 平台分配商户编号
pay_no 交易流水号 平台生成的唯一交易流水号
sign 数据MD5签名 对数据进行md5加密签名,请参考签名算法
charset 编码 utf-8或gb2312,默认utf-8
查询结果返回

系统会以json格式返回查询的结果,可根据code的值来判断订单是否支付成功

返回类型 返回数据
支付成功 {"code":1,"type":"success","title":"提示","msg":"订单支付成功"}
其他 {"code":0,"type":"error","title":"提示","msg":"订单未支付"}

SDK接口示例

语言类型 接口介绍 SDK下载
Java Java的聚合支付接口示例 点击下载
ASP ASP的聚合支付接口示例 点击下载
PHP PHP的聚合支付接口示例 点击下载
Thinkphp5 Thinkphp5的聚合支付接口示例 点击下载