Jelajahi Sumber

顺丰跑腿的订单号添加转换方法:1.一个生成唯一新订单号方法 2.另一个还原订单号方法

shizhongqi 7 bulan lalu
induk
melakukan
a9b5f8712d

+ 2 - 1
common/components/delivery/platform/didi/CallBackHandler.php

@@ -64,6 +64,7 @@ class CallBackHandler
     {
         $didiOrderNo = $data['orderNo'];
         $outOrderNo = $data['outOrderNo'];
+        $outOrderNo = Didi::getSystemOrder($outOrderNo); //还原为数据库中的订单号
 
         // 查找主订单
         $order = OrderClass::getByCondition(['orderSn' => $outOrderNo], true);
@@ -168,7 +169,7 @@ class CallBackHandler
     private function processOrderCallback($data)
     {
         $didiOrderNo = isset($data['didiOrderNo']) ? $data['didiOrderNo'] : '';
-        $outOrderNo = isset($data['outOrderNo']) ? $data['outOrderNo'] : '';
+        $outOrderNo = isset($data['outOrderNo']) ? Didi::getSystemOrder($data['outOrderNo']) : ''; //还原为数据库中的订单号
         $didiStatus = isset($data['status']) ? $data['status'] : '';
         
         if (empty($outOrderNo)) {

+ 29 - 0
common/components/delivery/platform/didi/Didi.php

@@ -102,4 +102,33 @@ class Didi
         
         return $this->baseUrl . '/gateway?' . http_build_query($queryParams);
     }
+
+    /**
+     * 生成唯一的跑腿订单号
+     * @param $orderId
+     * @return string
+     */
+    public static function generateUniOroder($orderId)
+    {
+        return $orderId . '-' . ((int)microtime(true) * 1000);
+    }
+
+    /**
+     * 还原为数据库中的订单号
+     * @param $orderId
+     * @return false|string
+     */
+    public static function getSystemOrder($orderId)
+    {
+        $pos = strpos($orderId, '-');
+        if ($pos !== false) {               // 确实找到了
+            $left  = substr($orderId, 0, $pos); // a-b-c
+            $right = substr($orderId, $pos + 1); // d
+        } else {
+            $left = $orderId;   // 没有 -
+            $right = '';
+        }
+
+        return $left;
+    }
 }

+ 1 - 4
common/components/delivery/services/adapter/DidiAdapter.php

@@ -1,9 +1,6 @@
 <?php
 namespace common\components\delivery\services\adapter;
 
-use bizGhs\express\classes\DeliveryOrderClass;
-use bizGhs\express\classes\GhsDeliveryOrderClass;
-use bizGhs\order\classes\OrderClass;
 use common\components\delivery\helpers\HttpClient;
 use common\components\delivery\platform\didi\Didi;
 use Yii;
@@ -272,7 +269,7 @@ class DidiAdapter extends Didi implements Adapter
         // ------------------ 入参构建 ------------------
         $businessParams = [
             'estimateIdList' => [$estimateId], // 预估ID
-            'outOrderNo' => $order['issOrderNo'], // 接入方订单号
+            'outOrderNo' => self::generateUniOroder($order['issOrderNo']), // 接入方订单号
             'fromAddress' => $fromAddress,
             'toAddress' => $toAddress,
             'goodsType' => $goodsType,