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