正式平台:https://api.xunhupay.com/payment/query.html
备用平台:https://api.dpweixin.com/payment/query.html
其他平台:https://api.diypc.com.cn/payment/query.html(建议5-10秒请求一次,最长不超过10分钟)
说明:用curl的post方式传参数,并直接获取json返回值,引导客户跳转到支付链接。
# | 参数名 | 含义 | 类型 | 说明 |
---|---|---|---|---|
1 | appid | APP ID | string(32) | 必填。应用ID |
5 | out_trade_order | 商户网站订单号 | string(32) | out_trade_order,open_order_id 二选一。请确保在您的网站内是唯一订单号 |
6 | open_order_id | 虎皮椒内部订单号 | string(32) | out_trade_order,open_order_id 二选一。在支付时,或支付成功时会返回此数据给商户网站y |
9 | time | 当前时间戳 | int(11) | 必填。PHP示例:time() |
13 | nonce_str | 随机值 | string(32) | 必填。作用:1.避免服务器页面缓存,2.防止安全密钥被猜测出来 |
14 | hash | 签名 | string(32) | 必填。 |
第一步,设所有发送或者接收到的数据为集合M,将集合M内非空参数值的参数按照参数名ASCII码从小到大排序(字典序),使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串stringA。
特别注意以下重要规则:
第二步,在stringA最后拼接上APPSECRET
得到stringSignTemp字符串,并对stringSignTemp进行MD5运算,得到hash值。
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); }
data.status :OD(支付成功),WP(待支付),CD(已取消)
{ "errcode":0, "data":{ "status":"OD", "open_order_id":"xxxx" ... }, "errmsg":"success!", "hash":"3a91e22ee359c914b0788c6007377638" }
{ "errcode":500, "errmsg":"invalid sign!", "hash":"3a91e22ee359c914b0788c6007377638" }