lvhao 1 日 前
コミット
895f81e41c
1 ファイル変更77 行追加50 行削除
  1. 77 50
      core/CoreApp/models/Model_apittv1.php

+ 77 - 50
core/CoreApp/models/Model_apittv1.php

@@ -5,59 +5,86 @@ class Model_apittv1 extends Lin_Model {
             $this->load->_model("Model_logic_ding","logic_ding");
     }
 
-
-
-    private function sign($url,$header,$body,$secret){
-        //解析URL
-        $urlParts = parse_url($url);
-
-        //获取路径
-        $path = $urlParts['path']??'';
-
-        //解析查询参数
-        $queryParams = [];
-        if(isset($urlParts['query'])){
-            parse_str($urlParts['query'],$queryParams);
-        }
-        // 移除sign和access_token参数
-        unset($queryParams['sign']);
-        unset($queryParams['access_token']);
+    private function sign($url,$appSecret,$body='') 
+	{
+		// 解析URL获取查询参数
+		$queryParams = array();
+		parse_str(parse_url($url, PHP_URL_QUERY), $queryParams);
+		// 排除'sign'和'access_token'
+		unset($queryParams['sign'], $queryParams['access_token']);
+		// 按字典顺序排序查询参数
+		ksort($queryParams);
+		// 拼接参数为{key}{value}格式
+		$input = '';
+		foreach ($queryParams as $key => $value)
+		{
+    		$input .= $key . $value;
+		}
+		// 追加请求路径
+		$path = parse_url($url, PHP_URL_PATH);
+		$input = $path . $input;
+		if ($body) 
+		{
+			$input .= json_encode($body);
+	    }
+		// 使用app_secret包裹生成的字符串
+		$input = $appSecret . $input . $appSecret;
+		// 生成签名
+		$sign = hash_hmac('sha256', $input,$appSecret);
+        return $sign;
+	}
+
+    // private function sign($url,$header,$body,$secret){
+    //     //解析URL
+    //     $urlParts = parse_url($url);
+
+    //     //获取路径
+    //     $path = $urlParts['path']??'';
+
+    //     //解析查询参数
+    //     $queryParams = [];
+    //     if(isset($urlParts['query'])){
+    //         parse_str($urlParts['query'],$queryParams);
+    //     }
+    //     // 移除sign和access_token参数
+    //     unset($queryParams['sign']);
+    //     unset($queryParams['access_token']);
         
-        // 按参数名排序
-        ksort($queryParams);
-
-        // 构建参数字符串
-        $parameterStr = $path;
-        foreach ($queryParams as $key => $value) {
-            $parameterStr .= $key . $value;
-        }
-
-        // 检查Content-Type,如果不是multipart/form-data,则追加body
-        $contentType = $this->getHeader($header, 'Content-Type');
-        if (stripos($contentType, 'multipart/form-data') === false && !empty($body)) {
-            $parameterStr .= $body;
-        }
+    //     // 按参数名排序
+    //     ksort($queryParams);
+
+    //     // 构建参数字符串
+    //     $parameterStr = $path;
+    //     foreach ($queryParams as $key => $value) {
+    //         $parameterStr .= $key . $value;
+    //     }
+
+    //     // 检查Content-Type,如果不是multipart/form-data,则追加body
+    //     $contentType = $this->getHeader($header, 'Content-Type');
+    //     if (stripos($contentType, 'multipart/form-data') === false && !empty($body)) {
+    //         $parameterStr .= $body;
+    //     }
         
-        // 用secret包裹参数字符串
-        $signatureParams = $secret . $parameterStr . $secret;
+    //     // 用secret包裹参数字符串
+    //     $signatureParams = $secret . $parameterStr . $secret;
         
-        // 使用HMAC-SHA256生成签名
-        return $this->generateSHA256($signatureParams, $secret);
-    }
-
-    private function getHeader($header,$name){
-        $lowerName = strtolower($name);
-        foreach ($header as $key => $value) {
-            if (strtolower($key) === $lowerName) {
-                return $value;
-            }
-        }
-        return '';
-    }
-
-    private function generateSHA256($signatureParams, $secret){
-        return hash_hmac('sha256', $signatureParams, $secret);
-    }
+    //     // 使用HMAC-SHA256生成签名
+    //     return $this->generateSHA256($signatureParams, $secret);
+    // }
+
+    // private function getHeader($header,$name){
+    //     $lowerName = strtolower($name);
+    //     foreach ($header as $key => $value) {
+    //         if (strtolower($key) === $lowerName) {
+    //             return $value;
+    //         }
+    //     }
+    //     return '';
+    // }
+
+    // private function generateSHA256($signatureParams, $secret){
+    //     return hash_hmac('sha256', $signatureParams, $secret);
+    // }
 
     private function reqGet($url,$headers){