lvhao 1 napja
szülő
commit
8af7ddc3a6

+ 9 - 3
core/CoreApp/controllers/Aatest.php

@@ -83,15 +83,21 @@ class Aatest extends Start_Controller {
 		$this->load->_model("Model_apitt","apitt");
 		$this->load->_model("Model_zzjobs","zzjobs");
 		$this->load->_model("Model_logic_goods_replace","logic_goods_replace");
-		$this->load->_model("Model_express_tt","express_tt");
+		$this->load->_model("Model_apittv1","apittv1");
     }
 	
 
     //定义方法的调用规则 获取URI第二段值
     public function _remap($arg,$arg_array)
     {  
-        $this->jiai($arg_array);
-	
+		$info = $this->logic_order->getInfo("number = 'TT-KISS-251021-001'");
+		$packages = json_decode($info['extra_text']['packages'],true);
+		$package_id = $packages[0]['package_id'];
+		$shop = $this->shop->read($info['shop']);
+		var_dump($shop);
+		die;
+        $this->apittv1->downloadLabel($package_id,$shop,$info);
+		die;
 
 
 		//$this->_print();

+ 160 - 0
core/CoreApp/models/Model_apittv1.php

@@ -0,0 +1,160 @@
+<?php
+class Model_apittv1 extends Lin_Model {
+    function __construct(){
+            parent::__construct();
+            $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']);
+        
+        // 按参数名排序
+        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;
+        
+        // 使用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){
+       
+        // 初始化cURL
+        $ch = curl_init();
+        
+        // 设置cURL选项
+        curl_setopt_array($ch, [
+            CURLOPT_URL => $url,
+            CURLOPT_RETURNTRANSFER => true,
+            CURLOPT_HTTPGET => true, // 明确设置为GET请求
+            CURLOPT_HTTPHEADER => $headers,
+            
+            // SSL设置 - 禁用验证(仅测试环境)
+            CURLOPT_SSL_VERIFYPEER => false,
+            CURLOPT_SSL_VERIFYHOST => false,
+            
+            // 其他设置
+            CURLOPT_TIMEOUT => 300,
+            CURLOPT_FOLLOWLOCATION => true,
+        ]);
+        
+        // 执行请求
+        $response = curl_exec($ch);
+        
+        // 检查错误
+        $error_msg = "";
+        if (curl_errno($ch)) {
+            $error_msg = $ch;
+        }
+        
+        // 获取HTTP状态码
+        $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
+        
+        return [
+            'httpCode'=>$httpCode,
+            'response'=>$response,
+            'errorMsg'=>$error_msg
+        ];
+       
+    }
+
+    private function reqPost($url,$headers,$data){
+        // 初始化cURL
+        $ch = curl_init();
+
+        // 设置cURL选项
+        curl_setopt_array($ch, [
+            CURLOPT_URL => $url,
+            CURLOPT_RETURNTRANSFER => true,
+            CURLOPT_POST => true,
+            CURLOPT_HTTPHEADER => $headers,
+            CURLOPT_POSTFIELDS => json_encode($data),
+            CURLOPT_SSL_VERIFYPEER => false, // 根据实际情况调整,生产环境建议设为true
+            CURLOPT_TIMEOUT => 300,
+        ]);
+
+        // 执行请求
+        $response = curl_exec($ch);
+
+        // 检查错误
+        $error_msg = "";
+        if (curl_errno($ch)) {
+            $error_msg = curl_error($ch);
+        }
+
+        // 获取HTTP状态码
+        $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
+
+        // 关闭cURL资源
+        curl_close($ch);
+
+        return [
+            'httpCode'=>$httpCode,
+            'response'=>$response,
+            'errorMsg'=>$error_msg
+        ];
+    }
+
+    public function downloadLabel($package_id,$shop,$info){
+        $url = 'https://open-api.tiktokglobalshop.com';
+		$link = '/fulfillment/202309/packages/'.$package_id.'/shipping_documents';
+		$time = time();
+		$link .= '?shop_cipher='.$shop['shop_cipher'].'&app_key='.$shop['app_key'].'&timestamp='.$time."&document_type=SHIPPING_LABEL";
+        $url = $url.$link;
+        $headers = array('Content-Type: application/json','x-tts-access-token:'.$shop['token']);
+		$sign = $this->sign($url,$headers,[],$shop['app_key']);
+		$url .= $link.'&sign='.$sign;
+		$res = $this->reqGet($url,$headers);
+        if($res['httpCode'] != 200){
+            echo "<pre>";
+            print_r($res);
+        }else{
+            echo "<pre>";
+            print_r($res);
+        }
+		 
+    }
+   
+}