|
|
@@ -11,6 +11,8 @@ use app\common\repositories\BaseRepository;
|
|
11
|
11
|
use app\common\dao\user\UserAddressDao as dao;
|
|
12
|
12
|
use app\common\repositories\store\shipping\CityRepository;
|
|
13
|
13
|
use app\entity\data\user\UserAddressEntity;
|
|
|
14
|
+use crmeb\services\HttpService;
|
|
|
15
|
+use think\facade\Log;
|
|
14
|
16
|
|
|
15
|
17
|
/**
|
|
16
|
18
|
* Class UserAddressRepository
|
|
|
@@ -136,4 +138,63 @@ class UserAddressRepository extends BaseRepository
|
|
136
|
138
|
$addressEntity = $this->dao->getAddressEntityByAddressId($addressId);
|
|
137
|
139
|
return $addressEntity;
|
|
138
|
140
|
}
|
|
|
141
|
+
|
|
|
142
|
+ /**
|
|
|
143
|
+ * 阿里云市场 - 地址解析
|
|
|
144
|
+ *
|
|
|
145
|
+ * 调用阿里云市场地址解析接口,将完整的地址文本解析为省/市/区/街道等结构化信息
|
|
|
146
|
+ *
|
|
|
147
|
+ * 接口文档: https://market.aliyun.com/detail/cmapi00067026
|
|
|
148
|
+ * 请求方式: GET
|
|
|
149
|
+ * 认证方式: Authorization:APPCODE
|
|
|
150
|
+ *
|
|
|
151
|
+ * @param string $address 待解析的地址文本,如 "北京市朝阳区建国路88号SOHO现代城A座1508室"
|
|
|
152
|
+ * @return array 统一返回格式:
|
|
|
153
|
+ * 成功 {"code":200,"msg":"成功","data":{...}}
|
|
|
154
|
+ * 失败 {"code":-1,"msg":"错误信息","data":[]}
|
|
|
155
|
+ */
|
|
|
156
|
+ public function parse($address)
|
|
|
157
|
+ {
|
|
|
158
|
+ $config = config('third_party.aliyun_address_parse');
|
|
|
159
|
+ $appCode = $config['appCode'] ?? '';
|
|
|
160
|
+
|
|
|
161
|
+ if (empty($appCode)) {
|
|
|
162
|
+ $msg = '地址解析失败:未配置阿里云市场 AppCode';
|
|
|
163
|
+ Log::error($msg);
|
|
|
164
|
+ return ['code' => -1, 'msg' => $msg, 'data' => []];
|
|
|
165
|
+ }
|
|
|
166
|
+
|
|
|
167
|
+ if (empty($address)) {
|
|
|
168
|
+ $msg = '地址解析失败:地址文本为空';
|
|
|
169
|
+ Log::error($msg);
|
|
|
170
|
+ return ['code' => -2, 'msg' => $msg, 'data' => []];
|
|
|
171
|
+ }
|
|
|
172
|
+
|
|
|
173
|
+ $url = rtrim($config['gatewayUrl'] ?? 'https://kzaddress2.market.alicloudapi.com', '/')
|
|
|
174
|
+ . ($config['apiPath'] ?? '/api/address/parse');
|
|
|
175
|
+
|
|
|
176
|
+ $header = ['Authorization:APPCODE ' . $appCode];
|
|
|
177
|
+
|
|
|
178
|
+ try {
|
|
|
179
|
+ $res = HttpService::getRequest($url, ['address' => $address], $header);
|
|
|
180
|
+ if ($res === false) {
|
|
|
181
|
+ $msg = '地址解析请求失败';
|
|
|
182
|
+ Log::error($msg . ':' . $url . ',地址:' . $address);
|
|
|
183
|
+ return ['code' => -3, 'msg' => $msg, 'data' => []];
|
|
|
184
|
+ }
|
|
|
185
|
+
|
|
|
186
|
+ $result = json_decode($res, true);
|
|
|
187
|
+ if (json_last_error() !== JSON_ERROR_NONE) {
|
|
|
188
|
+ $msg = '地址解析返回数据解析失败:' . json_last_error_msg();
|
|
|
189
|
+ Log::error($msg . ',原始数据:' . $res);
|
|
|
190
|
+ return ['code' => -4, 'msg' => $msg, 'data' => []];
|
|
|
191
|
+ }
|
|
|
192
|
+
|
|
|
193
|
+ return ['code' => 200, 'msg' => '成功', 'data' => $result];
|
|
|
194
|
+ } catch (\Throwable $e) {
|
|
|
195
|
+ $msg = '地址解析异常:' . $e->getMessage();
|
|
|
196
|
+ Log::error($msg . ',文件:' . $e->getFile() . ',行号:' . $e->getLine());
|
|
|
197
|
+ return ['code' => -5, 'msg' => $msg, 'data' => []];
|
|
|
198
|
+ }
|
|
|
199
|
+ }
|
|
139
|
200
|
}
|