当前位置:首页 > PHP教程 > php高级应用 > 列表

php实现接口api数据签名及验签

发布: 来源: PHP粉丝网  添加日期:2024-03-07 14:18:23 浏览: 评论:0 

api数据签名作用:通过使用签名可以验证数据在传输过程中是否被篡改或修改。接收方可以使用相同的签名算法和密钥对接收到的数据进行验证,如果验证失败则表明数据被篡改过。

1、数据发送方进行接口签名并传输签名字段

  1. // 请求URL 
  2. $url = "http://localhost/test22.php"; // 替换为实际的URL 
  3. // 要发送的数据 
  4. $data = array( 
  5.     'name' => 'John Doe', 
  6.     'email' => 'john@example.com' 
  7. ); 
  8. $key="adsad123"; 
  9. $data['sign']=sign($data,$key); 
  10. // 发送POST请求 
  11. $response = postRequest($url, $data); 
  12. // 处理响应 
  13. var_dump($response); 
  14.    
  15. function sign($array,$key) 
  16. { 
  17.     // 1. 对数组按键进行升序排序 
  18.     ksort($array); 
  19.    
  20.     // 2. 将键值对按顺序拼接到字符串中 
  21.     $str = ""; 
  22.     foreach ($array as $k => $v) { 
  23.         $str .= $k . $v; 
  24.     } 
  25.    
  26.     // 3. 添加密钥到拼接字符串末尾 
  27.     $restr = $str . $key; 
  28.    
  29.     // 4. 对拼接字符串进行SHA1加密,并转换为大写 
  30.     $sign = strtoupper(sha1($restr)); 
  31.    
  32.     // 5. 返回生成的签名 
  33.     return $sign; 
  34. } 
  35.    
  36. function postRequest($url, $data) { 
  37.     $postData = http_build_query($data); 
  38.    
  39.     $curl = curl_init($url); 
  40.     curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 
  41.     curl_setopt($curl, CURLOPT_POST, true); 
  42.     curl_setopt($curl, CURLOPT_POSTFIELDS, $postData); 
  43.    
  44.     $response = curl_exec($curl); 
  45.    
  46.     if ($response === false) { 
  47.         $error = curl_error($curl); 
  48.         return "cURL Error: " . $error; 
  49.     } else { 
  50.         return $response; 
  51.     } 
  52.    
  53.     curl_close($curl); 
  54. } 

发送的签名数据

php实现接口api数据签名及验签

2、接口接受方,进行数据签名并且对比签名

  1.    
  2. $key="adsad123"; 
  3. $data=$_POST; 
  4. unset($data['sign']); 
  5. $sign=sign($data,$key); 
  6.    
  7. if($sign==$_POST['sign']){ 
  8.     echo '验签成功'; 
  9. }else{ 
  10.     echo '验签失败'; 
  11. } 
  12.    
  13.    
  14. function sign($array,$key) 
  15. { 
  16.     // 1. 对数组按键进行升序排序 
  17.     ksort($array); 
  18.    
  19.     // 2. 将键值对按顺序拼接到字符串中 
  20.     $str = ""; 
  21.     foreach ($array as $k => $v) { 
  22.         $str .= $k . $v; 
  23.     } 
  24.    
  25.     // 3. 添加密钥到拼接字符串末尾 
  26.     $restr = $str . $key; 
  27.    
  28.     // 4. 对拼接字符串进行SHA1加密,并转换为大写 
  29.     $sign = strtoupper(sha1($restr)); 
  30.    
  31.     // 5. 返回生成的签名 
  32.     return $sign; 
  33. }
php实现接口api数据签名及验签

Tags: api数据签名 api数据验签

分享到: