stanley-king 3 jaren geleden
bovenliggende
commit
df02b0dc70

+ 3 - 35
helper/refill/api/xyz/suning/RefillCallBack.php

@@ -22,45 +22,13 @@ class RefillCallBack implements refill\IRefillCallBack
         }
 
         $order_id = $order_info['order_id'];
-        $fDirect = $params['isDirect'];
         $card_info = $params['card_info'];
 
-        if($fDirect)
-        {
-            if(!empty($card_info))
-            {
-                $result = $this->rsa_decode($card_info['password']);
-                if (empty($result)) {
-                    $data['ret_state'] = 2;
-                    $data['card_info'] = '回调解密,解密失败';
-                } else {
-                    $data['ret_state'] = 1;
-                    $card_info['password'] = $result;
-                    $result = json_encode($card_info);
-                    $data['card_info'] = $result;
-                }
-
-                Model('thrid_refill')->edit_third($order_id, $data);
-            }
-        }
-        else {
-            $data['official_sn'] = $card_info['cardNo'];
-            Model('refill_order')->edit($order_id, $data);
+        if (!empty($card_info)) {
+            Model('thrid_refill')->edit_third($order_id, ['card_info' => json_encode($card_info)]);
+            Model('refill_order')->edit($order_id, ['official_sn' => $card_info['card_no']]);
         }
 
         return [$order_id, true, false,true];
     }
-
-    private function rsa_decode($encrypted)
-    {
-        $ret = openssl_private_decrypt(base64_decode($encrypted), $decrypted, config::PRIVATE_KEY);
-        if ($ret) {
-            $result = json_decode($decrypted, true);
-            return $result;
-        } else {
-            $err = openssl_error_string();
-            Log::record("suning callback openssl_private_decrypt error={$err}",Log::ERR);
-            return false;
-        }
-    }
 }

+ 30 - 11
helper/refill/api/xyz/suning/RefillPhone.php

@@ -91,10 +91,9 @@ class RefillPhone extends refill\IRefillPhone
             $resp = json_decode($resp, true);
             if (empty($resp)) {
                 return [false, '网络错误', true];
-            } elseif ($resp['respCode'] == 00) {
+            } elseif ($resp['respCode'] == '00') {
                 $notify_data = $this->notify_data_format($resp,true);
-                //可替换延迟回调
-                refill\util::push_notify('suning',$notify_data);
+                refill\util::async_notify('suning',$notify_data,1);
                 return [true, $resp['orderNo'], false];
             } else {
                 return [false, $resp['message'], false];
@@ -125,10 +124,9 @@ class RefillPhone extends refill\IRefillPhone
             $resp = json_decode($resp, true);
             if (empty($resp)) {
                 return [false, '网络错误', true];
-            } elseif ($resp['respCode'] == 00) {
-                $notify_data = $this->notify_data_format($resp,false);
-                //可替换延迟回调
-                refill\util::push_notify('suning',$notify_data);
+            } elseif ($resp['respCode'] == '00') {
+                $notify_data = $this->notify_data_format($resp, false);
+                refill\util::async_notify('suning', $notify_data, 1);
                 return [true, $resp['orderNo'], false];
             } else {
                 return [false, $resp['message'], false];
@@ -136,6 +134,19 @@ class RefillPhone extends refill\IRefillPhone
         }
     }
 
+    private function rsa_decode($encrypted)
+    {
+        $ret = openssl_private_decrypt(base64_decode($encrypted), $decrypted, config::PRIVATE_KEY);
+        if ($ret) {
+            $result = json_decode($decrypted, true);
+            return $result;
+        } else {
+            $err = openssl_error_string();
+            Log::record("suning callback openssl_private_decrypt error={$err}",Log::ERR);
+            return false;
+        }
+    }
+
     public function query($refill_info)
     {
         return [false, '苏宁三方下单即回调,无需查询接口'];
@@ -164,14 +175,22 @@ class RefillPhone extends refill\IRefillPhone
         $data['orderNo']  = $params['orderNo'];
 
         $card_list = $params['cardList'];
-        if(count($card_list) == 1) {
-            $data['card_info'] = $params['cardList'][0];
+        if(count($card_list) == 1)
+        {
+            $item = $params['cardList'][0];
+            if($fdirect) {
+                $data['card_info'] = ['type' => 'direct','card_no' => $item['cardNo'],'amount' => $item['amount'],'desc' => $item['cardCatalogName']];
+            }
+            else {
+                $password = $this->rsa_decode($item['password']);
+                $data['card_info'] = ['type' => 'card_key',
+                    'card_no' => $item['cardNo'],'amount' => $item['amount'],'password' => $password,
+                    'desc' => $item['cardCatalogName']];
+            }
         }
         else {
             $data['card_info'] = [];
         }
-        $data['isDirect'] = $fdirect;
-
         return $data;
     }
 }

+ 23 - 24
helper/refill/api/xyz/suning/config.php

@@ -5,7 +5,7 @@ namespace refill\suning;
 class config
 {
     //正式地址及正式账号信息
-//    const ORDER_URL = 'http://video.api.sctongqian.com/Order/DirectOrder';//订单提交地址
+//    const ORDER_URL = 'https://kaapi.suning.com/spcopen/gateway';//订单提交地址
 
 
     const PARTNER = 'YZKJ';
@@ -13,35 +13,34 @@ class config
 
     //沙箱环境账号
     const ORDER_URL = 'http://kaapiprexg.cnsuning.com/spcopen/gateway';//订单提交地址
-
-
     const NOTIFY_URL = BASE_SITE_URL . "/racc/callback/lingzh/sctongqian.php";
     const API_IP = NET_IP;
 
     const PUBLIC_KEY = <<<heredoc
------BEGIN RSA PUBLIC KEY-----
-MIGJAoGBAJZPPaJkFbdhTmSqc3aNSLTOXA3PpEZ8aZflS0h5ZTF7NSm3cGBBMZ2K
-giFAhf4CoqYpeUGiq5iFIfRvLLihidocr8QAlTuVdwUv7dWc0BP3bWWwK3j7re0m
-Pu0xhetm8hmyF6UWQxr+4D+tiWtLj1NZEv6ZPf6d4XSgxDpFGtq1AgMBAAE=
------END RSA PUBLIC KEY-----
+-----BEGIN PUBLIC KEY-----
+MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCt8vRXLk2F1c+33vf61ZLIIOXF
+6olZC0LdUT0u5pFUF+fu7f80NS8wiLJhdVQux5gHVO7uR96DTsxXdMbXJS68EGnz
+jpsR60j3UUADR1I4CbayufU3wor8h4WEYayP6P/1p4Hux6bu30WdLV0VTCA0oBQ4
+c7uGJm003Q3tlCOgAQIDAQAB
+-----END PUBLIC KEY-----
 heredoc;
 
     const PRIVATE_KEY = <<<heredoc
------BEGIN OPENSSH PRIVATE KEY-----
-b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAlwAAAAdzc2gtcn
-NhAAAAAwEAAQAAAIEAlk89omQVt2FOZKpzdo1ItM5cDc+kRnxpl+VLSHllMXs1KbdwYEEx
-nYqCIUCF/gKipil5QaKrmIUh9G8suKGJ2hyvxACVO5V3BS/t1ZzQE/dtZbArePut7SY+7T
-GF62byGbIXpRZDGv7gP62Ja0uPU1kS/pk9/p3hdKDEOkUa2rUAAAIQSSgusUkoLrEAAAAH
-c3NoLXJzYQAAAIEAlk89omQVt2FOZKpzdo1ItM5cDc+kRnxpl+VLSHllMXs1KbdwYEExnY
-qCIUCF/gKipil5QaKrmIUh9G8suKGJ2hyvxACVO5V3BS/t1ZzQE/dtZbArePut7SY+7TGF
-62byGbIXpRZDGv7gP62Ja0uPU1kS/pk9/p3hdKDEOkUa2rUAAAADAQABAAAAgDZc7IbKOg
-x8FhVUjLQo/03dgO/B1MFlh+9XD/ZjaZUO4bh3zx4RFjfLe6s5If0vyNHeGCwEAJoGNLSq
-bPtN+YQqi3GIYEgscHCQYrsa/TMEn4Svrd+1VRoxYrPN+zgpTf1MXcPW22xr2K433u+f4l
-M19Dmi/G3u5mY0lorAyzPBAAAAQQCq6lRGiMBLuO46a4Cw5KWarqWH63B0Dlp/mry7ugnL
-GeBOhYJmzlA5sMWpTg3XyzOxez11Oo+nUn2ByF+XrLcdAAAAQQDF42SO61xOpf5qVN84XV
-s1wcNcJxuhPhet43A8VqAo8MC4f522Lp3/4B1Uf/hwzAx5Gg2tkFnx8eXobsvceG1lAAAA
-QQDCcwggFzrz6BiNE4Tqmz6TDOuH13wyXqUXGgO3fjibIoJCwSo+KggqhlPUM7zDWSbhns
-NJd7JPEi6j+lOvY0sRAAAAGnN0YW5sZXkta2luZ0BTdGFubGV5TWFjcHJv
------END OPENSSH PRIVATE KEY-----
+-----BEGIN PRIVATE KEY-----
+MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAK3y9FcuTYXVz7fe
+9/rVksgg5cXqiVkLQt1RPS7mkVQX5+7t/zQ1LzCIsmF1VC7HmAdU7u5H3oNOzFd0
+xtclLrwQafOOmxHrSPdRQANHUjgJtrK59TfCivyHhYRhrI/o//Wnge7Hpu7fRZ0t
+XRVMIDSgFDhzu4YmbTTdDe2UI6ABAgMBAAECgYBISZXXAQwAWUlYLRW6rLSx7FHw
+fLYVRgPEe3VEn1a3rrOY7FjI9m0k6znOHHcedZ2tNlOQvFcxFDcBBSt4zx/rIjaT
+USuqgB5etMaVPEgTrG6hGfACRHa8hhfOiazyWADJlPHLjdJAwr/grpEZ+980MMJn
+LCJg/1mda2XoTqQGTQJBANPKLEB6FZgT78i4mKBHin7clsF0PYqXs+kv7VVe/lO8
+9U/gD08RDlOFjI7lvIHAGJ/XPPHZq4y9557Z8seSBOcCQQDSQp0JiiSRKV23rzSP
+Bcpdy+kmmUh0+3r0kFUAXsnoBkrzM+RhmuaGKS1n8NUXjenTaj4UhXQz797HJzVT
+YC7XAkAXrLvxoTQUwfXF/EyjbhvfPo1jprjSa07jPEZNisbnWXIasbNEZWWylHU3
+7Bp8bprSE19usaRpoTjpGvf2sy31AkAN6GgYzHF0xKa1UrqIR1rGb4mBixwW2Nee
+O7nTp3F1jo0An0sZBbT/5NNjD7QYtcNkv59Rni48jT5QMBC/7hnLAkEAwLzYOaZq
+woEh779voZoMOrolMNrnBxrOGJi+GCWdCJ5RtfkAd90EMbvYh+wZ/K65feStjYAw
+SrJZgiBHISpWSg==
+-----END PRIVATE KEY-----
 heredoc;
 }

+ 10 - 0
helper/refill/util.php

@@ -210,6 +210,16 @@ class util
         }
     }
 
+    public static function async_notify($chname,$data, $period)
+    {
+        try {
+            QueueClient::async_push("AysncAddDispatcher", ['method' => 'notify', 'params' => ['channel' => $chname, 'params' => $data]], $period);
+            return true;
+        } catch (Exception $ex) {
+            return false;
+        }
+    }
+
     public static function push_add($params)
     {
         try {

+ 29 - 5
test/TestOpenAPI.php

@@ -7,8 +7,21 @@
  */
 
 
+use PHPUnit\Framework\TestCase;
+
+/**
+ * Created by PhpStorm.
+ * User: stanley-king
+ * Date: 2017/1/13
+ * Time: 下午11:46
+ */
+
+define('APP_ID','test');
 define('BASE_ROOT_PATH',str_replace('/test','',dirname(__FILE__)));
+require_once(BASE_ROOT_PATH . '/global.php');
+require_once(BASE_CORE_PATH . '/lrlz.php');
 require_once(BASE_ROOT_PATH . '/fooder.php');
+
 require_once(BASE_ROOT_PATH . '/helper/event_looper.php');
 require_once(BASE_ROOT_PATH . '/helper/search/processor.php');
 require_once(BASE_ROOT_PATH . '/helper/search/tcp_client.php');
@@ -26,21 +39,22 @@ define('MOBILE_SERVER',true);
 define('TIME_STAMP',time());
 
 
-class TestOpenAPI extends PHPUnit_Framework_TestCase
+class TestOpenAPI extends TestCase
 {
     private $fields = [];
 
-    public function __construct()
+
+    public function __construct(?string $name = null, array $data = [], $dataName = '')
     {
+        parent::__construct($name, $data, $dataName);
         $this->fields = ['appid','convert_sn','batch_code','commonid','time','appkey','mobile','convert_type'];
-
     }
 
-    public static function setUpBeforeClass()
+    public static function setUpBeforeClass() : void
     {
-
         Base::run_util();
     }
+
     public function testKey()
     {
         $pri_key = BASE_ROOT_PATH . '/helper/openapi/keys/jyc_pri.pem';
@@ -164,4 +178,14 @@ class TestOpenAPI extends PHPUnit_Framework_TestCase
 
         $ret = $convert->verify($input);
     }
+
+    public function testPriviteKey()
+    {
+        $res = openssl_pkey_new(['private_key_bits' => 1024,'private_key_type' => OPENSSL_KEYTYPE_RSA]);
+        openssl_pkey_export($res, $private_key);
+        $public_key = openssl_pkey_get_details($res)['key'];
+
+        Log::record("pub={$public_key}",Log::DEBUG);
+        Log::record("privite={$public_key}",Log::DEBUG);
+    }
 }

+ 1 - 1
test/TestRedis.php

@@ -290,9 +290,9 @@ class TestRedis extends TestCase
         refill\util::add_exclude_channel(1,"xxxxxfdasfdas",1,'gftdsino');
         $ret = refill\util::get_exclude_channel(1,"xxxxxfdasfdas",1);
         refill\util::del_exclude_channel(1,"xxxxxfdasfdas",1);
-
     }
 
+
     ////docker-compose run phpcli php /var/www/html/phpunit-9.2.5.phar --filter "/(TestRedis::testCancel)( .*)?$/" --test-suffix TestRedis.php /var/www/html/test
     ////docker-compose run phpcli php /var/www/html/phpunit-9.2.5.phar --filter "/(TestRedis::testCancelPayed)( .*)?$/" --test-suffix TestRedis.php /var/www/html/test
     public static function tearDownAfterClass() : void