Преглед изворни кода

fix(address): 更新地址解析API配置和请求方式

- 更改API网关地址从 kzaddress2 到 slyparcel
- 更新API路径从 /api/address/parse 到 /v2/express_address/query
- 将请求方式从GET改为POST
- 修改请求参数名称从 address 到 rawAddress
- 使用postRequest方法替换getRequest方法
- 添加对新接口返回格式的数据提取逻辑
- 增加接口错误码处理和日志记录
shichen пре 2 месеци
родитељ
комит
b0d262dafb
2 измењених фајлова са 20 додато и 6 уклоњено
  1. 18 4
      app/common/repositories/user/UserAddressRepository.php
  2. 2 2
      config/third_party.php

+ 18 - 4
app/common/repositories/user/UserAddressRepository.php

@@ -145,7 +145,7 @@ class UserAddressRepository extends BaseRepository
145 145
      * 调用阿里云市场地址解析接口,将完整的地址文本解析为省/市/区/街道等结构化信息
146 146
      *
147 147
      * 接口文档: https://market.aliyun.com/detail/cmapi00067026
148
-     * 请求方式: GET
148
+     * 请求方式: POST
149 149
      * 认证方式: Authorization:APPCODE
150 150
      *
151 151
      * @param string $address 待解析的地址文本,如 "北京市朝阳区建国路88号SOHO现代城A座1508室"
@@ -170,13 +170,13 @@ class UserAddressRepository extends BaseRepository
170 170
             return ['code' => -2, 'msg' => $msg, 'data' => []];
171 171
         }
172 172
 
173
-        $url = rtrim($config['gatewayUrl'] ?? 'https://kzaddress2.market.alicloudapi.com', '/')
174
-             . ($config['apiPath'] ?? '/api/address/parse');
173
+        $url = rtrim($config['gatewayUrl'] ?? 'https://slyparcel.market.alicloudapi.com', '/')
174
+             . ($config['apiPath'] ?? '/v2/express_address/query');
175 175
 
176 176
         $header = ['Authorization:APPCODE ' . $appCode];
177 177
 
178 178
         try {
179
-            $res = HttpService::getRequest($url, ['address' => $address], $header);
179
+            $res = HttpService::postRequest($url, ['rawAddress' => $address], $header);
180 180
             if ($res === false) {
181 181
                 $msg = '地址解析请求失败';
182 182
                 Log::error($msg . ':' . $url . ',地址:' . $address);
@@ -190,6 +190,20 @@ class UserAddressRepository extends BaseRepository
190 190
                 return ['code' => -4, 'msg' => $msg, 'data' => []];
191 191
             }
192 192
 
193
+            // 接口返回格式:{"msg":"成功","success":true,"code":200,"data":{"orderNo":"...","data":{...}}}
194
+            // 提取内层 data.data 作为解析结果
195
+            if (isset($result['code']) && $result['code'] == 200 && isset($result['data']['data'])) {
196
+                return ['code' => 200, 'msg' => '成功', 'data' => $result['data']['data']];
197
+            }
198
+
199
+            // 如果外层 code 不是 200,返回接口的错误信息
200
+            if (isset($result['code']) && $result['code'] != 200) {
201
+                $msg = $result['msg'] ?? '地址解析失败';
202
+                Log::error($msg . ',原始数据:' . $res);
203
+                return ['code' => $result['code'], 'msg' => $msg, 'data' => []];
204
+            }
205
+
206
+            // 兜底:返回原始结果
193 207
             return ['code' => 200, 'msg' => '成功', 'data' => $result];
194 208
         } catch (\Throwable $e) {
195 209
             $msg = '地址解析异常:' . $e->getMessage();

+ 2 - 2
config/third_party.php

@@ -32,8 +32,8 @@ return [
32 32
         // 阿里云市场 AppCode(从阿里云市场控制台获取)
33 33
         'appCode' => '10e4d1cae6c245049d0ec51bc079a3d6',
34 34
         // API 网关地址
35
-        'gatewayUrl' => 'https://kzaddress2.market.alicloudapi.com',
35
+        'gatewayUrl' => 'https://slyparcel.market.alicloudapi.com',
36 36
         // API 路径
37
-        'apiPath' => '/api/address/parse',
37
+        'apiPath' => '/v2/express_address/query',
38 38
     ]
39 39
 ];