Bladeren bron

同城配送订单状态回调接口优化

shizhongqi 11 maanden geleden
bovenliggende
commit
967ec05c58
1 gewijzigde bestanden met toevoegingen van 32 en 40 verwijderingen
  1. 32 40
      app-hd/controllers/IntraCityController.php

+ 32 - 40
app-hd/controllers/IntraCityController.php

@@ -636,43 +636,48 @@ class IntraCityController extends BaseController
      */
     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);
+        $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('回调请求的数据为空');
-                }
+            if (empty($callbackData)) {
+                util::fail('回调请求的数据为空');
             }
+        }
+
+        // 从配置中获取安全token
+        // $token = Yii::$app->params['wx_intracity_token'] ?? 'your_token_here';
+        // $result = IntraCityExpress::handleOrderCallback($callbackData, $token);
 
-            // 从配置中获取安全token
-            // $token = Yii::$app->params['wx_intracity_token'] ?? 'your_token_here';
-            // $result = IntraCityExpress::handleOrderCallback($callbackData, $token);
+        // 记录回调日志
+        Yii::info('同城配送回调:' . json_encode($callbackData, JSON_UNESCAPED_UNICODE));
 
-            // 记录回调日志
-            Yii::info('同城配送回调:' . json_encode($callbackData, JSON_UNESCAPED_UNICODE));
+        $storeOrderId = isset($callbackData['store_order_id']) ? $callbackData['store_order_id'] : 0;
+        $wxStoreId = isset($callbackData['wx_store_id']) ? $callbackData['wx_store_id'] : ''; //微信门店编号
+        if (empty($storeOrderId) || empty($wxStoreId)) {
+            return $this->asJson(['return_code' => 1, 'return_msg' => '请求参数不正确']);
+        }
 
-            $storeOrderId = isset($callbackData['store_order_id']) ? $callbackData['store_order_id'] : 0;
-            $wxStoreId = $callbackData['wx_store_id'];
 
+        try {
             // 使用 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();
+                return $this->asJson(['return_code' => 1, 'return_msg' => '系统错误']);
             }
             // 从 $storeOrderId 提取 orderId
             $arr = explode('_', $storeOrderId);
             $orderId = intval($arr[0]);
+            if ($orderId == 0) {
+                Yii::error('订单号为0.  store_order_id: ' . $storeOrderId . ',wx_store_id: ' . $wxStoreId);
+                return $this->asJson(['return_code' => 1, 'return_msg' => '系统错误']);
+            }
 
+            $tx = Yii::$app->db->beginTransaction(); // ====================== 开启事务
             $msg = ''; // 发通知的内容(默认为空,根据情况生成。没有内容则不会发通知)
             $orderStatus = intval($callbackData['order_status']);
             switch ($orderStatus) {
@@ -756,28 +761,15 @@ class IntraCityController extends BaseController
             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();
+                $tx->rollBack();  // ====================== 事务回滚
+                return $this->asJson(['return_code' => 1, 'return_msg' => '系统错误']);
             }
 
-            $result = [
-                'return_code' => 0,
-                'return_msg' => 'OK'
-            ];
-            echo Json::encode($result);
-            exit();
+            $tx->commit();  // ====================== 事务提交
+            return $this->asJson(['return_code' => 0, 'return_msg' => 'OK']); // 成功状态的返回数据
         } catch (\Exception $e) {
             Yii::error('同城配送回调处理异常:' . $e->getMessage());
-
-            echo Json::encode([
-                'return_code' => 1,
-                'return_msg' => '系统错误'
-            ]);
-            exit();
+            return $this->asJson(['return_code' => 1, 'return_msg' => '系统错误']);
         }
     }