stanley-king 1 рік тому
батько
коміт
1732234f74

+ 3 - 4
helper/fcgisrv/XYZRAccServer.php

@@ -18,12 +18,11 @@ use Exception;
 use merchantControl;
 use errcode;
 
-class XYZRAccServer extends BaseServer
+class RAccServer extends BaseServer
 {
     public function __construct($subPath)
     {
         parent::__construct($subPath);
-
         $exfiles = [
 
         ];
@@ -35,9 +34,9 @@ class XYZRAccServer extends BaseServer
     static public function instance()
     {
         if(self::$stInstance == NULL) {
-            self::$stInstance = new XYZRAccServer('racc');
-
+            self::$stInstance = new RAccServer('racc');
         }
+
         return self::$stInstance;
     }
 

+ 0 - 1
mobile/config/config.ini.php

@@ -1,3 +1,2 @@
 <?php
 defined('InShopNC') or exit('Access Invalid!');
-

+ 3 - 0
racc/config/config.ini.php

@@ -0,0 +1,3 @@
+<?php
+defined('InShopNC') or exit('Access Invalid!');
+

+ 0 - 151
racc/control/base.php

@@ -1,151 +0,0 @@
-<?php
-
-class lzbaseControl
-{
-    private $mMchid;
-    private $mAdminid;
-    private $mUseKey;
-    protected $merchant_available;
-    protected $member_available;
-
-    public function __construct()
-    {
-        $mchid = $_POST['usr'];
-        $mchinfo = Model('merchant')->getMerchantInfo(['mchid' => $mchid]);
-        if(empty($mchinfo)) {
-            throw new LzException(self::text_content(-5,0));
-        }
-        else {
-            $this->mAdminid = intval($mchinfo['admin_id']);
-        }
-
-        $mchinfo = Model('merchant')->getMerchantInfo(['mchid' => $mchid]);
-
-        $mod_member = Model('member');
-        $minfo = $mod_member->getMemberInfo(['member_id' => $this->mAdminid], '*', true);
-        $this->merchant_available = ncPriceFormat($minfo['available_predeposit'] - $mchinfo['credit_bonus']);
-        $this->member_available = $minfo['available_predeposit'];
-
-
-        if ($mchinfo['merchant_state'] != 1) {
-            throw new LzException(self::text_content(-7,$this->merchant_available));
-        }
-
-        $ips = unserialize($mchinfo['ip_white_list']);
-        if(!empty($ips)) {
-            $addr = $_SERVER['REMOTE_ADDR'];
-            Log::record("request ip:{$addr}",Log::DEBUG);
-
-            if(!in_array($addr,$ips)) {
-                throw new LzException(self::text_content(-12,$this->merchant_available));
-            }
-        }
-
-        $this->mUseKey = intval($mchinfo['use_key']);
-        if($this->mUseKey && !$this->verify_md5($mchinfo['secure_key'])) {
-            throw new LzException(self::text_content(-4,$this->merchant_available));
-        }
-
-        $this->mMchid = intval($mchid);
-    }
-
-    public function mchid() : int
-    {
-        return $this->mMchid;
-    }
-    public function adminid() : int {
-        return $this->mAdminid;
-    }
-
-
-    private function verify_md5($key)
-    {
-        $input = $_GET;
-        $sign = $input['sgn'];
-
-        $body = $this->sign_body($input);
-        if($this->mUseKey) {
-            $body .= $key;
-        }
-
-        return ($sign == strtoupper(md5($body)));
-    }
-
-    private function sign_body($params)
-    {
-        $op = $params['op'];
-        if($op == 'add_mob') {
-            $content = $params['usr'] . $params['ord'] . $params['mob'] . $params['amt'] . $params['tim'];
-        }
-        elseif($op == 'balance') {
-            $content = $params['usr'];
-        }
-        elseif($op == 'query') {
-            $content = $params['usr'] . $params['ord'];
-        }
-        elseif($op == 'add_third') {
-            $content = $params['usr'] . $params['ord'] . $params['mob'] . $params['product_code'] . $params['tim'];
-        }
-        else {
-            $content = 'error';
-        }
-        return $content;
-    }
-
-    public static function msg($code)
-    {
-        static $msgs = [0 => '订单提交成功',
-            2 => '运营商充值账户余额不足',
-            4 => '账户余额不足',
-            6 => '暂不支持此商品',
-            7 => '连接该运营商设备失败',
-            8 => '在规定时间内不得重复提交同一号码',
-            10 => '该帐号不能在此计算机缴费',
-            11 => '流水号重复',
-            30 => '面值不符',
-            41 => '该地区维护',
-            42 => '运营商设备忙',
-            43 => '暂不支持该面额的缴费',
-            44 => '无该地区缴费权限',
-            -2 => '命令已发送,请查看交易流水是否有缴费成功(这种情况是服务器在排队等待处理,间隔10-20分钟后查单核实)',
-            -3 => '数据添加失败',
-            -4 => '签名错误',
-            -5 => '没有此代理商',
-            -6 => '提交失败',
-            -7 => '无此接口权限',
-            -8 => '提交日期不是当天日期',
-            -9 => '参数不对',
-            -11 => '手机号码位数不符',
-            -12 => '绑定IP不符',
-            1001 => '销售数量请大于0',
-            1002 => '该商品库存维护',
-            1003 => '该供货商品库存维护'];
-
-        if(array_key_exists($code,$msgs)) {
-            return $msgs[$code];
-        }
-        else {
-            return '';
-        }
-    }
-
-    public static function text_content($code,$available)
-    {
-        $msg = self::msg($code);
-        $available = ncPriceFormat($available);
-        $content = "{$code}|{$msg}|{$available}";
-        return $content;
-    }
-
-    public static function outsuccess($available)
-    {
-        echo self::text_content(0,$available);
-        return true;
-    }
-
-    public static function outerr($code,$available)
-    {
-        echo self::text_content($code,$available);
-        return true;
-    }
-}

+ 3 - 3
racc/control/merchant.php

@@ -1,5 +1,6 @@
 <?php
 
+
 class merchantControl
 {
     private $mMchid;
@@ -21,8 +22,8 @@ class merchantControl
         }
 
         $ips = unserialize($mchinfo['ip_white_list']);
-
-        if(!empty($ips)) {
+        if(!empty($ips))
+        {
             $addr = $_SERVER['REMOTE_ADDR'];
             Log::record("request ip:{$addr}",Log::DEBUG);
 
@@ -103,7 +104,6 @@ class merchantControl
         joutput_data($data);
         return true;
     }
-
     public static function outerr($code, $msg = '')
     {
         joutput_error($code, $msg);

+ 422 - 57
racc/control/refill.php

@@ -1,5 +1,6 @@
 <?php
 
+require_once(BASE_ROOT_PATH . '/mobile/control/merchant.php');
 require_once(BASE_HELPER_PATH . '/refill/RefillFactory.php');
 require_once(BASE_HELPER_PATH . '/mtopcard/mtopcard.php');
 require_once(BASE_HELPER_PATH . '/model/member_info.php');
@@ -14,8 +15,10 @@ class refillControl extends merchantControl
 
     public function goodsOp()
     {
-        $result = refill\RefillFactory::instance()->goods();
-        $sorter = function (array $items) {
+        $goods_list = refill\RefillFactory::instance()->goods();
+
+        $sorter = function (array $items)
+        {
             $ret = [];
             foreach ($items as $key => $val) {
                 sort($val);
@@ -24,7 +27,25 @@ class refillControl extends merchantControl
             return $ret;
         };
 
-        $result = $sorter($result);
+        $goods_list = $sorter($goods_list);
+
+        $result = [];
+        $mchid = $this->mchid();
+        $merchant_goods = rcache('merchant_goods', 'refill-', $mchid);
+        $goods = $merchant_goods[$mchid] ?? serialize([]);
+        $goods = unserialize($goods);
+        foreach ($goods_list as $card_type => $value) {
+            $key = mtopcard\scard_type($card_type);
+            if (array_key_exists($key, $goods)) {
+                $result[$key] = $goods[$key];
+            } else {
+                $result[$key] = $value;
+            }
+        }
+        $thrid_refill = Model('thrid_refill');
+        $pcode = $thrid_refill->getMerchantPcode($mchid);
+        $result['third'] = $pcode;
+
         return self::outsuccess($result);
     }
 
@@ -39,7 +60,6 @@ class refillControl extends merchantControl
 
         $card_no = $_GET['cardno'];
         $card_type = mtopcard\simple_card_type($card_no);
-
         if($card_type == mtopcard\UnknownCard) {
             return [false,'卡类型无法识别'];
         }
@@ -54,6 +74,7 @@ class refillControl extends merchantControl
         return [true,""];
     }
 
+
     public function addOp()
     {
         [$success,$error] = $this->check_params($_GET);
@@ -62,56 +83,357 @@ class refillControl extends merchantControl
         }
 
         $amount = intval($_GET['amount']);
-        $card_no = $_GET['cardno'];
+        $card_no = trim($_GET['cardno']);
         $notify_url = $_GET['notifyurl'];
-        $mch_order = $_GET['order_sn']; //对方的order编号
+        $mch_order = $_GET['order_sn'];   //对方的order编号
         $quality = $_GET['quality'] ?? 0;
+        $bind_phone = $_GET['bind_phone'] ?? '';
 
         if(!$this->check_mchorder($this->mchid(),$mch_order)) {
             return self::outerr(205,"客户订单号重复或者为空.");
         }
 
-        if(!$this->can_refill($card_no)) {
-            return self::outerr(206,"平台不支持该卡充值.");
+        $card_type = mtopcard\simple_card_type($card_no);
+        if($card_type === mtopcard\SinopecCard || $card_type === mtopcard\PetroChinaCard)
+        {
+            refill\util::write_card($card_no,$card_type,$bind_phone);
+            if(!$this->can_refill($card_no)) {
+                return self::outerr(206,"平台不支持该卡充值.");
+            }
+
+            $allow = true;
+            if(!$allow)
+            {
+                if ($card_type === mtopcard\SinopecCard) {
+                    $text = "中石化";
+                }
+                else {
+                    $text = "中石油";
+                }
+                return self::outerr(207,"今日贵司{$amount}{$text}充值库存已经用完.");
+            }
         }
 
-//        $card_type = mtopcard\card_type($card_no,$regin_no);
-//        if($card_type === mtopcard\SinopecCard || $card_type === mtopcard\PetroChinaCard)
-//        {
-//            $allow = refill\RefillFactory::instance()->allow($this->mchid(),$card_type,$amount);
-//            if(!$allow) {
-//                if ($card_type === mtopcard\SinopecCard) {
-//                    $text = "中石化";
-//                }
-//                else {
-//                    $text = "中石油";
-//                }
-//                return self::outerr(207,"今日贵司{$amount}{$text}充值库存已经用完.");
-//            }
-//        }
+        $order_time = time();
+        $params = ['mchid' => $this->mchid(),
+            'buyer_id' => $this->adminid(),
+            'amount' => $amount,
+            'card_no' => $card_no,
+            'mch_order' => $mch_order,
+            'notify_url' => $notify_url,
+            'org_quality' => $quality,
+            'order_time' => $order_time
+        ];
 
-        $minfo = new member_info($this->adminid());
-        $available = $minfo->available_predeposit();
+        refill\util::push_queue_order($this->mchid(),$mch_order,ORDER_STATE_QUEUE);
+        Model('refill_order')->add_detail($this->mchid(),$mch_order,$order_time,$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);
+        }
+
+        $mchid = $this->mchid();
+        if ($state === true) {
+            Log::record("refill::util::push_add success mchid={$mchid} mch_order={$mch_order} state={$state}",Log::DEBUG);
+            return self::outsuccess(['state' => true]);
+        } else {
+            refill\util::del_queue_order($this->mchid(),$mch_order);
+            Model('refill_order')->del_detail($this->mchid(),$mch_order);
+            Log::record("refill::util::push_add error mchid={$mchid} mch_order={$mch_order} state={$state}",Log::DEBUG);
+            return self::outerr(208, '提交失败');
+        }
+    }
+
+    private function check_third($params)
+    {
+        if(empty($params['product_code'])) {
+            return [false,'参数没有包含product_code'];
+        }
+
+        $pcode = $params['product_code'];
+        if($this->check_pcode($pcode) == false) {
+            return [false,"对应的产品编码{$pcode}"];
+        }
+
+        if(empty($params['quantity']) || intval($params['quantity']) < 1) {
+            return [false,"购买数量参数不存在,或者小于0"];
+        }
+
+        if(empty($params['notifyurl'])) {
+            return [false,'参数没有包含notifyurl'];
+        }
+        if(empty($params['order_sn'])) {
+            return [false,'参数没有包含贵方唯一订单号:order_sn'];
+        }
+
+        return [true,""];
+    }
+
+    private function check_pcode($pcode)
+    {
+        $mod_third = Model('thrid_refill');
+        $product = $mod_third->getProduct(['system_code' => $pcode]);
+        return !empty($product);
+    }
+
+    private function add_third_product($third_product_type)
+    {
+        [$success,$error] = $this->check_third($_GET);
+        if($success === false) {
+            return self::outerr(201,$error);
+        }
 
-        if($amount > $available) {
-            return self::outerr(203, "余额不足");
+        $amount = refill\util::ThirdRefillAmount;
+        $notify_url = $_GET['notifyurl'];
+        $mch_order = $_GET['order_sn'];   //对方的order编号
+
+        $product_code = $_GET['product_code'];
+        $card_no = $_GET['cardno'] ?? '';
+        $quantity = $_GET['quantity'];
+        $third_card_type = $_GET['card_type'] ?? 1;
+
+        //三方充值没有质量
+        $quality = 1;
+        $card_type = mtopcard\ThirdRefillCard;
+
+        if(!$this->check_mchorder($this->mchid(),$mch_order)) {
+            return self::outerr(205,"客户订单号重复或者为空.");
         }
 
         $order_time = time();
         $params = ['mchid' => $this->mchid(),
             'buyer_id' => $this->adminid(),
             'amount' => $amount,
+            'mch_order' => $mch_order,
+            'notify_url' => $notify_url,
+            'org_quality' => $quality,
+            'card_type' => $card_type,
             'card_no' => $card_no,
+            'product_code' => $product_code,
+            'quantity' => $quantity,
+            'third_card_type' => $third_card_type,
+            'third_product_type' => $third_product_type,
+            'order_time' => $order_time
+        ];
+
+        refill\util::push_queue_order($this->mchid(),$mch_order,ORDER_STATE_QUEUE);
+        Model('refill_order')->add_detail($this->mchid(), $mch_order, $order_time, $params, ORDER_STATE_QUEUE);
+
+        $state = refill\util::push_addthird($params);
+        if ($state === true) {
+            return self::outsuccess(['state' => true]);
+        } else {
+            refill\util::del_queue_order($this->mchid(),$mch_order);
+            Model('refill_order')->del_detail($this->mchid(),$mch_order);
+            return self::outerr(208, '提交失败');
+        }
+    }
+
+    public function add_thirdOp()
+    {
+        return $this->add_third_product(mtopcard\ThirdOnlineProduct);
+    }
+
+    public function add_netOp()
+    {
+        return $this->add_third_product(mtopcard\ThirdNetTrafficPoroduct);
+    }
+
+    private function check_electirc($params)
+    {
+        if(empty($params['cardno'])) {
+            return [false,'参数没有包含cardno'];
+        }
+        if(empty($params['notifyurl'])) {
+            return [false,'参数没有包含notifyurl'];
+        }
+        if(empty($params['order_sn'])) {
+            return [false,'参数没有包含贵方唯一订单号:order_sn'];
+        }
+        if(empty($params['amount']) || intval($params['amount']) <= 0) {
+            return [false,'参数没有包含充值金额:amount'];
+        }
+
+        if(empty($params['company_type']) || !in_array($params['company_type'],mtopcard\ElectricCompanyTypes)) {
+            return [false,'没有电卡类型参数(nation,south)'];
+        }
+        if(empty($params['use_type']) || !in_array($params['use_type'],mtopcard\ElectricUseTypes)) {
+            return [false,"没有电卡用途参数(home,commerce,pedlar)"];
+        }
+        if(empty($params['province']) || !array_key_exists($params['province'],mtopcard\ProvinceList)) {
+            return [false,"请传入省份"];
+        }
+        if(empty($params['city'])) {
+            return [false,"请传入城市名称"];
+        }
+        //如果是南方电网需要带身份证后六位
+        if($params['company_type'] === 'south')
+        {
+            $card_id = $params['card_id'];
+            if(empty($card_id) || strlen($card_id) != mtopcard\CardidVerifyLength || !mtopcard\is_alpha($card_id)) {
+                return [false,"请传入正确的身份证后6位"];
+            }
+        }
+
+        return [true,""];
+    }
+
+    public function add_electricOp()
+    {
+        [$success,$error] = $this->check_electirc($_GET);
+        if($success === false) {
+            return self::outerr(201,$error);
+        }
+
+        $notify_url = $_GET['notifyurl'];
+        $mch_order = $_GET['order_sn'];   //对方的order编号
+
+        $card_no = $_GET['cardno'] ?? '';
+
+        $quantity = 1;
+        $third_card_type = mtopcard\ThirdCardElect;
+        $company_type = $_GET['company_type'];
+        $use_type = $_GET['use_type'];
+        $province = intval($_GET['province']);
+        $city = $_GET['city'];
+        $amount = intval($_GET['amount']);
+
+        if($company_type == 'nation') {
+            $card_id = '';
+        } else {
+            $card_id = $_GET['card_id'] ?? '';
+        }
+
+        $product_code = mtopcard\electric_product_code($company_type,$use_type,$amount);
+        $amount = refill\util::ThirdRefillAmount;
+
+        //三方充值没有质量
+        $quality = 1;
+        $card_type = mtopcard\ThirdRefillCard;
+
+        if(!$this->check_mchorder($this->mchid(),$mch_order)) {
+            return self::outerr(205,"客户订单号重复或者为空.");
+        }
+
+        $order_time = time();
+        $params = ['mchid' => $this->mchid(),
+            'buyer_id' => $this->adminid(),
+            'amount' => $amount,
             'mch_order' => $mch_order,
             'notify_url' => $notify_url,
+
             'org_quality' => $quality,
+            'card_type' => $card_type,
+
+            'card_no' => $card_no,
+            'product_code' => $product_code,
+            'quantity' => $quantity,
+            'third_card_type' => $third_card_type,
+            'third_product_type' => mtopcard\ThirdElectricProduct,
+
+            'company_type' => $company_type,
+            'use_type' => $use_type,
+            'province' => $province,
+            'city' => $city,
+            'card_id' => $card_id,
+            'order_time' => $order_time
+        ];
+
+        refill\util::push_queue_order($this->mchid(), $mch_order, ORDER_STATE_QUEUE);
+        Model('refill_order')->add_detail($this->mchid(), $mch_order, $order_time, $params, ORDER_STATE_QUEUE);
+
+        $state = refill\util::push_addthird($params);
+        if ($state === true) {
+            return self::outsuccess(['state' => true]);
+        } else {
+            refill\util::del_queue_order($this->mchid(),$mch_order);
+            Model('refill_order')->del_detail($this->mchid(),$mch_order);
+            return self::outerr(208, '提交失败');
+        }
+    }
+
+    private function check_sinopec_coupon($params)
+    {
+        if(empty($params['cardno'])) {
+            return [false,'参数没有包含cardno'];
+        }
+        if(empty($params['notifyurl'])) {
+            return [false,'参数没有包含notifyurl'];
+        }
+        if(empty($params['order_sn'])) {
+            return [false,'参数没有包含贵方唯一订单号:order_sn'];
+        }
+        if(empty($params['amount']) || intval($params['amount']) <= 0) {
+            return [false,'参数没有包含充值金额:amount'];
+        }
+        if(empty($params['province']) || !array_key_exists($params['province'],mtopcard\ProvinceList)) {
+            return [false,"请传入省份"];
+        }
+
+        return [true,""];
+    }
+
+    public function add_sinopec_couponOp()
+    {
+        [$success,$error] = $this->check_sinopec_coupon($_GET);
+        if($success === false) {
+            return self::outerr(201,$error);
+        }
+
+        $notify_url = $_GET['notifyurl'];
+        $mch_order  = $_GET['order_sn'];   //对方的order编号
+
+        $card_no = $_GET['cardno'] ?? '';
+
+        $quantity = 1;
+        $third_card_type = mtopcard\ThirdCardPhone;
+        $province = intval($_GET['province']);
+        $amount   = intval($_GET['amount']);
+
+        $product_code = mtopcard\sino_coupon_product_code($amount);
+        $amount = refill\util::ThirdRefillAmount;
+
+        //三方充值没有质量
+        $quality = 1;
+        $card_type = mtopcard\ThirdRefillCard;
+
+        if(!$this->check_mchorder($this->mchid(),$mch_order)) {
+            return self::outerr(205,"客户订单号重复或者为空.");
+        }
+
+        $order_time = time();
+        $params = ['mchid' => $this->mchid(),
+            'buyer_id' => $this->adminid(),
+            'amount' => $amount,
+            'mch_order' => $mch_order,
+            'notify_url' => $notify_url,
+
+            'org_quality' => $quality,
+            'card_type' => $card_type,
+
+            'card_no' => $card_no,
+            'product_code' => $product_code,
+            'quantity' => $quantity,
+            'third_card_type' => $third_card_type,
+            'third_product_type' => mtopcard\ThirdSinopecECouponPoroduct,
+            'province' => $province,
             'order_time' => $order_time
         ];
 
         refill\util::push_queue_order($this->mchid(),$mch_order,ORDER_STATE_QUEUE);
         Model('refill_order')->add_detail($this->mchid(), $mch_order, $order_time, $params, ORDER_STATE_QUEUE);
-        refill\util::push_add($params);
-        return self::outsuccess(['state' => true]);
+
+        $state = refill\util::push_addthird($params);
+        if ($state === true) {
+            return self::outsuccess(['state' => true]);
+        } else {
+            refill\util::del_queue_order($this->mchid(),$mch_order);
+            Model('refill_order')->partition(refill\util::part_query($order_time))->del_detail($this->mchid(),$mch_order);
+            return self::outerr(208, '提交失败');
+        }
     }
 
     private function can_refill($cardno)
@@ -124,14 +446,12 @@ class refillControl extends merchantControl
 
     private function check_mchorder($mchid,$mch_order)
     {
-        if(empty($mch_order)) {
+        if (empty($mch_order)) {
             return false;
-        }
-        else {
+        } else {
             $refill_order = Model('refill_order');
-            $ret = $refill_order->getOrderInfo(['mchid' => $mchid,'mch_order' => $mch_order]);
-
-            return empty($ret);
+            $ret = $refill_order->exist($mchid, $mch_order, refill\util::part_query());
+            return ($ret == false);
         }
     }
 
@@ -140,7 +460,11 @@ class refillControl extends merchantControl
         $uid = $this->adminid();
         $minfo = new member_info($uid);
         $available = $minfo->available_predeposit();
-        return self::outsuccess(['balance' => $available]);
+        $mchinfo = Model('merchant')->getMerchantInfo(['mchid' => $this->mchid()]);
+        $available = ncPriceFormat($available - $mchinfo['credit_bonus']);
+        $credit = ncPriceFormat($mchinfo['credit_bonus']);
+
+        return self::outsuccess(['balance' => $available,'credit' => $credit]);
     }
 
     public function query_tradeOp()
@@ -169,7 +493,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'];
@@ -179,8 +502,8 @@ 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['official_sn'] = $refill_info['official_sn'] ?? "";
         $result['order_state'] = $order_info['order_state'];
-        $result['official_sn'] = $refill_info['official_sn'];
 
         return $result;
     }
@@ -194,26 +517,68 @@ class refillControl extends merchantControl
             return self::outerr(201,"客户订单号order_sn错误");
         }
 
-        $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(201,"无此订单");
-        }
-
-        $vr_order = Model('vr_order');
-        $order_info = $vr_order->getOrderInfo(['order_sn' => $refill_info['order_sn']]);
-
-        if(empty($order_info)) {
-            return self::outerr(201,"无此交易号");
+        $order_state = refill\util::query_queue_order($mchid,$order_sn);
+        if ($order_state == ORDER_STATE_QUEUE || $order_state == ORDER_STATE_SEND) {
+            Log::record("query_state in queue mchid={$mchid} mch_order={$order_sn} order_state={$order_state}" ,Log::DEBUG);
+            $result['mchid'] = $mchid;
+            $result['order_sn'] = $order_sn;
+            $result['order_state'] = $order_state;
+            return self::outsuccess($result);
         }
-
-        if($order_info['order_state'] == ORDER_STATE_SEND) {
-            QueueClient::push("QueryRefillState",['order_id' => $refill_info['order_id']]);
+        else
+        {
+            $mod_refill = Model('refill_order');
+            $refill_info = $mod_refill->partition(refill\util::part_query())->getOrderInfo(['mch_order' => $order_sn,'mchid' => $mchid,'inner_status' => 0]);
+
+            if(empty($refill_info))
+            {
+                $mod_qerr = Model('refill_query_err');
+                $insert = ['mch_order' => $order_sn,'mchid' => $mchid];
+
+                $items = $mod_refill->getOrderInfo(['mch_order' => $order_sn,'mchid' => $mchid]);
+                if (empty($items)) {
+                    Log::record("query_state in db no order mchid={$mchid} mch_order={$order_sn}", Log::DEBUG);
+
+                    $insert['code'] = 202;
+                    $insert['msg'] = "检索充值中的单子,查不到任何订单信息.";
+                    $mod_qerr->add($insert);
+
+                    return self::outerr(202, "无此订单,请人工确认处理.");
+                } else {
+                    Log::record("DEBUG_TAG: query_state in db mchid={$mchid} mch_order={$order_sn} order_state not completed.", Log::DEBUG);
+
+
+                    $insert['code'] = 200;
+                    $insert['msg'] = "检索充值中的单子能查到,但inner_status=0时查不到,回调充值中状态.";
+                    $mod_qerr->add($insert);
+
+                    $result['mchid'] = $mchid;
+                    $result['order_sn'] = $order_sn;
+                    $result['order_state'] = ORDER_STATE_SEND;
+                    return self::outsuccess($result);
+                }
+            }
+            else
+            {
+                $vr_order = Model('vr_order');
+                $order_info = $vr_order->partition(refill\util::part_query())->getOrderInfo(['order_sn' => $refill_info['order_sn']]);
+                Log::record("query_state in db mchid={$mchid} mch_order={$order_sn} order_state={$order_info['order_state']}" ,Log::DEBUG);
+
+                if (empty($order_info))
+                {
+                    $mod_qerr = Model('refill_query_err');
+                    $insert = ['mch_order' => $order_sn,'mchid' => $mchid];
+
+                    $insert['code'] = 203;
+                    $insert['msg'] = "检索充值中的单子能查到,但inner_status=0时查不到vr_order中的订单.";
+                    $mod_qerr->add($insert);
+
+                    return self::outerr(203, "无此交易,请人工确认处理.");
+                } else {
+                    $result = $this->format($order_info, $refill_info);
+                    return self::outsuccess($result);
+                }
+            }
         }
-
-        $result = $this->format($order_info,$refill_info);
-
-        return self::outsuccess($result);
     }
-}
+}

+ 124 - 0
racc/framework/function/function.php

@@ -0,0 +1,124 @@
+<?php
+/**
+ * mobile公共方法
+ *
+ * 公共方法
+ *
+ */
+defined('InShopNC') or exit('Access Invalid!');
+
+
+require_once(BASE_CORE_PATH . '/framework/libraries/model.php');
+require_once(BASE_DATA_PATH . '/model/member.model.php');
+require_once(BASE_MOBILE_PATH . '/util/errcode.php');
+
+function output_data($datas, $extend_data = array(),$code = 200) 
+{
+    $data = array();
+    $data['code'] = $code;
+
+    if(!empty($extend_data)) {
+        $data = array_merge($data, $extend_data);
+    }
+
+    $data['datas'] = $datas;
+
+    if(!empty($_GET['callback'])) {
+        echo $_GET['callback'].'('.json_encode($data).')';
+    } else {
+        echo json_encode($data);
+    }
+}
+
+function output_error($message, $extend_data = array(),$code = 200) {
+    $datas = array('error' => $message);
+    output_data($datas, $extend_data,$code);
+}
+
+function joutput_data($datas,$type='')
+{
+    $data = [];
+
+    $code = errcode::Success;
+    $data['code'] = $code;
+    $data['message'] = errcode::msg($code);
+
+    $data['datas'] = $datas;
+
+    if($_SESSION['client_type'] != 'ajax')
+    {
+        $contents = ob_get_clean();
+        if(!empty($contents)) {
+            Log::record($contents,Log::ERR);
+        }
+        ob_start();
+    }
+
+    if(!empty($type) && $type == 'web') {
+        echo(json_encode($data,JSON_UNESCAPED_UNICODE));
+    } else {
+        echo(json_encode($data));
+    }
+}
+
+function joutput_error($code,$message = '',$type='')
+{
+    if(empty($message)) {
+        $message = errcode::msg($code);
+    }
+
+    $data = array();
+    $data['code'] = $code;
+    $data['message'] =  $message;
+    $data['datas'] = null;
+
+    if($_SESSION['client_type'] != 'ajax')
+    {
+        $contents = ob_get_clean();
+        if(!empty($contents)) {
+            Log::record($contents,Log::ERR);
+        }
+        ob_start();
+    }
+    Log::record("code = {$code} message = {$message}",Log::ERR);
+
+    if(!empty($type) && $type == 'web') {
+        echo(json_encode($data,JSON_UNESCAPED_UNICODE));
+    } else {
+        echo(json_encode($data,JSON_UNESCAPED_UNICODE));
+    }
+}
+
+function mobile_page($page_count,$totalnum = false)
+{
+    $extend_data = array();
+    $current_page = intval($_GET['curpage']);
+    if($current_page <= 0) {
+        $current_page = 1;
+    }
+    if($current_page >= $page_count) {
+        $extend_data['hasmore'] = false;
+    } else {
+        $extend_data['hasmore'] = true;
+    }
+    $extend_data['page_total'] = $page_count;
+    if($totalnum !== false) {
+        $extend_data['total_num'] = $totalnum;
+    }
+
+    return $extend_data;
+}
+
+/**
+ * 过滤html标签,js代码,css样式标签
+ * @param $str
+ * @return mixed
+ */
+function remove_tags($str) {
+    $str = preg_replace( "@<script(.*?)</script>@is", "", $str );
+    $str = preg_replace( "@<iframe(.*?)</iframe>@is", "", $str );
+    $str = preg_replace( "@<style(.*?)</style>@is", "", $str );
+    $str = preg_replace( "@<(.*?)>@is", "", $str );
+
+    return $str;
+}

+ 1 - 0
racc/framework/index.html

@@ -0,0 +1 @@
+ 

+ 0 - 0
racc/language/index.html


+ 10 - 0
racc/language/zh_cn/mobile.php

@@ -0,0 +1,10 @@
+<?php
+defined('InShopNC') or exit('Access Invalid!');
+
+$lang['order_state_cancel'] = '已取消';
+$lang['order_state_new'] = '待付款';
+$lang['order_state_pay'] = '待发货';
+$lang['order_state_send'] = '待收货';
+$lang['order_state_success'] = '交易完成';
+$lang['order_state_eval'] = '已评价';
+

+ 2 - 13
racc/racc.php

@@ -34,6 +34,7 @@ require_once(BASE_ROOT_PATH . '/helper/third_author/wxauthor.php');
 require_once(BASE_ROOT_PATH . '/helper/fcode/present_manager.php');
 require_once(BASE_ROOT_PATH . '/helper/url_helper.php');
 require_once(BASE_ROOT_PATH . '/helper/activity_helper.php');
+
 require_once(BASE_HELPER_PATH . '/refill/util.php');
 
 function all_channels() {
@@ -49,17 +50,5 @@ StatesHelper::init();
 $listener = new message\subscriber($gMessageStates);
 $listener->start();
 
-if(defined('COMPANY_NAME') && COMPANY_NAME == 'LZKJ_COMPANY') {
-    require_once(BASE_HELPER_PATH . '/fcgisrv/LZRAccServer.php');
-    Log::record("fcgisrv\LZRAccServer start",Log::DEBUG);
-    fcgisrv\LZRAccServer::instance()->run_looper();
-}
-elseif(defined('COMPANY_NAME') && COMPANY_NAME == 'XYZ_COMPANY') {
-    require_once(BASE_HELPER_PATH . '/fcgisrv/XYZRAccServer.php');
-    Log::record("fcgisrv\XYZRAccServer start",Log::DEBUG);
-    fcgisrv\XYZRAccServer::instance()->run_looper();
-}
-else {
-    Log::record("fcgisrv Not any server can start",Log::DEBUG);
-}
+fcgisrv\RAccServer::instance()->run_looper();
 

+ 1 - 0
racc/templates/index.html

@@ -0,0 +1 @@
+ 

+ 231 - 0
racc/util/errcode.php

@@ -0,0 +1,231 @@
+<?php
+declare(strict_types=1);
+
+class errcode //extends SplEnum
+{
+    const __default = self::Success;
+
+    const Success = 200;
+
+    const ErrProtocolDisabled = 300;
+
+    const ErrApptype = 10000;
+    const ErrParamter = 10001;
+    const ErrLogin = 10002;
+    const ErrHasLogined = 10003;
+    const ErrUsertype = 10004;
+    const ErrTokenExpire = 10005;
+    const ErrSmscodeExpire = 10006;
+    const ErrSmscode = 10007;
+    const ErrIDbinded = 10008;
+    const ErrUserExisted = 10009;
+    const ErrPasswd = 10010;
+    const ErrMobileNotBinded = 10011;
+    const ErrOperRepeat = 10012;
+    const ErrAccountStop = 10013;
+    const ErrUnLogin = 10014;
+    const ErrRegister = 10015;
+    const ErrUserOrPass = 10016;
+
+    const ErrFrequentlyRequest = 10017;//请求频繁
+    const ErrUploadFileFailed = 10018; //上传文件失败
+    const ErrUnImplements = 10019;
+    const ErrLittleParamter = 10020;
+    const ErrSignParamter = 10021;
+
+    const ErrSpecial = 10100;
+
+    // 购物车模块(10200-10299)
+    const ErrCart = 10200;
+    const ErrGoodsOff = 10201;
+    const ErrCanNotBuyOwn = 10202;
+    const ErrStorageShort = 10203;
+    const ErrAddCart = 10204;
+    const ErrGoodsOutofStock = 10205;
+    const ErrGoodsSpecial = 10206;
+    const ErrCartDelError = 10207;
+
+    // 订单错误内容
+    const ErrOrder = 10300;
+    const ErrOrderCanNotCancel = 10301;
+    const ErrOrderNotExist = 10302;
+    const ErrOrderState = 10303;
+    const ErrOrderRefundError = 10304;
+    const ErrRefundNotExist = 10305;
+
+
+    const ErrAddress = 10400;
+    const ErrInvoice = 10500;
+    const ErrPayment = 10600;
+    // 快递内容
+    const ErrExpress = 10700;
+    const ErrExpressNotExist = 10701;
+
+    const ErrBonus = 10800;
+    const ErrBonusType = 10801;
+    const ErrBonusMake = 10802;
+    const ErrBonusGrabNull = 10803;
+    const ErrBonusNotEnough = 10804;
+    const ErrBonusSN = 10805;
+    const ErrBonusBinded = 10806;
+    const ErrBonusComment = 10807;
+    const ErrBonusShake = 10808;
+    const ErrBonusDailyRank = 10809;
+
+    //套装
+    const ErrBLUnExist = 10900;
+
+    const ErrDB = 11000;
+    const ErrShake = 11100;
+    const ErrRelation = 11200;
+
+    const ErrTopCard = 11300;
+
+    const ErrSms = 12000;
+    const ErrSmsLessRepeateMinTime = 12001;
+
+    const ErrGoodsNotExist = 13000;
+    const ErrMemberNotExist = 13001;
+    const ErrInputParam = 13002;
+    const ErrVerifyCode = 13003;
+    const ErrMemberExist = 13004;
+    const ErrWxNotExist = 13005;
+    const ErrLoginType = 13006;
+    const ErrGetConfig = 14000;
+    const ErrUpfile = 15000;
+    const ErrAuthor = 16000;
+    const ErrUGC = 17000;
+
+    const ErrRoom = 18000;
+    const ErrRoomCreate = 18001;
+    const ErrRoomInvite = 18002;
+    const ErrRoomLeave   = 18003;
+    const ErrRoomBuild  = 18004;
+    const ErrRoomParam  = 18005;
+    const ErrRoomFactoryOp  = 18006;
+    const ErrRoomAccessOp  = 18007;
+    const ErrRoomPush  = 18008;
+    const ErrRoomChange = 18009;
+    const ErrRoomKickout = 18010;
+    const ErrRoomTwoFace = 18011;
+    const ErrRoomNotice = 18012;
+
+    const ErrAccess = 19000;
+    const ErrTalk = 20000;
+
+    const ErrSafeIp = 21000;
+    const ErrOperation = 22000;
+    const ErrPushQueue = 23000;
+
+    static function msg($code)
+    {
+        switch ($code) {
+            case errcode::Success:
+                return '成功';
+            case errcode::ErrProtocolDisabled:
+                return '协议未启用';
+            case errcode::ErrApptype :
+                return '应用类型错误';
+            case errcode::ErrParamter :
+                return '错误的参数.';
+            case errcode::ErrLogin :
+                return '用户名或密码错误';
+            case errcode::ErrHasLogined :
+                return '当前在登录状态,请先登出再登录.';
+            case errcode::ErrUsertype :
+                return '用户类型错误';
+            case errcode::ErrTokenExpire :
+                return 'token过期';
+            case errcode::ErrSmscodeExpire :
+                return '验证码过期';
+            case errcode::ErrSmscode:
+                return '验证码错误';
+            case errcode::ErrIDbinded:
+                return '用户已经绑定';
+            case errcode::ErrMobileNotBinded :
+                return '手机号尚未绑定';
+            case errcode::ErrOperRepeat :
+                return '抱歉,您登录重试次数超过限制,请十分钟后再试~';
+            case errcode::ErrAccountStop :
+                return '该帐号已经被停用';
+            case errcode::ErrUnLogin :
+                return '您没有登录不能做此操作.';
+            case errcode::ErrSpecial:
+                return 'ErrSpecial.';
+            case errcode::ErrPayment:
+                return '支付错误.';
+            case errcode::ErrGoodsNotExist:
+                return '商品库存不足或已下架.';
+            case errcode::ErrMemberNotExist:
+                return '用户不存在.';
+            case errcode::ErrInputParam:
+                return '输入参数错误';
+            case errcode::ErrVerifyCode:
+                return '验证码错误';
+            case errcode::ErrMemberExist:
+                return '用户已经存在';
+            case errcode::ErrPasswd:
+                return '账号或密码错误';
+            case errcode::ErrWxNotExist:
+                return '该微信账号还没有注册';
+            case errcode::ErrLoginType:
+                return '登陆类型错误';
+            case errcode::ErrOrderCanNotCancel:
+                return '订单已支付或已发送,不能取消';
+            case errcode::ErrOrderNotExist:
+                return '订单不存在';
+            case errcode::ErrExpress:
+                return '查询快递出错';
+            case errcode::ErrGoodsOff:
+                return '商品下架';
+            case errcode::ErrCanNotBuyOwn:
+                return '不能购买自己商品';
+            case errcode::ErrStorageShort:
+                return '商品库存不足';
+            case errcode::ErrAddCart:
+                return '添加购物车失败';
+            case errcode::ErrGoodsOutofStock :
+                return '商品缺货.';
+            case errcode::ErrGoodsSpecial :
+                return '该商品不允许加入购物车,请直接购买';
+            case errcode::ErrCartDelError :
+                return '购物车删除失败.';
+            case errcode::ErrGetConfig:
+                return '获取配置文件出错';
+
+            case errcode::ErrBLUnExist:
+                return '该优惠套装已不存在,建议您单独购买';
+
+            case errcode::ErrDB :
+                return '系统错误';
+            case errcode::ErrSms :
+                return '验证码发送错误';
+            case errcode::ErrSmsLessRepeateMinTime:
+                return '一分钟内只能发送一次验证码,请稍后再试.';
+            case errcode::ErrRoom:
+                return '房间出错';
+            case errcode::ErrRoomCreate:
+                    return '房间创建出错.';
+            case errcode::ErrRoomInvite:
+                return '房间邀请出错.';
+            case errcode::ErrRoomLeave:
+                return '退出房间出错.';
+            case errcode::ErrRoomBuild:
+                return '房间重建出错.';
+            case errcode::ErrRoomParam:
+                return '房间重建参数出错,不存在此房间号.';
+            case errcode::ErrRoomFactoryOp:
+                return '房间不支持此操作.';
+            case errcode::ErrRoomAccessOp:
+                return '房间服务器不支持此access操作.';
+            case errcode::ErrSignParamter:
+                return '请求参数需要做签名.';
+            case errcode::ErrSafeIp:
+                return '无权限的IP.';
+            case errcode::ErrOperation:
+                return '操作失败.';
+            default :
+                return '系统错误.';
+        }
+    }
+}