开放平台

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 "验证签名失败";
   }