发起付款接口(必用接口)


SDK Demo下载

PHP SDK(utf-8) JAVA SDK(utf-8) ASP.NET SDK(utf-8)


跳转支付页接口URL:
https://pay2.xunhupay.com/v2/payment/do.html
传参方式:Post

说明:用curl的post方式传参数,并直接获取json返回值,引导客户跳转到支付链接。新版本支持GET301跳转请求,无需使用CURL工具提前请求数据


请求参数:
# 参数名 含义 类型 说明
1 version API 版本号 string(24) 必填。目前为1.1
2 lang 显示语言 string(24) 必填。可选值:zh-cn,en-us
3 plugins 渠道ID string(24) 必填。根据自己需要命名渠道ID,例如:myswebsite1,mywebsite2
4 appid APP ID string(32) 必填。应用ID
5 trade_order_id 商户订单号 string(32) 必填。请确保在当前网站内是唯一订单号
6 payment 支付方式 string(16) 必填。可选值:wechat,alipay
7 total_fee 订单金额(元) decimal(18,2) 必填。单位为人民币,精确到分
8 title 订单标题 string(128) 必填。商户订单标题
9 time 当前时间戳 int(11) 必填。PHP示例:time()
10 notify_url 通知回调网址 string(128) 必填。用户支付成功后,我们服务器会主动发送一个post消息到这个网址(注意:当前接口内,SESSION内容无效)
11 return_url 跳转网址 string(128) 必填。用户支付成功后,我们会让用户浏览器自动跳转到这个网址
12 callback_url 商品网址 string(128) 选填。用户取消支付后,我们可能引导用户跳转到这个网址上重新进行支付
13 nonce_str 随机值 string(32) 必填。作用:1.避免服务器页面缓存,2.防止安全密钥被猜测出来
14 device_id 设备ID string(4) 可选。支付请求发送到指定手机app
15 modal (新) 支付模式 string(16) 可选值( 留空:返回完整的虎皮椒支付网页; qrcode:仅返回一张二维码; 需要自己处理倒计时,H5唤醒等功能)
16 hash 签名 string(32) 必填。
HASH生成的步骤如下:

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

特别注意以下重要规则:

  1. ◆ 参数名ASCII码从小到大排序(字典序);
  2. ◆ 如果参数的值为空不参与签名;
  3. ◆ 参数名区分大小写;
  4. ◆ 验证调用返回或微信主动通知签名时,传送的sign参数不参与签名,将生成的签名与该sign值作校验。
  5. ◆ 微信接口可能增加字段,验证签名时必须支持增加的扩展字段

第二步,在stringA最后拼接上APPSECRET得到stringSignTemp字符串,并对stringSignTemp进行MD5运算,得到hash值。

HASH生成示例(PHP):
function generate_xh_hash(array $datas,$hashkey){
                    ksort($datas);
                    reset($datas);

                    $pre =array();
                    foreach ($datas as $key => $data){
                        if(is_null($data)||$data===''){continue;}

                        if($key=='hash'){
                            continue;
                        }

						//stripslashes 去除php POST请求自带的多余斜杠(其他语言可以不处理)
                        $pre[$key]=stripslashes($data);
                    }

                    $arg  = '';
                    $qty = count($pre);
                    $index=0;

                    foreach ($pre as $key=>$val){
                        $arg.="$key=$val";
                        if($index++<($qty-1)){
                            $arg.="&";
                        }
                    }

                    return md5($arg.$hashkey);
                }
Json请求成功时返回示例:
{
    		"url":"https:\/\/pay2.xunhupay.com\/alipay\/pay\/index.html?id=20351731&nonce_str=3642452019&time=1522390464&appid=20146122002&hash=ef07fb856239c6066a8c84c21835e047",
    		"errcode":0,
    		"errmsg":"success!",
    		"hash":"3a91e22ee359c914b0788c6007377638"
    		}
Json请求失败时返回示例:
{
    		"errcode":500,
    		"errmsg":"invalid sign!",
    		"hash":"3a91e22ee359c914b0788c6007377638"
    		}

付款成功回调通知


用户付款成功后,我们会向您在发起付款接口传入的notify_url网址发送通知。您的服务器只要返回内容:success,就表示回调已收到。如果返回内容不是success,我们会再尝试回调1次。

传参方式:Post
参数内容:
# 参数名 含义 类型 说明
1 trade_order_id 商户订单号 string(32) 支付时请求的商户订单号
2 total_fee 订单支付金额 decimal(18,2) 订单支付金额
3 transaction_id 交易号 string(32) 支付平台内部订单号
4 plugins 支付渠道ID string(64) 支付时请求的渠道ID
5 status 订单状态 string(2) 目前固定值为:OD
6 hash 签名 string(32) 请参考支付时签名算法

付款成功自动跳转


用户付款成功后,我们会在先通过notify_url接口,通知您服务器付款成功,然后引导用户跳转到return_url网址。