|
|
@@ -589,141 +589,4 @@ class IntraCityController extends BaseController
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- /**
|
|
|
- * 微信回调接口
|
|
|
- * POST /intra-city/callback
|
|
|
- */
|
|
|
- public function actionCallback()
|
|
|
- {
|
|
|
- try {
|
|
|
- $callbackData = Yii::$app->request->post();
|
|
|
- if (empty($callbackData)) {
|
|
|
- $postStr = file_get_contents('php://input');
|
|
|
- // 处理转义字符,将JSON字符串正确解析为数组
|
|
|
- $postStr = stripslashes($postStr);
|
|
|
- $callbackData = json_decode($postStr, true);
|
|
|
-
|
|
|
- if (empty($callbackData)) {
|
|
|
- util::fail('回调请求的数据为空');
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- // 从配置中获取安全token
|
|
|
- // $token = Yii::$app->params['wx_intracity_token'] ?? 'your_token_here';
|
|
|
- // $result = IntraCityExpress::handleOrderCallback($callbackData, $token);
|
|
|
-
|
|
|
- // 记录回调日志
|
|
|
- Yii::info('同城配送回调:' . json_encode($callbackData, JSON_UNESCAPED_UNICODE));
|
|
|
-
|
|
|
- $storeOrderId = isset($callbackData['store_order_id']) ? $callbackData['store_order_id'] : 0;
|
|
|
- $wxStoreId = $callbackData['wx_store_id'];
|
|
|
-
|
|
|
- // 使用 storeOrderId 与 wxStoreId 去查询 xhExpressOrder 表
|
|
|
- $eo = ExpressOrderClass::getByCondition(['storeOrderId' => $storeOrderId, 'wxStoreId' => $wxStoreId], true, false);
|
|
|
- if (empty($eo)) {
|
|
|
- Yii::error('订单不存在.store_order_id: ' . $storeOrderId . ',wx_store_id: ' . $wxStoreId);
|
|
|
- echo Json::encode([
|
|
|
- 'return_code' => 1,
|
|
|
- 'return_msg' => '系统错误'
|
|
|
- ]);
|
|
|
- exit();
|
|
|
- }
|
|
|
- // 从 $storeOrderId 提取 orderId
|
|
|
- $arr = explode('_', $storeOrderId);
|
|
|
- $orderId = intval($arr[0]);
|
|
|
-
|
|
|
- $orderStatus = intval($callbackData['order_status']);
|
|
|
- switch ($orderStatus) {
|
|
|
- // 订单创建成功
|
|
|
- case IntraCityExpress::ORDER_STATUS_CREATED:
|
|
|
- $eo->orderStatus = ExpressOrder::ORDER_STATUS_CREATED;
|
|
|
- $eo->status = ExpressOrder::STATUS_CREATED;
|
|
|
- // 更新 xhOrder 表的订单状态与配送状态 -- 配送中|已发货
|
|
|
- OrderClass::updateById($orderId, ['status' => OrderClass::ORDER_STATUS_SENDING, 'sendStatus' => OrderClass::SEND_STATUS_SENDING]);
|
|
|
- break;
|
|
|
-
|
|
|
- // 商家取消订单
|
|
|
- case IntraCityExpress::ORDER_STATUS_CANCELED_BY_MERCHANT:
|
|
|
- $eo->orderStatus = ExpressOrder::ORDER_STATUS_CANCELED_BY_MERCHANT;
|
|
|
- // 更新 xhOrder 表的订单状态与配送状态 -- 待配送|取消
|
|
|
- OrderClass::updateById($orderId, ['status' => OrderClass::ORDER_STATUS_UN_SEND, 'sendStatus' => OrderClass::SEND_STATUS_CANCEL]);
|
|
|
- break;
|
|
|
-
|
|
|
- // 配送方取消订单
|
|
|
- case IntraCityExpress::ORDER_STATUS_CANCELED_BY_DELIVERY:
|
|
|
- $eo->orderStatus = ExpressOrder::ORDER_STATUS_CANCELED_BY_DELIVERY;
|
|
|
- $eo->status = ExpressOrder::STATUS_CANCELED;
|
|
|
- // 更新 xhOrder 表的订单状态与配送状态 -- 待配送|取消
|
|
|
- OrderClass::updateById($orderId, ['status' => OrderClass::ORDER_STATUS_UN_SEND, 'sendStatus' => OrderClass::SEND_STATUS_CANCEL]);
|
|
|
- break;
|
|
|
-
|
|
|
- // 配送员接单
|
|
|
- case IntraCityExpress::ORDER_STATUS_ACCEPTED:
|
|
|
- $eo->orderStatus = ExpressOrder::ORDER_STATUS_ACCEPTED;
|
|
|
- // 更新 xhOrder 表的订单状态与配送状态 -- 配送中|已发货
|
|
|
- OrderClass::updateById($orderId, ['status' => OrderClass::ORDER_STATUS_SENDING, 'sendStatus' => OrderClass::SEND_STATUS_SENDING]); //订单创建时已执行了,这儿重复更新
|
|
|
- break;
|
|
|
-
|
|
|
- // 配送员到店
|
|
|
- case IntraCityExpress::ORDER_STATUS_ARRIVED:
|
|
|
- $eo->orderStatus = ExpressOrder::ORDER_STATUS_ARRIVED;
|
|
|
- // 更新 xhOrder 表的订单状态与配送状态 -- 配送中|已发货
|
|
|
- OrderClass::updateById($orderId, ['status' => OrderClass::ORDER_STATUS_SENDING, 'sendStatus' => OrderClass::SEND_STATUS_SENDING]); //订单创建时已执行了,这儿重复更新
|
|
|
- break;
|
|
|
-
|
|
|
- // 配送中
|
|
|
- case IntraCityExpress::ORDER_STATUS_DELIVERING:
|
|
|
- $eo->orderStatus = ExpressOrder::ORDER_STATUS_DELIVERING;
|
|
|
- break;
|
|
|
-
|
|
|
- // 配送员撤单
|
|
|
- case IntraCityExpress::ORDER_STATUS_WITHDRAWN:
|
|
|
- $eo->orderStatus = ExpressOrder::ORDER_STATUS_WITHDRAWN;
|
|
|
- // 更新 xhOrder 表的订单状态与配送状态 -- 待配送|未发货
|
|
|
- OrderClass::updateById($orderId, ['status' => OrderClass::ORDER_STATUS_UN_SEND, 'sendStatus' => OrderClass::SEND_STATUS_UNSEND]);
|
|
|
- break;
|
|
|
-
|
|
|
- // 配送完成
|
|
|
- case IntraCityExpress::ORDER_STATUS_COMPLETED:
|
|
|
- $eo->orderStatus = ExpressOrder::ORDER_STATUS_COMPLETED;
|
|
|
- $eo->status = ExpressOrder::STATUS_COMPLETED;
|
|
|
- // 更新 xhOrder 表的订单状态与配送状态 -- 已完成|已送达
|
|
|
- OrderClass::updateById($orderId, ['status' => OrderClass::ORDER_STATUS_COMPLETE, 'sendStatus' => OrderClass::SEND_STATUS_COMPLETED]);
|
|
|
- break;
|
|
|
-
|
|
|
- // 配送异常
|
|
|
- case IntraCityExpress::ORDER_STATUS_EXCEPTION:
|
|
|
- $eo->orderStatus = ExpressOrder::ORDER_STATUS_EXCEPTION;
|
|
|
- noticeUtil::push('同城配送异常 --- store_order_id(orderId):' . $storeOrderId . ',wx_store_id:' . $wxStoreId);
|
|
|
- break;
|
|
|
- }
|
|
|
- $re = $eo->save();
|
|
|
- if (!$re) {
|
|
|
- noticeUtil::push('同城配送回调更新订单状态失败. store_order_id:' . $storeOrderId . ',wx_store_id:' . $wxStoreId . ',status:' . $eo->status);
|
|
|
- Yii::error('更新订单状态失败. store_order_id:' . $storeOrderId . ',wx_store_id:' . $wxStoreId . ',status:' . $eo->status);
|
|
|
- $re = [
|
|
|
- 'return_code' => 0,
|
|
|
- 'return_msg' => 'OK'
|
|
|
- ];
|
|
|
- echo Json::encode($re);
|
|
|
- exit();
|
|
|
- }
|
|
|
-
|
|
|
- $result = [
|
|
|
- 'return_code' => 0,
|
|
|
- 'return_msg' => 'OK'
|
|
|
- ];
|
|
|
- echo Json::encode($result);
|
|
|
- exit();
|
|
|
- } catch (\Exception $e) {
|
|
|
- Yii::error('同城配送回调处理异常:' . $e->getMessage());
|
|
|
-
|
|
|
- echo Json::encode([
|
|
|
- 'return_code' => 1,
|
|
|
- 'return_msg' => '系统错误'
|
|
|
- ]);
|
|
|
- exit();
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
}
|