stanley-king 4 years atrás
parent
commit
3da4ebaf11

+ 2 - 0
global.php

@@ -120,6 +120,8 @@ define('ORDER_STATE_SEND', 30);
 //已收货,交易成功
 define('ORDER_STATE_SUCCESS', 40);
 
+define('ORDER_STATE_QUEUE', 50);
+
 //未付款订单,自动取消的分钟
 define('VRORDER_AUTO_CANCEL_MINUTE', 10); //
 //未付款订单,自动取消的天数

+ 1 - 0
helper/rbridge/wsd/Bridge.php

@@ -46,6 +46,7 @@ class Bridge implements IBridge
             'mch_order' => $params['chargeId'],
             'notify_url' => config::MCH_NOTIFY_URL];
 
+        refill\util::push_queue($mchid,$params['chargeId'],time());
         $code = refill\util::push_add($input);
         if($code) {
             $ret = $this->retbody($code, '提交成功', $params);

+ 28 - 0
helper/refill/util.php

@@ -384,5 +384,33 @@ class util
             refill\rlock::decr_mch_storage($mchid,$card_type,$spec,1);
         }
     }
+
     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+    public static function push_queue($mchid,$mch_order,$val)
+    {
+        $ins = Cache::getInstance('cacheredis');
+
+        $name = 'merchant_order_query';
+        $key = "{$mchid}-{$mch_order}";
+        $ins->hset($name, '', [$key => $val]);
+    }
+
+    public static function pop_queue($mchid,$mch_order)
+    {
+        $ins = Cache::getInstance('cacheredis');
+
+        $name = 'merchant_order_query';
+        $key = "{$mchid}-{$mch_order}";
+        $ins->hdel($name, '', $key);
+    }
+
+    public static function query_queue($mchid,$mch_order)
+    {
+        $ins = Cache::getInstance('cacheredis');
+
+        $name = 'merchant_order_query';
+        $key = "{$mchid}-{$mch_order}";
+        $value = $ins->hget($name,'',$key);
+        return $value;
+    }
 }

+ 32 - 15
mobile/control/refill.php

@@ -110,8 +110,10 @@ class refillControl extends merchantControl
 
         [$can_refill, $period] = refill\util::can_commit($card_no, $card_type);
         if ($can_refill === false) {
+            refill\util::push_queue($this->mchid(),$mch_order,time() + $period);
             $state = refill\util::async_add($params, $period);
         } else {
+            refill\util::push_queue($this->mchid(),$mch_order,time());
             $state = refill\util::push_add($params);
         }
 
@@ -178,7 +180,6 @@ class refillControl extends merchantControl
     private function format($order_info,$refill_info)
     {
         $result = [];
-
         $result['mchid'] = $refill_info['mchid'];
         $result['trade_no'] = $refill_info['order_sn'];
         $result['order_sn'] = $refill_info['mch_order'];
@@ -188,9 +189,15 @@ class refillControl extends merchantControl
         $result['order_amount'] = $refill_info['mch_amount'];
         $result['order_time'] = $refill_info['order_time'];
         $result['success_time'] = $refill_info['notify_time'];
-        $result['order_state'] = $order_info['order_state'];
         $result['official_sn'] = $refill_info['official_sn'] ?? "";
 
+        if($refill_info['is_retrying']) {
+            $result['order_state'] = ORDER_STATE_NEW;
+        }
+        else {
+            $result['order_state'] = $order_info['order_state'];
+        }
+
         return $result;
     }
 
@@ -206,23 +213,33 @@ class refillControl extends merchantControl
         $mod_refill = Model('refill_order');
         $refill_info = $mod_refill->getOrderInfo(['mch_order' => $order_sn,'mchid' => $mchid,'inner_status' => 0]);
 
-        if(empty($refill_info)) {
-            return self::outerr(202,"无此订单");
+        if(empty($refill_info))
+        {
+            $ret = refill\util::query_queue($mchid,$order_sn);
+            if ($ret > 0) {
+                $result['mchid'] = $mchid;
+                $result['order_sn'] = $order_sn;
+                $result['order_state'] = ORDER_STATE_QUEUE;
+                return self::outsuccess($result);
+            } else {
+                return self::outerr(202, "无此订单");
+            }
         }
+        else
+        {
+            $vr_order = Model('vr_order');
+            $order_info = $vr_order->getOrderInfo(['order_sn' => $refill_info['order_sn']]);
 
-        $vr_order = Model('vr_order');
-        $order_info = $vr_order->getOrderInfo(['order_sn' => $refill_info['order_sn']]);
+            if(empty($order_info)) {
+                return self::outerr(203,"无此交易号");
+            }
 
-        if(empty($order_info)) {
-            return self::outerr(203,"无此交易号");
-        }
+            if($order_info['order_state'] == ORDER_STATE_SEND) {
+                QueueClient::push("QueryRefillState",['order_id' => $refill_info['order_id']]);
+            }
 
-        if($order_info['order_state'] == ORDER_STATE_SEND) {
-            QueueClient::push("QueryRefillState",['order_id' => $refill_info['order_id']]);
+            $result = $this->format($order_info,$refill_info);
+            return self::outsuccess($result);
         }
-
-        $result = $this->format($order_info,$refill_info);
-
-        return self::outsuccess($result);
     }
 }

+ 1 - 0
racc/control/lzrefill.php

@@ -98,6 +98,7 @@ class lzrefillControl extends lzbaseControl
             'org_quality' => $quality
         ];
 
+        refill\util::push_queue($this->mchid(),$mch_order,time());
         $ret = refill\util::push_add($params);
         if($ret) {
             return self::outsuccess($this->merchant_available);

+ 1 - 0
racc/control/refill.php

@@ -106,6 +106,7 @@ class refillControl extends merchantControl
             'org_quality' => $quality
         ];
 
+        refill\util::push_queue($this->mchid(),$mch_order,time());
         refill\util::push_add($params);
         return self::outsuccess(['state' => true]);
     }

+ 5 - 0
rdispatcher/proxy.php

@@ -69,6 +69,10 @@ class proxy
         $params['commit_times'] += 1;
         $commit_times += 1;
 
+        if(!empty($mch_order) && $last_order_id == 0 && $order_id > 0) {
+            refill\util::pop_queue($mchid,$mch_order);
+        }
+
         if($errcode !== true)
         {
             $fNotify = true;
@@ -96,6 +100,7 @@ class proxy
                     if (empty($order_info)) {
                         $order_id = refill\RefillFactory::instance()->zero_order($mchid, $buyer_id, $amount, $card_no,
                             $mch_order, $idcard, $card_name, $notify_url, $quality, $org_quality, $order_time, $commit_times, $errmsg);
+                        refill\util::pop_queue($mchid,$mch_order);
                     } else {
                         $order_id = $order_info['order_id'];
                     }