首页 » PHP教程 » php签名函数技巧_php之第三方平台私有接口签名中的关键函数

php签名函数技巧_php之第三方平台私有接口签名中的关键函数

duote123 2024-12-05 0

扫一扫用手机浏览

文章目录 [+]

在我们日常的事情过程中常常会涉及到对接第三方平台私有接口的情形,一样平常的情形下平台会对外供应相应措辞的SDK开拓包,SDK会屏蔽API署名的细节,这样用户利用起来就会比较大略,但是还有一些情形下,例如平台尚未供应对应措辞的SDK开拓包,这时候就须要我们阅读第三方原始API利用文档,个中就会涉及到私有接口的授权(数字署名).直接上代码:

<?php$path = "http://xxx.xxx.xxx.xxx:ccc/api";$authorization = "xxx";$appkey = "xxx";$appsecret = "xxx";$map = array();$map["authorization"] = $authorization;$map["app_key"] = $appkey;$map["method"] = "xxx";$map["timestamp"] = "xxx";$map["version"] = "xxx";$map["format"] = "xxx";$map["charset"] = "UTF-8";$map["bizcode"] = "xxx";$map["count"] = "xxx";$content = getSortParams($map) . $appsecret; $sign = sign($content);$map["sign"] = $sign;$headers = array( "content-type:application/x-www-form-urlencoded;charset=UTF-8;", "accept:/", "connection:Keep-Alive", "user-agent:Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");$post_data= http_build_query($map);$ch = curl_init();curl_setopt($ch, CURLOPT_URL, $path);curl_setopt($ch, CURLOPT_POST, 1);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 15);curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);$result = curl_exec($ch);if (curl_errno($ch)) { echo 'Errno '.curl_error($ch);}curl_close($ch);echo ("HTTP response >>>>>>" . $result);//参数署名function sign($content){ $hash_str = hash('sha256', $content); $sign = base64_encode(pack('H', $hash_str));//关键函数 H十六进制字符串,高位在前 return $sign;}//参数排序function getSortParams($params){ $arr_key = array(); foreach ($params as $k => $v) { array_push($arr_key, $k); } sort($arr_key); $ret_str = ''; foreach ($arr_key as $key) { $ret_str .= $key; $ret_str .= $params[$key]; } return $ret_str;}

总结:

php签名函数技巧_php之第三方平台私有接口签名中的关键函数

代码中的关键部分在$sign = base64_encode(pack('H', $hash_str));功能是将原始字符串按照十六进制高位在前的办法输出之后进行base64编码.

php签名函数技巧_php之第三方平台私有接口签名中的关键函数
(图片来自网络侵删)

pack(),unpack()函数很多人在实际事情中并没有利用过,由于它紧张用在数据通信(通过二进制格式与其它措辞通信)以及数据加密(如果不见告第三方你的打包办法,对方解包的难度就相对很大)的场景中,而这些在实际事情中并不常见.

标签:

相关文章