addOrder
申请消费订单
证书生成工具 : 下载
请求地址 :
| 环境 | 提交方式 | HTTPS请求地址 |
|---|---|---|
| 正式环境 | POST | https://open.hexinpass.com:8501/api/addOrder |
公共参数 :
| 参数 | 类型 | 是否必填 | 描述 | 示例值 |
|---|---|---|---|---|
| data[orderNumber] | string | 是 | 订单号订生成规则: userId(7位 36进制)+业务类型(2位)+年月日时分秒(14位)+随机数(7位) 订单长度30位 | |
| data[amount} | number | 是 | 订单金额(单位分) | |
| data[openId] | string | 是 | openId | |
| data[description] | string | 是 | 订单描述 | |
| data[callbackurl] | string | 是 | 回调地址,订单支付成功后通知业务系统地址,
通知方式为http/https-post, 业务系统处理完业务后要返回订单系统"success"字符串,否则订单系统会多次通知业务系统, 通知间隔时间为10s,如果第三次通知任然失败订单系统将放弃通知,并标记该订单回调失败。 |
|
| data[time] | number | 是 | 订单有效时长 单位(s) | 3600 |
| sign | string | 是 | data数据签名,数据签名将以data数据里边的字段升序排列后,将value拼接成字符串后使用rsa进行验签 | |
| 请求参数示例: |
{"data":{"amount":5900,"callbackurl":"http:\/\/xxx.xxx.com\/index.php\/Home\/Order\/appPaySuccess?orderno=GC12432893641224","description":"\u5546\u54c1","openId":"73106ab074d97ca5ea214d378355c513","orderNumber":"0002MIO12201712120948093085671","time":1800},"sign":"jzNh13WsHwSg18kWdIjEMYeXCyrvZiUjqxtJUrtvO6RTAPQUdy9EMBPOiym6\/nrpb83nzqkjdeS3EBMmUPJrgoSKJWXb9iMIwqKUk1fXziWtVpRoFTVbAhUU9pdud0NM6kD8CXUeUuhFy5vmciTWyc6Nc="}
|
返回参数 :
| 参数 | 类型 | 是否必填 | 描述 | 示例值 |
|---|---|---|---|---|
| success | number | 是 | 成功状态 0成功,非0失败 | |
| code | number | 是 | 错误码 | |
| msg | string | 是 | 描述 | |
| results[orderNumber] | string | 是 | 订单号 | |
| results[serialNumber] | string | 是 | 支付流水号 | |
| results[orderStatus] | number | 是 | 订单状态 0 未支付 1 已支付 2 支付失败 | |
| 接口返回参数示例: |
{"success":0,"code":0,"msg":"","results":{"orderNumber":"0002MIO12201712120948093085671","serialNumber":"CN02MIO12201712120948093085671","orderStatus":0}}
|
PHP示例代码 :
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
|
class Demo {
public $pid = 'hxiaoming'; //第三方用户唯一凭证
public $secret = '850a554f3072867d52d56169201a9737';
//第三方用户唯一凭证密钥
public $tKweb = 'https://open.hexinpass.com:8501/';
//第三方接口地址
/** * 获取Token */
public function getToken()
{
$url =
$this->tKweb."/access/gettoken?pid=".$this->pid.'&secret='.$this->secret;
$res =
$this->requestPost($url);
return json_decode($res ,
true);
}
/** * 申请消费订单 */
public function addOrder()
{
$result = $this->getToken(); //获取token值
if( $result['errcode'] !== 0 && $result['msg']
!= 'success' )
{
die($result);
}
$token = $result['token'];
$userId = 503209;
$userIdStr = strtoupper(base_convert($userId, 10,
36));
$userIdStr = str_pad($userIdStr, 7, "0",
STR_PAD_LEFT);
$orderNumber = $userIdStr . "09" . date("YmdHis",
time()) . rand(1000000, 9999999);
$data = array(
'orderNumber' =>
$orderNumber,
'amount' => 120,
'openId' => $openId
'description' => "订单描述"
'callbackurl' => "订单支付成功回调地址"
'time' => 300
);
ksort($data);
$str="";
foreach ($data as $val){
$str=$str.$val;
}
$private_content = file_get_contents(dirname(__FILE__)
.
'/private.pem');
$private_key=openssl_get_privatekey($private_content);
openssl_sign($str,$sign,$private_key);
openssl_free_key($private_key);
$sign=base64_encode($sign);//最终的签名
$params["data"]=$data;
$params["sign"]=$sign;
$url =
$this->tKweb.'/api/addOrder?token='.$token;
$res = $this->requestPost($url
,json_encode($params));
$result = json_decode($res , true);
$return $result;
}
/** * * 请求方式 * curl post */
public function requestPost($url , $params =
'')
{
$cn = curl_init();
curl_setopt($cn, CURLOPT_URL, $url);
curl_setopt($cn, CURLOPT_RETURNTRANSFER,
1);
curl_setopt($cn, CURLOPT_POST, true);
curl_setopt($cn, CURLOPT_POSTFIELDS,
$params);
curl_setopt($cn, CURLOPT_TIMEOUT, 30 );
$res = curl_exec($cn);
$httpCode =
curl_getinfo($cn,CURLINFO_HTTP_CODE);
curl_close($cn);
return $res;
}
}
//创建对象
$demo = new Demo();
//执行对象方法
$result = $demo->addOrder();
//输出信息
print_r($result);
//返回成功信息
Array
(
[data] =>
[errcode] => 0
[msg] => success
)
|
回调数据:
| {"sign":"eMez4e1wYc0aRvZzCqApZViPdWvnn3+sZkebJPNZXE+qRtf/YhfTg2+GNffQXm4KJpLDYykbHAx2Weer0GspcHcwBRHsshllBL4ro7s//hxTY7O4t8+BzKh1dl09ZljwFvWO8G26oPVRbi94IVswQ8fWA0bqZMYvYJ4CZcPJaKo=","data":"{\"orderNumber\":\"000ASA109201612260900532582305\",\"serialNumber\":\"CN000ASA1002016122616005003723\",\"orderStatus\":1,\"amount\":1,\"userId\":503209,\"orderServiceType\":0,\"orderServiceStatus\":0}"} |
返回参数说明:
| 参数 | 类型 | 是否必填 | 描述 | 示例值 |
|---|---|---|---|---|
| data | string | 是 | 业务数据包,格式为json字符串 | |
| sign | string | 是 | data数据签名,数据签名将以data数据里边整个数据包进行rsa验签 |
data数据说明:
| 参数 | 类型 | 是否必填 | 描述 | 示例值 |
|---|---|---|---|---|
| orderNumber | string | 是 | 订单号 | |
| serialNumber | string | 是 | 支付流水号 | |
| orderStatus | int | 是 | 订单状态 | 0 未支付 1 已支付 2 支付失败 |
| amount | int | 是 | 订单金额 | |
| userId | int | 是 | 用户Id | |
| orderServiceType | int | 是 | 订单业务类型 | |
| orderServiceStatus | int | 是 | 订单业务状态 |
解析demo:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
$json =""; //回调数据
$arr=json_decode($json,true);
$public_key = file_get_contents(dirname(__FILE__) .
'/public.pem');
$pkeyid = openssl_pkey_get_public($public_key);
$data = $arr["data"];
$sign = $arr["sign"];
$sign = base64_decode($sign);
$verify = 0;
if ($pkeyid) {
$verify = openssl_verify($data, $sign, $pkeyid,
OPENSSL_ALGO_SHA1);
openssl_free_key($pkeyid);
}
if ($verify==1){
echo "success"; //签名验证成功
}else{
echo "验证签名失败";
}
|