Model_apittv1.php 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. <?php
  2. class Model_apittv1 extends Lin_Model {
  3. function __construct(){
  4. parent::__construct();
  5. $this->load->_model("Model_logic_ding","logic_ding");
  6. }
  7. private function sign($method,$query,$body,$secret){
  8. unset($query['sign']);
  9. unset($query['access_token']);
  10. $input = $method;
  11. ksort($query);
  12. foreach ($query as $key => $value) {
  13. $input.= $key.$value;
  14. }
  15. if(!empty($body)){
  16. $input.= json_encode($body);
  17. }
  18. $input = $secret . $input . $secret;
  19. // 生成签名
  20. $sign = hash_hmac('sha256', $input,$secret);
  21. return $sign;
  22. }
  23. private function reqGet($url,$headers){
  24. // 初始化cURL
  25. $ch = curl_init();
  26. // 设置cURL选项
  27. curl_setopt_array($ch, [
  28. CURLOPT_URL => $url,
  29. CURLOPT_RETURNTRANSFER => true,
  30. CURLOPT_HTTPGET => true, // 明确设置为GET请求
  31. CURLOPT_HTTPHEADER => $headers,
  32. // SSL设置 - 禁用验证(仅测试环境)
  33. CURLOPT_SSL_VERIFYPEER => false,
  34. CURLOPT_SSL_VERIFYHOST => false,
  35. // 其他设置
  36. CURLOPT_TIMEOUT => 300,
  37. CURLOPT_FOLLOWLOCATION => true,
  38. ]);
  39. // 执行请求
  40. $response = curl_exec($ch);
  41. // 检查错误
  42. $error_msg = "";
  43. if (curl_errno($ch)) {
  44. $error_msg = $ch;
  45. }
  46. // 获取HTTP状态码
  47. $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
  48. return [
  49. 'httpCode'=>$httpCode,
  50. 'response'=>$response,
  51. 'errorMsg'=>$error_msg
  52. ];
  53. }
  54. private function reqPost($url,$headers,$data){
  55. // 初始化cURL
  56. $ch = curl_init();
  57. // 设置cURL选项
  58. curl_setopt_array($ch, [
  59. CURLOPT_URL => $url,
  60. CURLOPT_RETURNTRANSFER => true,
  61. CURLOPT_POST => true,
  62. CURLOPT_HTTPHEADER => $headers,
  63. CURLOPT_POSTFIELDS => json_encode($data),
  64. CURLOPT_SSL_VERIFYPEER => false, // 根据实际情况调整,生产环境建议设为true
  65. CURLOPT_TIMEOUT => 300,
  66. ]);
  67. // 执行请求
  68. $response = curl_exec($ch);
  69. // 检查错误
  70. $error_msg = "";
  71. if (curl_errno($ch)) {
  72. $error_msg = curl_error($ch);
  73. }
  74. // 获取HTTP状态码
  75. $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
  76. // 关闭cURL资源
  77. curl_close($ch);
  78. return [
  79. 'httpCode'=>$httpCode,
  80. 'response'=>$response,
  81. 'errorMsg'=>$error_msg
  82. ];
  83. }
  84. public function downloadLabel($package_id,$shop,$info){
  85. $url = 'https://open-api.tiktokglobalshop.com';
  86. $link = '/fulfillment/202309/packages/'.$package_id.'/shipping_documents';
  87. $time = time();
  88. $link .= '?shop_cipher='.$shop['shop_cipher'].'&app_key='.$shop['app_key'].'&timestamp='.$time."&document_type=SHIPPING_LABEL";
  89. $url = $url.$link;
  90. $headers = array('Content-Type: application/json','x-tts-access-token:'.$shop['token']);
  91. $sign = $this->sign($url,$headers,[],$shop['app_key']);
  92. $url .= $link.'&sign='.$sign;
  93. $res = $this->reqGet($url,$headers);
  94. if($res['httpCode'] != 200){
  95. echo "<pre>";
  96. print_r($res);
  97. }else{
  98. echo "<pre>";
  99. print_r($res);
  100. }
  101. }
  102. }