开放平台

refundOrder

申请退款订单

证书生成工具 : 下载

请求地址 :

环境 提交方式 HTTPS请求地址
正式环境 POST https://open.hexinpass.com:8501/api/refundOrder

公共参数 :

参数 类型 是否必填 描述 示例值
data[refundOrderNumber] string 订单号订生成规则: userId(7位 36进制)+业务类型(2位)+年月日时分秒(14位)+随机数(7位) 订单长度30位
data[amount} number 订单金额(单位分)
data[orderNumber] string 订单号
data[serialNumber] string 流水号
data[notifyUrl] string 回调地址,退款成功后通知业务系统地址, 通知方式为http/https-post,
业务系统处理完业务后要返回订单系统"success"字符串,否则订单系统会多次通知业务系统,
通知间隔时间为10s,如果第三次通知任然失败订单系统将放弃通知,并标记该订单回调失败。
sign string data数据签名,数据签名将以data数据里边的字段升序排列后,将value拼接成字符串后使用rsa进行验签
请求参数示例:
{"data":{"amount":5900,"notifyUrl":"http:\/\/xxx.xxx.com\/index.php\/Home\/Order\/appPaySuccess?orderno=GC12432893641224","serialNumber":"流水号","orderNumber":"0002MIO12201712120948093085671","time":1800},"sign":"jzNh13WsHwSg18kWdIjEMYeXCyrvZiUjqxtJUrtvO6RTAPQUdy9EMBPOiym6\/nrpb83nzqkjdeS3EBMmUPJrgoSKJWXb9iMIwqKUk1fXziWtVpRoFTVbAhUU9pdud0NM6kD8CXUeUuhFy5vmciTWyc6Nc="}

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 refundOrder()
  {
    $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);
    $refundOrderNumber = $userIdStr . "09" . date("YmdHis", time()) . rand(1000000, 9999999);
    $data = array(
      'orderNumber' =>'订单号',
      'amount' => 120,
      'refundOrderNumber' => $refundOrderNumber
      'notifyUrl' => "退款成功回调地址"
      'serialNumber' => '流水号'
     );
     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/refundOrder?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->refundOrder();
//输出信息
print_r($result);
//返回成功信息
Array
  (
    [data] =>
     [errcode] => 0
    [msg] => success
  )

回调数据:

{"data":"{\"refundOrderNumber\":\"345678\",\"amount\":\"1000\",\"status\":\"1\",\"notifyUrl\":\"http:\\\/\\\/www.baidu.com\"}","sign":"BJ5e9GVvEBCAAZ3NN0g3+qxH3dQtLiBuXEDd0dmuX0ZBCLuqSLxaOwg3nHKTDUqo97N8h2\/S5jXCN0b0\/krK5Q\/FEoP3PKpBN7yLDQ1i4gs4hV1bmi\/ALIHlqyIm1mWWfTk5xEkCzC1UHIO4DzzJWrKaB2\/bWkJteiPGYLz1VQVI3VLT8e9b49aqeuW5kHAfHlNA07ATKvzRPPrWHmswE7Wan7gLcM1My\/1ZXOD3dcIpb8SPH3KkuZLDh1ehJ8JNOoDaSS9imfUkFFyiorZxTqOB+hLoyGqR+HQ+ElMmeLpZ+duMNhQvBR7rd5XTHBwGxncuzkQaGjLLz3PZGXycNw=="}

返回参数说明:

参数 类型 是否必填 描述 示例值
data string 业务数据包,格式为json字符串
sign string data数据签名,数据签名将以data数据里边整个数据包进行rsa验签

data数据说明:

参数 类型 是否必填 描述 示例值
orderNumber string 订单号
refundOrderNumber string 退款订单号
status int 退款状态 0 未处理 1 已处理
amount 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 "验证签名失败";
   }