123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 |
- <?php
- namespace addons\shopro\library\express;
- use think\exception\HttpResponseException;
- use app\admin\model\shopro\order\Express as ExpressModel;
- class Express
- {
-
- protected $driver = null;
- public function __construct()
- {
- $this->driver = sheep_config('shop.dispatch.driver');
- }
-
- public function provider($driver = null)
- {
- $driver = $driver ?: $this->getDefaultDriver();
- $class = "\\addons\\shopro\\library\\express\\provider\\" . \think\helper\Str::studly($driver);
- if (class_exists($class)) {
- return new $class($this);
- }
- error_stop('物流平台类型不支持');
- }
-
- public function updateOrderExpress($orderExpress = 0)
- {
- try {
- if ($this->driver == 'thinkapi') {
-
- if (is_numeric($orderExpress)) {
- $orderExpresses = ExpressModel::where('order_id', $orderExpress)->select();
- }
- foreach ($orderExpresses as $key => $orderExpress) {
- $this->updateExpress($orderExpress);
- }
- }
- } catch (HttpResponseException $e) {
- $data = $e->getResponse()->getData();
- $message = $data ? ($data['msg'] ?? '') : $e->getMessage();
- format_log_error($e, 'updateOrderExpress.HttpResponseException', $message);
- } catch(\Exception $e) {
- format_log_error($e, 'updateOrderExpress.HttpResponseException', '获取物流信息错误');
- }
- }
-
- public function updateExpress($orderExpress)
- {
- if ($this->driver == 'thinkapi' && $orderExpress->status != 'signfor') {
-
- $key = 'express:' . $orderExpress->id . ':code:' . $orderExpress->express_no;
- if (cache('?'.$key)) {
- return true;
- }
-
- $this->provider()->search([
- 'order_id' => $orderExpress['order_id'],
- 'express_code' => $orderExpress['express_code'],
- 'express_no' => $orderExpress['express_no']
- ], $orderExpress);
-
- cache($key, time(), 300);
- }
- return true;
- }
-
- public function getDefaultDriver()
- {
- return $this->driver;
- }
- public function __call($funcname, $arguments)
- {
- return $this->provider()->{$funcname}(...$arguments);
- }
- }
|