|
@@ -1,7 +1,10 @@
|
|
|
<?php
|
|
|
declare(strict_types=0);
|
|
|
|
|
|
-require_once (BASE_ROOT_PATH . '/helper/model_helper.php');
|
|
|
+require_once(BASE_ROOT_PATH . '/helper/model_helper.php');
|
|
|
+require_once(BASE_HELPER_PATH . '/refill/policy/transfer.php');
|
|
|
+
|
|
|
+use refill;
|
|
|
|
|
|
class proxy
|
|
|
{
|
|
@@ -26,6 +29,68 @@ class proxy
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
+ private function need_transfer(refill\order $order)
|
|
|
+ {
|
|
|
+ $order_time = $order->order_time();
|
|
|
+ $mchid = $order->mchid();
|
|
|
+ $ret = refill\transfer::instance()->need_transfer($mchid,$order_time);
|
|
|
+
|
|
|
+ return $ret;
|
|
|
+ }
|
|
|
+
|
|
|
+ private function transfer(refill\order $order) : bool
|
|
|
+ {
|
|
|
+ $add_success = function (refill\order $order)
|
|
|
+ {
|
|
|
+ $mchid = $order->mchid();
|
|
|
+ $mch_order = $order->mch_order();
|
|
|
+ [$success,$order_id,$errmsg] = refill\RefillFactory::instance()->success_order($order);
|
|
|
+
|
|
|
+ if($success) {
|
|
|
+ refill\util::pop_queue_order($mchid, $mch_order);
|
|
|
+ QueueClient::push("NotifyMerchantComplete", ['order_id' => $order_id, 'manual' => false]);
|
|
|
+ }
|
|
|
+
|
|
|
+ return $success;
|
|
|
+ };
|
|
|
+
|
|
|
+ $transfer_params = function (refill\order $order)
|
|
|
+ {
|
|
|
+ $mchid = $order->mchid();
|
|
|
+ $trans_mchid = refill\transfer::instance()->transfer_mchid($mchid);
|
|
|
+
|
|
|
+
|
|
|
+ $params = ['mchid' => $trans_mchid,
|
|
|
+ 'buyer_id' => $this->adminid(),
|
|
|
+ 'amount' => $order->spec(),
|
|
|
+ 'card_no' => $order->card_no(),
|
|
|
+ 'mch_order' => $order->mch_order(),
|
|
|
+ 'notify_url' => $notify_url,
|
|
|
+ 'org_quality' => 0,
|
|
|
+ 'order_time' => time()
|
|
|
+ ];
|
|
|
+
|
|
|
+ refill\util::push_queue_order($this->mchid(),$mch_order,ORDER_STATE_QUEUE);
|
|
|
+ Model('refill_order')->add_detail($this->mchid(),$mch_order,$params,ORDER_STATE_QUEUE);
|
|
|
+
|
|
|
+ [$can_refill, $period] = refill\util::can_commit($card_no, $card_type);
|
|
|
+ if ($can_refill === false) {
|
|
|
+ $state = refill\util::async_add($params, $period);
|
|
|
+ } else {
|
|
|
+ $state = refill\util::push_add($params);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ };
|
|
|
+
|
|
|
+ if($add_success($order)) {
|
|
|
+ $params = $transfer_params($order);
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
public function add($params)
|
|
|
{
|
|
|
$order = refill\order::from_parameters($params);
|
|
@@ -67,6 +132,9 @@ class proxy
|
|
|
if($order->first_commit()) {
|
|
|
refill\util::incr_user_commit($mchid,$order->card_type(),$order->spec(),$org_quality);
|
|
|
}
|
|
|
+ elseif($this->need_transfer($order)) {
|
|
|
+ return $this->transfer($order);
|
|
|
+ }
|
|
|
|
|
|
[$errcode, $errmsg, $order_id, $neterr,$net_errno] = refill\RefillFactory::instance()->add($order);
|
|
|
if($errcode !== true)
|