Express.php 2.2 KB
<?php

namespace addons\groupon\controller;

use addons\groupon\exception\Exception;
use addons\groupon\model\Order;
use addons\groupon\model\User;
use think\Db;
use think\Log;

class Express extends Base
{

    protected $noNeedLogin = ['callback'];
    protected $noNeedRight = ['*'];


    /**
     * 物流信息订阅回调接口
     */
    public function callback()
    {
        $requestData = $this->request->post();

        $expressLib = new \addons\groupon\library\Express();

        // 信息记录日志
        // \think\Log::write('expresscallback:'. json_encode($requestData));

        $data = json_decode(html_entity_decode($requestData['RequestData']), true);
        $expressData = $data['Data'];

        foreach ($expressData as $key => $express) {
            $order_code = $express['OrderCode'] ?? '';

            $orderExpress = null;
            if (substr($order_code, 0, 1) == 'S') {
                // 门店包裹
                $orderExpress = \addons\groupon\model\OrderStoreExpress::where('code', $order_code)->find();
            } 

            if (!$orderExpress) {
                // 包裹不存在,记录日志信息,然后继续下一个
                \think\Log::write('orderExpressNotFound:' . json_encode($express));
                continue;
            }

            if (!$express['Success']) {
                // 失败了
                if (isset($express['Reason']) && ($express['Reason'] == '三天无轨迹' || $express['Reason'] == '七天无轨迹')) {
                    // 需要重新订阅
                    $expressLib->subscribe([
                        'express_code' => $express['ShipperCode'],
                        'express_no' => $express['LogisticCode'],
                        'order_code' => $orderExpress->code ? $orderExpress->code : ''
                    ], $orderExpress, $orderExpress->order ?? null);
                }

                \think\Log::write('orderExpressReason:' . json_encode($express));
                continue;
            }

            $expressLib->checkAndAddTraces($orderExpress, $express);
        }

        $result = $expressLib->setPushResult(true);

        return json($result);
    }
}