stanley-king 1 yıl önce
ebeveyn
işleme
425f1d18a8

+ 4 - 5
helper/refill/api/mh/dixin_normal/RefillCallBack.php

@@ -28,18 +28,17 @@ class RefillCallBack implements refill\IRefillCallBack
             return [false, false, false, false, ''];
         }
 
-        $official_sn = strtolower($params['official_sn']) == 'null' ? '' : $params['official_sn'];
         $order_id = $order_info['order_id'];
+        $ch_trade_no = $params['order_no'];
 
         $status = intval($params['recharge_status']);
         if ($status === 3) {
-            $data['ch_trade_no'] = $params['order_no'];
-            $data['official_sn'] = $official_sn;
-            Model('refill_order')->edit($order_id, $data);
+            $official_sn = $params['official_sn'] ?? '';
+            Model('refill_order')->edit($order_id, ['ch_trade_no' => $ch_trade_no,'official_sn' => $official_sn]);
             return [$order_id, true, false, true, $official_sn];
         }
         elseif (in_array($status,[4,5])) {
-            Model('refill_order')->edit($order_id, ['ch_trade_no' => $params['order_no']]);
+            Model('refill_order')->edit($order_id, ['ch_trade_no' => $ch_trade_no]);
             return [$order_id, false, true, true, ''];
         }
         else {

+ 9 - 31
helper/refill/api/mh/yushang_normal/RefillCallBack.php

@@ -1,28 +1,16 @@
 <?php
 
 namespace refill\yushang_normal;
+
 require_once(BASE_HELPER_RAPI_PATH . '/yushang_normal/config.php');
-use refill;
 
+use refill;
 
 class RefillCallBack implements refill\IRefillCallBack
 {
-
     public function verify($params): bool
     {
-
-        $input = $params;
-        unset($input['Sign']);
-
-        $cbsign = [
-            'AppKey' => $params[AppKey],
-            'TimesTamp' => $params[TimesTamp],
-            'OrderID'   => $params[OrderID],
-            'MOrderID'  => $params[MOrderID],
-            'State'     => $params[State]
-        ];
-
-        $sign = config::sign($cbsign);
+        $sign = config::sign($params,config::notify_keys);
         if ($params['Sign'] == $sign) {
             return true;
         } else {
@@ -33,36 +21,26 @@ class RefillCallBack implements refill\IRefillCallBack
     //[$order_id, $success, $can_try, $need_handle, $official_sn]
     public function notify($params): array
     {
-
         $order_sn = $params['MOrderID'];
+        $ch_trade_no = $params['OrderID'];
         $order_info = Model('vr_order')->getOrderInfo(['order_sn' => $order_sn]);
 
-        //todo 测试环境这里失败
         if (empty($order_info)) {
             return [false, false, false, false, ''];
         }
 
-        if($params['ExtendParam'] != 'null')
-        {
-            $ExtendParam = json_decode($params['ExtendParam'],true);
-            if($ExtendParam == 'null')
-                $ExtendParam = $params['ExtendParam'];
-        }else
-            $ExtendParam = 'null';
-
-        $official_sn = strtolower($ExtendParam[OfficialOrderID]) == 'null' ? '' : strtolower($ExtendParam[OfficialOrderID]);
         $order_id = $order_info['order_id'];
+        $ExtendParam = json_decode($params['ExtendParam'],true);
+        $official_sn = $ExtendParam['OfficialOrderID'] ?? '';
 
-        $status = intval($params['State']);
         //充值状态:1=订单正在处理中,2=订单成功,3=订单失败,4=订单状态异常或未知
+        $status = intval($params['State']);
         if ($status === 2) {
-            $data['ch_trade_no'] = $params['OrderID'];
-            $data['official_sn'] = $official_sn;
-            Model('refill_order')->edit($order_id, $data);
+            Model('refill_order')->edit($order_id, ['ch_trade_no' => $ch_trade_no,'official_sn' => $official_sn]);
             return [$order_id, true, false, true, $official_sn];
         }
         elseif ($status === 3) {
-            Model('refill_order')->edit($order_id, ['ch_trade_no' => $params['OrderID']]);
+            Model('refill_order')->edit($order_id, ['ch_trade_no' => $ch_trade_no]);
             return [$order_id, false, true, true, ''];
         }
         else {

+ 17 - 31
helper/refill/api/mh/yushang_normal/RefillPhone.php

@@ -8,7 +8,6 @@ use mtopcard;
 use refill;
 use Log;
 
-
 class RefillPhone extends refill\IRefillPhone
 {
     public function __construct($cfgs)
@@ -41,8 +40,7 @@ class RefillPhone extends refill\IRefillPhone
             return [];
         }
 
-        $params = [
-            'AppKey'        => config::AppKey,
+        $input = [
             'BuyCount'      => 1,
             'CallBackUrl'   =>  config::NOTIFY_URL,
             'ChargeAccount' => $phone,
@@ -52,15 +50,9 @@ class RefillPhone extends refill\IRefillPhone
             'TimesTamp'     => $this->getUnixTimestamp()
         ];
 
-        $params['Sign'] = config::sign($params);
-        return $params;
+        return config::gen_params($input,config::add_keys);
     }
 
-    private function method($method,$data = [],$attach = '')
-    {
-        $param = array_merge($data, ['Sign' => config::sign($data)]);
-        return $param;
-    }
     private function getUnixTimestamp ()
     {
         $microtime = microtime(true); // 获取当前时间戳和微秒数
@@ -97,15 +89,11 @@ class RefillPhone extends refill\IRefillPhone
 
     public function query($refill_info): array
     {
-        //$params['merchant_no'] = $refill_info['order_sn'];//sn码
-        //$params = $this->method('query.order',$params);//查数据库情况
-
-        //拼接签名需要顺序AppKey,TimesTamp,MOrderID
-
-        $params['AppKey'] = config::AppKey;
-        $params['TimesTamp'] = $this->getUnixTimestamp();
-        $params['MOrderID'] = $refill_info['order_sn'];
-        $params['Sign'] = config::sign($params);
+        $input = [
+            'TimesTamp' => $this->getUnixTimestamp(),
+            'MOrderID'  =>$refill_info['order_sn']
+        ];
+        $params = config::gen_params($input,config::query_keys);
 
         $resp = http_request(config::QUERY_URL, $params , 'POST');
         if (empty($resp)) {
@@ -120,20 +108,18 @@ class RefillPhone extends refill\IRefillPhone
             }
 
             $code = intval($resp['Code']);
-            if ($code === 999) // 受理成功
+            if ($code === 999)
             {
                 $val = $resp['Data'];
-                $status = $val['OrderState'];
-                $official_sn = $val['ExtendParam']['OfficialOrderID'] == 'null'? '':strtolower($val['ExtendParam']['OfficialOrderID']) ;
+                $status = intval($val['OrderState']);
+                $official_sn = $val['ExtendParam']['OfficialOrderID'] ?? '';
 
                 //充值状态:1=订单正在处理中,2=订单成功,3=订单失败,4=订单状态异常或位置
-                if ($status == '2') {  //成功了存订单号和官方透传的流水号
-                    $save['ch_trade_no'] = $val['OrderID'];//存平台的订单号不是存订单sn
-                    $save['official_sn'] = $official_sn;
-                    Model('refill_order')->edit($refill_info['order_id'], $save);
+                if ($status == 2) {
+                    Model('refill_order')->edit($refill_info['order_id'], ['ch_trade_no' => $val['OrderID'],'official_sn' => $official_sn]);
                     $order_state = ORDER_STATE_SUCCESS;
                 }
-                elseif ($status == '3') {//失败了只存订单号
+                elseif ($status == 3) {
                     Model('refill_order')->edit($refill_info['order_id'], ['ch_trade_no' => $val['OrderID']]);
                     $order_state = ORDER_STATE_CANCEL;
                 }
@@ -156,12 +142,12 @@ class RefillPhone extends refill\IRefillPhone
 
     public function balance(): array
     {
-        $params['AppKey']=config::AppKey;
-        $params['TimesTamp']=$this->getUnixTimestamp();
-        $params['Sign'] = config::sign($params);
+        $input = [
+            'TimesTamp' => $this->getUnixTimestamp(),
+        ];
+        $params = config::gen_params($input,config::balance_keys);
 
         $resp = http_request(config::BALANCE_URL, $params , 'POST');
-
         if (empty($resp)) {
             return [false, '系统错误'];
         }

+ 23 - 17
helper/refill/api/mh/yushang_normal/config.php

@@ -20,6 +20,11 @@ class config
 //    const BALANCE_URL = 'http://mbapiq.mbs.scyshy.com/Member/GetAccount';
 //    const NOTIFY_URL=  BASE_SITE_URL . "/racc/callback/mh/yushang_normal.php";
 
+    const add_keys = ['AppKey', 'BuyCount', 'CallBackUrl', 'ChargeAccount', 'CustomerIP', 'MOrderID', 'ProductCode', 'TimesTamp', 'AppSecret'];
+    const query_keys = ['AppKey', 'MOrderID', 'TimesTamp', 'AppSecret'];
+    const balance_keys = ['AppKey', 'TimesTamp', 'AppSecret'];
+    const notify_keys = ['AppKey', 'TimesTamp', 'OrderID', 'MOrderID', 'State', 'AppSecret'];
+
     const IS_DEBUG = false;
 
     private static $stStoreProducts = [
@@ -30,31 +35,32 @@ class config
         500 => [4 => 'PLM104319', 5 => 'PLM104319', 6 => 'PLM104319'],
     ];
 
-
-    public static function sign($params)
+    public static function sign($params,$keys)
     {
-        if (is_object($params)) { //对象转数组
-            $params = json_decode(json_encode($params), true);
-        }
-
-        $params['AppSecret'] = config::AppSecret;
-
-        $formatData = [];
-        foreach ($params as $k => $v)
+        $str = '';
+        foreach ($keys as $key)
         {
-            if (is_array($v) || is_object($v)) {
-                $v = json_encode($v, JSON_UNESCAPED_UNICODE);
+            if($key == 'AppKey') {
+                $str .= config::AppKey;
             }
-            if ((!empty($v) || (string)$v === '0') && $k != 'Sign') {
-                $formatData[] = "$v";
+            elseif ($key == 'AppSecret') {
+                $str .= config::AppKey;
+            }
+            else {
+                $val = $params[$key] ?? '';
+                $str .= $val;
             }
         }
 
-        $signStr = implode('', $formatData);
-
-        return strtoupper(md5($signStr));
+        return strtoupper(md5($str));
     }
 
+    public static function gen_params($params,$keys)
+    {
+        $params['Sign'] =config::sign($params,$keys);
+        $params['AppKey'] = config::AppKey;
+        return $params;
+    }
 
     public static function sku_code($card_type,$amount)
     {