当前位置:首页 > 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.     // 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.    
  34. function postRequest($url$data) { 
  35.     $postData = http_build_query($data); 
  36.    
  37.     $curl = curl_init($url); 
  38.     curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 
  39.     curl_setopt($curl, CURLOPT_POST, true); 
  40.     curl_setopt($curl, CURLOPT_POSTFIELDS, $postData); 
  41.    
  42.     $response = curl_exec($curl); 
  43.    
  44.     if ($response === false) { 
  45.         $error = curl_error($curl); 
  46.         return "cURL Error: " . $error
  47.     } else { 
  48.         return $response
  49.     } 
  50.    
  51.     curl_close($curl); 

发送的签名数据

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. function sign($array,$key
  14.     // 1. 对数组按键进行升序排序 
  15.     ksort($array); 
  16.    
  17.     // 2. 将键值对按顺序拼接到字符串中 
  18.     $str = ""
  19.     foreach ($array as $k => $v) { 
  20.         $str .= $k . $v
  21.     } 
  22.    
  23.     // 3. 添加密钥到拼接字符串末尾 
  24.     $restr = $str . $key
  25.    
  26.     // 4. 对拼接字符串进行SHA1加密,并转换为大写 
  27.     $sign = strtoupper(sha1($restr)); 
  28.    
  29.     // 5. 返回生成的签名 
  30.     return $sign
  31. }
php实现接口api数据签名及验签

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

分享到: