stanley-king hace 6 años
padre
commit
c162f28d30

+ 55 - 0
helper/openapi/Convertor.php

@@ -0,0 +1,55 @@
+<?php
+/**
+ * Created by PhpStorm.
+ * User: stanley-king
+ * Date: 2018/12/12
+ * Time: 11:13 AM
+ */
+
+namespace openapi;
+
+class Convertor
+{
+    private $fields = [];
+
+    public function __construct($fields)
+    {
+        $this->fields = $fields;
+        //['appid','convert_sn','batch_code','commonid','time','appkey','mobile','convert_type'];
+    }
+
+    public function exist($convert_sn,$appid)
+    {
+        $model = Model();
+        $items = $model->table('goods_convert')->where(['convert_sn' => $convert_sn, 'appid' => $appid])->master(true)->select();
+        return !empty($items);
+    }
+
+    private function presign_body($input)
+    {
+        ksort($input);
+        reset($input);
+
+        $params = [];
+        foreach ($input as $key => $val)
+        {
+            if(in_array($key,$this->fields)) {
+                $params[] = "{$key}={$val}";
+            }
+        }
+
+        return implode('&',$params);
+    }
+
+    public function verify($input)
+    {
+        $signed = $input['signed'];
+        $appid  = $input['appid'];
+        if(empty($signed) || empty($appid)) return false;
+
+        $signed = base64_decode($signed);
+        $body = $this->presign_body($input);
+
+        return KeyManager::instance()->verify($appid,$body,$signed);
+    }
+}

+ 62 - 0
helper/openapi/KeyManager.php

@@ -0,0 +1,62 @@
+<?php
+/**
+ * Created by PhpStorm.
+ * User: stanley-king
+ * Date: 2018/12/12
+ * Time: 11:14 AM
+ */
+
+namespace openapi;
+
+
+class KeyManager
+{
+    static private $stInstance = null;
+    private $mPaths = [];
+    private $mKeys = [];
+
+    const JYC_APPID = "JYC_CHANNEL";
+
+    private function __construct()
+    {
+        $this->mPaths = [];
+        $this->mPaths[self::JYC_APPID] = BASE_ROOT_PATH . '/helper/openapi/pub/jyc_pub.pem';
+    }
+
+    static public function instance()
+    {
+        if(self::$stInstance == null) {
+            self::$stInstance = new KeyManager();
+        }
+        return self::$stInstance;
+    }
+
+    private function pub_key($appid)
+    {
+        if(empty($appid)) return false;
+
+        if(!array_key_exists($appid,$this->mKeys))
+        {
+            if(!array_key_exists($appid,$this->mPaths))
+            {
+                return false;
+            }
+            else {
+                $key = file_get_contents($this->mPaths[$appid]);
+                $pub = openssl_get_publickey($key);
+                if($pub === false) return false;
+
+                $this->mKeys[$appid] = $pub;
+            }
+        }
+
+        return $this->mKeys[$appid];
+    }
+
+    public function verify($appid,$body,$signed)
+    {
+        $pub = $this->pub_key($appid);
+        if($pub === false) return false;
+        return openssl_verify($body, $signed, $pub) === 1;
+    }
+}

+ 9 - 0
helper/openapi/pub/jyc_pri.pem

@@ -0,0 +1,9 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIBOgIBAAJBALG35TGivB+3wYp4c32f6BD9jb39pRpPujPsppe9q6N01tp9ZGpf
+m2fMHFlC4nEYRllwXBFKIiLkV7sJrFM10WkCAwEAAQJALCevl0yChzLlsFzK/Qxs
+4UPOIsVRbx8d+Waz4YGrknm8CalfN/a63IbmgnO8z4ccdt8AXcHdMXnv4zhkmeO7
+MQIhAN9UaqWFGdxuJIOh1wNWpmhh1TXIrm5XG2IM9rARG5pdAiEAy7da4TYVe4In
+9ycLCTve7h0ojHraEmvA43y7/7JmGn0CIA+CJjG+T3BuOZzmdS7nKoEfIhYtDGff
+Jqila9AIMBmFAiEAi0qMtk7vs2qUfxbQIfkw/ikrz5o0v8GzuxhPx48o51UCIHMl
+BMbNoKIW/PIR5UpuHAqSar0BIgjKUGMDFuHwKoA4
+-----END RSA PRIVATE KEY-----

+ 4 - 0
helper/openapi/pub/jyc_pub.pem

@@ -0,0 +1,4 @@
+-----BEGIN PUBLIC KEY-----
+MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBALG35TGivB+3wYp4c32f6BD9jb39pRpP
+ujPsppe9q6N01tp9ZGpfm2fMHFlC4nEYRllwXBFKIiLkV7sJrFM10WkCAwEAAQ==
+-----END PUBLIC KEY-----

+ 0 - 2
helper/pay/alipay.php

@@ -53,8 +53,6 @@ class alipay implements IPay
 
     private function getParam($pay_sn, $fee, $order_sn, $subject)
     {
-//        $ret['partner'] = '2088121219613123';                           // 合作者身份ID
-//        $ret['seller_id'] = 'napheir.ao@lrlz.com';                      // 签约卖家支付宝账号
         $ret['partner'] = ALIPAY_PARTNER;                           // 合作者身份ID
         $ret['seller_id'] = ALIPAY_SELLER_ID;                      // 签约卖家支付宝账号
 

+ 30 - 0
mobile/control/convert.php

@@ -0,0 +1,30 @@
+<?php
+/**
+ * Created by PhpStorm.
+ * User: stanley-king
+ * Date: 2018/12/12
+ * Time: 10:47 AM
+ */
+
+require_once(BASE_ROOT_PATH . '/helper/fcode/operator.php');
+require_once(BASE_ROOT_PATH . '/helper/fcode/mfcode.php');
+require_once(BASE_ROOT_PATH . '/helper/session_helper.php');
+require_once(BASE_ROOT_PATH . '/helper/third_author/wxauthor.php');
+require_once(BASE_ROOT_PATH . '/helper/login_helper.php');
+require_once(BASE_ROOT_PATH . '/helper/url_helper.php');
+
+class convertControl extends mobileControl
+{
+    public function __construct()
+    {
+        parent::__construct();
+    }
+
+    public function fcodeOp()
+    {
+        $common_id  = intval($_GET['common_id']);
+        $batch_code = $_GET['batch_code'];
+        $appid = $_GET[''];
+    }
+
+}

+ 67 - 0
mobile/control/fcode.php

@@ -12,6 +12,8 @@ require_once(BASE_ROOT_PATH . '/helper/session_helper.php');
 require_once(BASE_ROOT_PATH . '/helper/third_author/wxauthor.php');
 require_once(BASE_ROOT_PATH . '/helper/login_helper.php');
 require_once(BASE_ROOT_PATH . '/helper/url_helper.php');
+require_once(BASE_ROOT_PATH . '/helper/openapi/KeyManager.php');
+require_once(BASE_ROOT_PATH . '/helper/openapi/Convertor.php');
 
 class fcodeControl extends mobileControl
 {
@@ -168,4 +170,69 @@ class fcodeControl extends mobileControl
             return self::outsuccess(null);
         }
     }
+
+    public function convertOp()
+    {
+        if($this->check_parmas($_GET) === false) {
+//            return self::outsuccess();
+        }
+        $convert = new openapi\Convertor();
+        $fSucc = $convert->verify($_GET);
+        if($fSucc === false) {
+//            return self::outsuccess();
+        }
+
+        $convert_type = $_GET['convert_type'];
+        if($convert_type == 'fcode')
+        {
+            $batch_code = $_GET['batch_code'];
+            $common_id  = intval($_GET['common_id']);
+            if(empty($batch_code) || $common_id <= 0) {
+//                return self::outsuccess();
+            }
+            $find = $convert->fcode($_GET['convert_sn'],$_GET['appid'],$batch_code,$common_id);
+            if($find) {
+//                return self::outsuccess();
+            }
+
+            $mobile = $_GET['mobile'];
+            $mobile_loginner = new login\mobile_log($mobile);
+
+            if($mobile_loginner->ismember()) {
+                $mobile_loginner->login();
+            } else {
+                $mobile_loginner->register('',0,$mobile);
+                $mobile_loginner->login();
+            }
+
+            $oper = new fcode\operator($common_id,$batch_code,$mobile,'');
+            $fcode = $oper->grabed();
+
+            if($fcode == false)
+            {
+                $fcode = $oper->grab();
+                if($fcode == false) {
+//                    return self::outsuccess(['url' => $url]);
+                }
+            }
+            else {
+                
+            }
+        }
+        else {
+//                return self::outsuccess();
+        }
+    }
+
+    private function check_parmas($input)
+    {
+        $fields = ['appid','convert_sn','appkey','mobile','convert_type','signed'];
+        foreach ($fields as $key) {
+            if(!array_key_exists($key,$input)) return false;
+            else {
+                if(empty($input[$key])) return false;
+            }
+        }
+        return true;
+    }
 }

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 122 - 0
test/TestOpenAPI.php


La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 0 - 167
test/TestSearch.php


La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 202 - 0
test/TestSecurity.php