|
@@ -536,9 +536,8 @@ class RefillBase
|
|
|
|
|
|
//如果对方没有回调能力,则启动主动查询.
|
|
|
if($provider->callback() === false) {
|
|
|
- QueueClient::async_push("QueryRefillState",['order_id' => $order_id],60);
|
|
|
+ QueueClient::async_push("QueryAutoRefillState",['order_id' => $order_id,'query_times' => 0],5);
|
|
|
}
|
|
|
-
|
|
|
break;
|
|
|
}
|
|
|
else
|
|
@@ -895,6 +894,100 @@ class RefillBase
|
|
|
return $ret;
|
|
|
}
|
|
|
|
|
|
+ public function query_auto($order_id,$query_times)
|
|
|
+ {
|
|
|
+ $query_handler = function ($order_id, $order_info, $state, $order_state, $chname,$order_time)
|
|
|
+ {
|
|
|
+ $mod_refill = Model('refill_order');
|
|
|
+ if ($order_info['order_state'] == ORDER_STATE_PAY) {
|
|
|
+ $query_able = true;
|
|
|
+ } else {
|
|
|
+ $query_able = false;
|
|
|
+ }
|
|
|
+ $vr_part = util::part_vr_order(intval($order_info['add_time']));
|
|
|
+
|
|
|
+ $can_try = false;
|
|
|
+ if($query_able)
|
|
|
+ {
|
|
|
+ if(!$state) {
|
|
|
+ QueueClient::async_push("QueryOrderNeterr",['order_id' => $order_id],30);
|
|
|
+ $neterr = true;
|
|
|
+ }
|
|
|
+ elseif($order_state == ORDER_STATE_SUCCESS || $order_state == ORDER_STATE_CANCEL)
|
|
|
+ {
|
|
|
+ $neterr = false;
|
|
|
+ $logic_vr_order = Logic("vr_order");
|
|
|
+ $logic_vr_order->changeOrderStateSend($order_id, true, $vr_part);
|
|
|
+
|
|
|
+ $data = ['commit_time' => time()];
|
|
|
+ $mod_refill->partition(util::part_refill($order_time))->edit($order_id, $data);
|
|
|
+ QueueClient::async_push("QueryRefillState", ['order_id' => $order_id], 1);
|
|
|
+ }
|
|
|
+ elseif ($order_state == ORDER_STATE_NOEXIST) {
|
|
|
+ $neterr = false;
|
|
|
+ $logic_vr_order = Logic("vr_order");
|
|
|
+ $logic_vr_order->changeOrderStateSend($order_id, true, $vr_part);
|
|
|
+ $can_try = true;
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ $neterr = true;
|
|
|
+ QueueClient::async_push("QueryOrderNeterr",['order_id' => $order_id],30);
|
|
|
+ }
|
|
|
+
|
|
|
+ util::monitor_netchk($chname,$neterr);
|
|
|
+ }
|
|
|
+
|
|
|
+ return [true,$can_try];
|
|
|
+ };
|
|
|
+
|
|
|
+ ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
+ $mod_order = Model('vr_order');
|
|
|
+ $order_info = $mod_order->partition(util::part_notify())->getOrderInfo(['order_id' => $order_id]);
|
|
|
+ if (empty($order_info) || $order_info['order_state'] != ORDER_STATE_PAY) return false;
|
|
|
+
|
|
|
+ $mod_refill = Model('refill_order');
|
|
|
+ $refill_info = $mod_refill->partition(util::part_notify())->getOrderInfo(['order_id' => $order_id,'inner_status' => 0]);
|
|
|
+
|
|
|
+ $chname = $refill_info['channel_name'];
|
|
|
+ $provider = $this->mPolicy->provider($chname);
|
|
|
+ if(empty($provider)) return false;
|
|
|
+
|
|
|
+ $values = $provider->query($refill_info);
|
|
|
+ if (count($values) == 2) {
|
|
|
+ [$state, $order_state] = $values;
|
|
|
+ $official_sn = false;
|
|
|
+ } else {
|
|
|
+ [$state, $order_state, $official_sn] = $values;
|
|
|
+ }
|
|
|
+
|
|
|
+ try {
|
|
|
+ $can_try = false;
|
|
|
+ $tran = new trans_wapper($mod_order, 'query_net change order state trans');
|
|
|
+ $order_info = $mod_order->partition(util::part_notify())->getOrderInfo(['order_id' => $order_id], '*', true, true);
|
|
|
+ $order_time = intval($refill_info['order_time']);
|
|
|
+ [$ret, $can_try] = $query_handler($order_id, $order_info, $state, $order_state, $chname,$order_time);
|
|
|
+ $tran->commit();
|
|
|
+ $trans_succ = true;
|
|
|
+ }
|
|
|
+ catch (Exception $ex) {
|
|
|
+ Log::record("Error:" . $ex->getMessage(), Log::ERR);
|
|
|
+ $trans_succ = false;
|
|
|
+ $tran->rollback();
|
|
|
+ $ret = false;
|
|
|
+ }
|
|
|
+
|
|
|
+ if($can_try)
|
|
|
+ {
|
|
|
+ if($trans_succ) {
|
|
|
+ $this->proc_notify($order_id, false, true, $chname, $official_sn);
|
|
|
+ } else {
|
|
|
+ QueueClient::async_push("QueryOrderNeterr",['order_id' => $order_id],30);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return $ret;
|
|
|
+ }
|
|
|
+
|
|
|
public function manual_success($order_id)
|
|
|
{
|
|
|
$order_id = intval($order_id);
|