浏览 10149
聚合支付 - 接口开发文档
SDK示例下载
支付网关地址
http://sen.pay.xbpaya.com/pay.html
提示:安全起见,提交方式推荐使用 POST ,请不要用 GET 方式提交。
接口参数说明
| 参数名称 | 参数含义 | 是否必填 | 参与签名 | 参数说明 |
|---|---|---|---|---|
| appid | 商户号 | 是 | 是 | 平台分配商户号 |
| payid | 唯一标识 | 是 | 是 | 可以是用户ID,或者订单编号(必须确保是唯一的) |
| money | 订单金额 | 是 | 是 | 订单提交的金额 |
| type | 支付方式 | 是 | 是 | 可传入数字类型(1:支付宝 2:微信支付 3:QQ钱包),或者支付通道英文标识(参见下表) |
| notify_url | 异步通知地址 | 是 | 是 | 付款后POST通知,优先级最高,留空为系统设置中的通知地址 |
| return_url | 同步通知地址 | 是 | 是 | 付款后用户跳转页面 |
| subject | 商品名称 | 否 | 是 | 商品名称,注意:值为空时不参与签名 |
| param | 自定义参数 | 否 | 是 | 原封返回 避免特殊字符,注意:值为空时不参与签名 |
| sign | 数据MD5签名 | 否 | 否 | 将需要构造的参数按首字母排序并拼接成url参数,然后进行md5加密签名 |
| charset | 编码 | 否 | 否 | utf-8或gb2312,默认utf-8 |
支付通道英文标识表
| 支付通道名称 | 英文标识(区分大小写) |
|---|---|
| 支付宝 - 电脑网站支付 | AlipayPc |
| 支付宝 - 手机网站支付 | AlipayWap |
| 支付宝 - APP支付 | AlipayApp |
| 支付宝 - 当面付 | AlipayFace |
| 微信支付 - 微信Native | WeixinNative |
| 微信支付 - 微信JSAPI | WeixinJsapi |
| 微信支付 - H5支付 | WeixinH5 |
| 信汇支付 - 支付宝 | XhepayAliScan |
| 信汇支付 - 微信支付 | XhepayWxScan |
| 监控端 - 支付宝 | AlipayQrcode |
| 监控端 - 微信支付 | WeixinQrcode |
| 监控端 - QQ钱包 | |
| 监控端 - 云闪付 | YunShanFu |
| 监控端 - 收钱吧 | ShouQianBa |
签名算法
-
第一步
设所有发送或者接收到的数据为集合,将集合内非空参数值的参数按照参数名从小到大排序(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¬ify_url=$notify_url&payid=$payid&type=$type&return_url=$return_url"; $stringSignTemp=$str.$appkey; $sign=md5($stringSignTemp);
支付结果通知
| 参数名称 | 参数含义 | 参与签名 | 参数说明 |
|---|---|---|---|
| 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();
SDK接口示例下载
