Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
<?php/*QBPWCF, Quick Build PHP website Component base on Fedora Linux.Copyright (C) 2015~2025 Min-Jhin,ChenThis file is part of QBPWCF.QBPWCF is free software: you can redistribute it and/or modifyit under the terms of the GNU General Public License as published bythe Free Software Foundation, either version 3 of the License, or(at your option) any later version.QBPWCF is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; without even the implied warranty ofMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See theGNU General Public License for more details.You should have received a copy of the GNU General Public Licensealong with QBPWCF. If not, see <http://www.gnu.org/licenses/>.*/namespace qbpwcf;/*類別說明:存取Amazon服務的類別備註:建議改用 odrive 來跟雲端硬碟互動,參考資料https://docs.odrive.com/v1.0/docs.*/class amazon{/*#函式說明:#當前類別被呼叫的靜態方法不存在時,將會執行該函數,回報該方法不存在.#回傳結果:#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.#$reuslt["error"],執行不正常結束的錯訊息陣列.#$result["function"],當前執行的函式名稱.#必填參數:#$method,物件,為物件實體或類別名稱,會自動置入該參數.#$arguments,陣列,為呼叫方法時所用的參數.#可省略參數:#無.#參考資料:#__call=>http://php.net/manual/en/language.oop5.overloading.php#object.callstatic#備註:#無.*/public function __call($method,$arguments){#取得當前執行的函式$result["function"]=__FUNCTION__;#設置執行不正常$result["status"]="false";#設置執行錯誤$result["error"][]=__NAMESPACE__ ."/".$method."() 不存在!";#設置所丟入的參數$result["error"][]=$arguments;#回傳結果return $result;}#function __call end/*#函式說明:#當前類別被呼叫的靜態方法不存在時,將會執行該函數,回報該方法不存在.#回傳結果:#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.#$reuslt["error"],執行不正常結束的錯訊息陣列.#$result["function"],當前執行的函式名稱.#必填參數:#$method,物件,為物件實體或類別名稱,會自動置入該參數.#$arguments,陣列,為呼叫方法時所用的參數.#可省略參數:#無.#參考資料:#__call=>http://php.net/manual/en/language.oop5.overloading.php#object.callstatic#備註:#無.*/public static function __callStatic($method,$arguments){#取得當前執行的函式$result["function"]=__FUNCTION__;#設置執行不正常$result["status"]="false";#設置執行錯誤$result["error"][]="欲呼叫的". __NAMESPACE__ ."/".$method."() 不存在!";#設置所丟入的參數$result["error"][]=$arguments;#回傳結果return $result;}#function __callStatic end/*#函式說明:#用 amazon 的登入機制來認證,登入成功後轉址到特定頁面.#回傳結果:#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.#$result["error"],錯誤訊息#$result["content"],語法#$result["function"],當前執行的函數名稱#必填參數:#$conf["clientId"],字串,login app 用戶端的 id.$conf["clientId"]="";#可省略參數:#$conf["redirect_uri"],字串,認證完要轉址到哪哩,預設為$_SERVER["REQUEST_URI"].#$conf["redirect_uri"]="";#可省略參數:#無#參考資料:#http://login.amazon.com/website#http://login.amazon.com/documentation#https://images-na.ssl-images-amazon.com/images/G/01/lwa/dev/docs/website-developer-guide._TTH_.pdf#https://sellercentral.amazon.com/gp/homepage.html#備註:#好像壞了,請檢查.*/public static function loginWithAmazonAccount(&$conf){#初始化要回傳的結果$result=array();#取得當前執行的函數名稱$result["function"]=__FUNCTION__;#初始化要回傳的語法$result["content"]="";#如果沒有參數if(func_num_args()==0){#設置執行失敗$result["status"]="false";#設置執行錯誤訊息$result["error"]="函數".$result["function"]."需要參數";#回傳結果return $result;}#if end#取得參數$result["argu"]=$conf;#如果 $conf 不為陣列if(gettype($conf)!=="array"){#設置執行失敗$result["status"]="false";#設置執行錯誤訊息$result["error"][]="\$conf變數須為陣列形態";#如果傳入的參數為 nullif($conf===null){#設置執行錯誤訊息$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";}#if end#回傳結果return $result;}#if end#檢查參數#函式說明:#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.#$reuslt["error"],執行不正常結束的錯訊息陣列.#$result["function"],當前執行的函式名稱.#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.#$result["argu"],字串陣列,目前輸入的參數名稱陣列.#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.#$result["notNeedVar"],字串陣列,多餘的參數名稱.#必填寫的參數:#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。$conf["variableCheck::checkArguments"]["varInput"]=&$conf;#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("clientId");#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string");#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";#可以省略的參數:#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.#$conf["canNotBeEmpty"]=array();#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.#$conf["canBeEmpty"]=array();#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.#$conf["skipableVariableCanNotBeEmpty"]=array();#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("redirect_uri");#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string");#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array($_SERVER["REQUEST_URI"]);#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.#$conf["arrayCountEqualCheck"][]=array();#參考資料來源:#array_keys=>http://php.net/manual/en/function.array-keys.php$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);unset($conf["variableCheck::checkArguments"]);#如果參數檢查失敗if($checkArguments["status"]==="false"){#設置執行不正常$result["status"]="false";#設置執行錯誤$result["error"]=$checkArguments;#回傳結果return $result;}#if end#如果參數檢查不通過if($checkArguments["passed"]==="false"){#設置執行不正常$result["status"]="false";#設置執行錯誤$result["error"]=$checkArguments;#回傳結果return $result;}#if end#設置登入按鈕$result["content"]=$result["content"]."<!-- login button --><div id=\"LoginWithAmazon\"><imgborder=\"0\"alt=\"Login with Amazon\"src=\"https://images-na.ssl-images-amazon.com/images/G/01/lwa/btnLWA_gold_156x32.png\"width=\"156\" height=\"32\"/img></div>";#設置登出按鈕$result["content"]=$result["content"]."<!-- logout div --><div id=\"Logout\">Logout</div>";#設置取得資訊的區塊$result["content"]=$result["content"]."<div id=\"amazon-root\"></div>";#設置嵌入 amazon login js jdk 與登入、登出事件的js語法$result["content"]=$result["content"]."<script>//當 amazon login sdk 載入完畢後在設置 app client idwindow.onAmazonLoginReady = function(){amazon.Login.setClientId('".$conf["clientId"]."');};//優先載入amazon login sdk(function(d){var a = d.createElement('script'); a.type = 'text/javascript';a.async = true; a.id = 'amazon-login-sdk';a.src = 'https://api-cdn.amazon.com/sdk/login1.js';d.getElementById('amazon-root').appendChild(a);})(document);//登入與取得個資document.getElementById('LoginWithAmazon').onclick = function(){options = { scope : 'profile' };amazon.Login.authorize(options, '".$conf["redirect_uri"]."');return false;};//登出事件document.getElementById('Logout').onclick = function(){amazon.Login.logout();};</script>";#設置執行正常$result["status"]="true";#回傳結果return $result;}#function loginWithAmazonAccount end/*#函式說明:#解析從 amazon 認證過後的 token 與相關資訊,並將結果儲存到$_SESSION["amazon::parseToken"]#回傳結果:#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.#$result["founded"],是否有找到必備的token.#$result["error"],錯誤訊息#$result["content"],解析後的結果#$result["function"],當前執行的函數名稱#必填參數:#無.#可省略參數:#無.#參考資料:#無.#備註:#請勿跟authenticateToAC()用在同一個頁面.*/public static function parseToken(){#初始化要回傳的結果$result=array();#取得當前執行的函數名稱$result["function"]=__FUNCTION__;#接收變數#涵式說明:#可以處理多個透過GET、POST而來的資訊,儲存成變數,同時限定傳送的方法、來源,來增加安全性,檢查有沒有皆收到必須要接收到的變數,沒有接收到的變數可以指定從session變數中取得.#回傳的結果:#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.#$result["error"],錯誤訊息陣列.#$resutl["function"],當前執行的涵式名稱.#$result["warning"],警告訊息陣列.#$result["passed"],是否有皆收到全部該接收到的變數,若有設定$conf["checkedVarName"]的話,執行正常後會回傳該結果。#$result["lostVarName"],沒有皆收到的變數名稱陣列#$result["inputDataContent"],所接收的參數陣列.#$result["inputDataContent"]["變數名稱"],所接收變數的內容.#$result["inputDataCount"],從表單總共接收到幾個元素.#$result["HTTP_REFERER"],前一頁的網址,null代表不存在.#必填的參數:#$conf["method"],字串,傳送過來的資料是用"post/POST"還是"get/GET"?$conf["form::responseMultiInputDataSecurityEnhance"]["method"]="GET";#可省略的參數:#$conf["allowGet"],字串,是否要允許 get 傳值,"true",代表允許;"false" ,代表不允許,預設爲不允許.$conf["form::responseMultiInputDataSecurityEnhance"]["allowGet"]="true";#$conf["limitPrePage"],字串陣列,是否要限定前一頁的網址為哪些,才能接收內容,不符合則轉址.#$conf["limitPrePage"]=array("");#$conf["transferLocation"],字串,遇到get傳值,或前一個頁面不符合要求時要轉址到的頁面,預設爲資安素養網"https://isafe.moe.edu.tw/"#$conf["transferLocation"]="";#$conf["ignore"]=字串陣列,如果要接收的變數名稱與該陣列其一元素一樣,則不放進要回傳的變數裏面.#$conf["ignore"]=array();#$conf["correctCharacter"]=,字串,如果爲"false",則不處理可能導致網頁出問題的字串,預設爲要進行處理.#$conf["correctCharacter"]="false";#$conf["checkedVarName"],字串陣列,為檢查是否有接收到哪些變數.$conf["form::responseMultiInputDataSecurityEnhance"]["checkedVarName"]=array("access_token");#$conf["canBeEmptyString"],字串,用$conf["checkedVarName"]指定接收的變數名稱陣列,若接收到的內容為空字串是否算有接收到內容,預設為"false","true"代表接收到的內容可以為空字串,"false"代表接收到的內容不可以為空字串.#$conf["canBeEmptyString"]="false";#$conf["sessionNameArray"],陣列,若存在則代表若沒有從表單取得變數,則從session變數中取得內容,每個元素代表每個表單變數對應的session名稱,若不是要改用session方式取得變數內容的變數,請輸入null,數量請跟$conf["checkedVarName"]參數一致.#$conf["sessionNameArray"]=array();#$conf["unsetSessionArray"],陣列,與$conf["sessionNameArray"]對應的元素,是否要接收到變數後就卸除,"true"代表要卸除,"false"代表不要卸除.#$conf["unsetSessionArray"]=array();#參考資料來源:#foreach 的用法 -> http://php.net/manual/en/control-structures.foreach.php#伺服器端的變數 -> http://php.net/manual/en/reserved.variables.server.php#備註:#表單變數的名稱若含有「.」,則會變成「-」。$responseMultiInputDataSecurityEnhance=form::responseMultiInputDataSecurityEnhance($conf["form::responseMultiInputDataSecurityEnhance"]);unset($conf["form::responseMultiInputDataSecurityEnhance"]);#如果接收變數失敗if($responseMultiInputDataSecurityEnhance["status"]==="false"){#設置執行不正常$result["status"]="false";#設置執行錯誤$result["error"]=$responseMultiInputDataSecurityEnhance;#回傳結果return $result;}#if end#如果沒有接收到一定要的變數if($responseMultiInputDataSecurityEnhance["passed"]==="false"){#嘗試取得 session 變數 amazon::parseToken#函式說明:#取得session變數裡面的數值,然後卸除該session變數#回傳的結果:#$result["status"],執行是否正常,"true"代表正常,"false"代表有誤.#$result["error"],錯誤訊息.#$result["founded"],是否找到session變數,"true"代表找到,"false"代表沒找到.#$result["content"],取得的變數內容.#$result["function"],當前執行的函數名稱.#必填的參數:#$conf["sessionVarName"],字串,要取得內容的session變數名稱$conf["session::getSessionValue"]["sessionVarName"]="amazon::parseToken";#可省略的參數:#$conf["unsetSessionVar"],字串,代表要卸除session變數,預設為"false"不卸除,"true"代表要卸除.$conf["session::getSessionValue"]["unsetSessionVar"]="true";#參考資料:#call-time-pass-by-reference-easy-fix-available=>http://stackoverflow.com/questions/8971261/php-5-4-call-time-pass-by-reference-easy-fix-available#可變變數=>http://emn178.pixnet.net/blog/post/80119035-php%E6%95%99%E5%AD%B8---%E8%AE%8A%E6%95%B8%28variables%29#卸除參考的原始變數=>http://stackoverflow.com/questions/6654538/php-function-to-unset-variables-passed-by-reference$getSessionValue=session::getSessionValue($conf["session::getSessionValue"]);unset($conf["session::getSessionValue"]);#如果嘗試取得session變數失敗if($getSessionValue["status"]==="false"){#設置執行不正常$result["status"]="false";#設置執行錯誤$result["error"]=$getSessionValue;#回傳結果return $result;}#if end#如果取得到session變數if($getSessionValue["founded"]==="true"){#取得 session 變數值$result["content"]=$getSessionValue["content"];#設置執行正常$result["status"]="true";#設置有取得到token$result["founded"]="true";#回傳結果return $result;}#if end#反之else{#設置執行正常$result["status"]="true";#設置沒有取得到token$result["founded"]="false";#回傳結果return $result;}#else end}#if end#將網址的GET變數去掉#函式說明:#將字串特定關鍵字與其後面的內容剔除#回傳結果:#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.#$result["error"],錯誤訊息陣列.#$result["warning"],警告訊息鎮列.#$result["founded"],有無找到定字串"true"代表有,"false"代表沒有.#$result["function"],當前執行的函數名稱.#$result["oriStr"],要處理的原始字串內容.#$result["content"],處理好的的字串內容.#必填的參數:$conf["stringProcess::delStrAfterKeyWord"]["stringIn"]=$_SERVER["REQUEST_URI"];#要處理的字串.$conf["stringProcess::delStrAfterKeyWord"]["keyWord"]="?";#特定字串.$delStrAfterKeyWord=stringProcess::delStrAfterKeyWord($conf["stringProcess::delStrAfterKeyWord"]);unset($conf["stringProcess::delStrAfterKeyWord"]);#如果濾掉get變數失敗if($delStrAfterKeyWord["status"]==="false"){#設置執行不正常$result["status"]="false";#設置執行錯誤$result["error"]=$delStrAfterKeyWord;#回傳結果return $result;}#if end#如果濾掉get變數失敗if($delStrAfterKeyWord["founded"]==="false"){#設置執行不正常$result["status"]="false";#設置執行錯誤$result["error"]=$delStrAfterKeyWord;#回傳結果return $result;}#if end#建立session變數,然後轉址到不含get變數的當前頁面.#函式說明:#設定session變數後,立即轉址.#回傳的結果:#$result["status"],執行是否成功,"true"代表成功,"false"代表不成功.#$result["function"],當前執行的函數名稱.#$result["error"],錯誤訊息陣列.#必填的參數:#$conf["headerLocation"],為要轉址到的地方,若爲 $_SERVER["PHP_SELF"],則爲回到目前頁面,全民資安素養網爲 https://isafe.moe.edu.tw/.$conf["header::redirectionNow"]["headerLocation"]=$delStrAfterKeyWord["content"];#可省略的參數:#$conf["sessionName"],字串陣列,可以指派session變數的名稱.$conf["header::redirectionNow"]["sessionName"]=array("amazon::parseToken");#$conf["sessionValue"]字串陣列,可以指派session變數的內容.$conf["header::redirectionNow"]["sessionValue"]=array($responseMultiInputDataSecurityEnhance["inputDataContent"]);#參靠資料來源:#http://php.net/manual/en/reserved.variables.server.php$redirectionNow=header::redirectionNow($conf["header::redirectionNow"]);unset($conf["header::redirectionNow"]);#如果轉址失敗if($redirectionNow["status"]==="false"){#設置執行不正常$result["status"]="false";#設置執行錯誤$result["error"]=$redirectionNow;#回傳結果return $result;}#if end#執行到這代表不正常$result["status"]="false";#設置錯誤訊息$result["error"][]="非預期的結果";#回傳結果return $result;}#function parseToken end/*#函式說明:#從表單接收解析從 amazon REST API 認證過後的 token 與相關資訊,並將結果儲存到$_SESSION變數裡面.#回傳結果:#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.#$result["error"],錯誤訊息#$result["content"],解析後的結果#$result["function"],當前執行的函數名稱.#$result["founded"],是否有找到必備的token.#$result["isJson"],如果是輸出json,則為"true",反之為"false".#$result["isJs"],如果回傳的是js語法則為"true",反之為"false".#必填參數:#無.#可省略參數:#$conf["inputVar"],字串,接收的post變數名稱,預設為"unParsedRestStr";#$conf["inputVar"]="unParsedRestStr";#$conf["restTokenSessionName"],字串陣列,儲存token資訊的session變數名稱,預設為array("amazon::parseRestToken").#$conf["restTokenSessionName"]=array("amazon::parseRestToken");#$conf["re_url"],字串,成功取得token資訊後要轉位到哪邊,預設為$_SERVER["PHP_SELF"].#$conf["re_url"]=$_SERVER["PHP_SELF"];#參考資料:#無.#備註:#無.*/public static function parseRestToken(&$conf){#初始化要回傳的結果$result=array();#取得當前執行的函數名稱$result["function"]=__FUNCTION__;#取得參數$result["argu"]=$conf;#如果 $conf 不為陣列if(gettype($conf)!="array"){#設置執行失敗$result["status"]="false";#設置執行錯誤訊息$result["error"][]="\$conf變數須為陣列形態";#如果傳入的參數為 nullif($conf==null){#設置執行錯誤訊息$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";}#if end#回傳結果return $result;}#if end#檢查參數#函式說明:#檢查一包含數個可省略變數的陣列變數,其型態是否正確,省略掉的陣列變數可以直接給定預設值。#回傳結果:#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.#$result["error"],錯誤訊息陣列.#$result["function"],當前執行的函式名稱.#$result["passed"],參數是否都通過檢查,"true",代表有通過檢查,"false"代表沒有通過檢查。#必填參數:#$conf["checkedVar"],陣列,要檢查的變數陣列名稱為?$conf["variableCheck::checkSkipableVarType"]["checkedVar"]=$conf;#$conf["sikpableVarNameArray"],字串陣列,要檢查型態是否設定正確的變數名稱陣列.$conf["variableCheck::checkSkipableVarType"]["sikpableVarNameArray"]=array("inputVar","restTokenSessionName","re_url");#$argu,要直接存取的陣列變數名稱,變數前面加上「&」,如果要在別的函式裡面使用本函式,請記得將變動過結果($argu)給使用該函式的設定變數(通常是$conf=$argu).$argu=&$conf;#可省略參數:#$conf["skipableVarTypeArray"],字串陣列,要檢查的每個變數,其型態應該要為何,null代表不指定變數形態.$conf["variableCheck::checkSkipableVarType"]["skipableVarTypeArray"]=array("string","string","string");#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的變數要初始化為什麼,null代表不指定.$conf["variableCheck::checkSkipableVarType"]["skipableVarDefaultValue"]=array("unParsedRestStr","amazon::parseRestToken",$_SERVER["PHP_SELF"]);$checkSkipableVarType=variableCheck::checkSkipableVarType($conf["variableCheck::checkSkipableVarType"],$argu);unset($conf["variableCheck::checkSkipableVarType"]);#如果檢查可省略參數失敗if($checkSkipableVarType["status"]==="false"){#設置執行失敗$result["status"]="false";#設置執行錯誤訊息$result["error"]=$checkSkipableVarType;#回傳結果return $result;}#if end#取得變動後的參數$conf=$argu;#判斷是否為ajax要求#函式說明:#判斷當前php檔的執行是否為ajax的要求.#回傳結果:#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.#$result["function"],當前執行的函數.#$result["content"],是否為ajax要求,"true"代表是,"false"代表不是.#可省略參數:#$conf["useGetVarToRecogniseAjaxRequest"],字串,用來識別是否為ajax要求的get變數名稱,若其值為"true"則代表為ajax要求,反之為"false",判斷好後會將該變數移除.#$conf["useGetVarToRecogniseAjaxRequest"]="is_ajax";#$conf["usePostVarToRecogniseAjaxRequest"],字串,用來識別是否為ajax要求的post變數名稱,若其值為"true"則代表為ajax要求,反之為"false",判斷好後會將該變數移除.#$conf["usePostVarToRecogniseAjaxRequest"]="is_ajax";#備註:#如果client端沒有傳送ajax要求的識別header,則無法識別是ajax要求.$is_ajax=form::is_ajax();#如果不是ajaxif($is_ajax["content"]==="false"){#建立傳送當前網址的ajax要求.#涵式說明:#建立透過javaScript傳送post數值到特定頁面,並且取得頁面的回應,將之結果放置在特定的區塊裏面的js函式.#回傳結果:#$result["status"],執行正確與否,"true"代表執行正確,"false"代表執行失敗.#$result["error"],錯誤訊息陣列.#$result["content"],JavaScript的語法#$result["function"],當前執行的函數名稱#必填參數:#$conf["receivePage"],字串,要接收數值的頁面.$conf["javaScript::ajaxSendPostValue"]["receivePage"]=$_SERVER["PHP_SELF"];$conf["javaScript::ajaxSendPostValue"]["jsFunctionName"]="parseRestToken";#可省略參數:#$conf["scriptTag"],是否要用<script></script>包住,預設為"false",不包住;"true"為包住.$conf["javaScript::ajaxSendPostValue"]["scriptTag"]="true";#$conf["varNameArray"],字串陣列,要傳送的數值名稱.#$conf["javaScript::ajaxSendPostValue"]["varNameArray"]=array($conf["inputVar"]);#$conf["varValueArray"],陣列,要傳送的數值內容.#$conf["javaScript::ajaxSendPostValue"]["varValueArray"]=array("window.location.href");#$conf["jsFunctionName"],字串,ajax裏面的js涵式名稱.#$conf["jsVarNameArray"],字串陣列,要傳送的js數值名稱.$conf["javaScript::ajaxSendPostValue"]["jsVarNameArray"]=array($conf["inputVar"]);#$conf["jsVarValueArray"],陣列,要傳送的js數值內容.$conf["javaScript::ajaxSendPostValue"]["jsVarValueArray"]=array("'&'+window.location.href.split('#')[1]");#$conf["javaScript::ajaxSendPostValue"]["jsVarValueArray"]=array("encodeURIComponent(window.location.href.split('#')[1])");#$conf["javaScript::ajaxSendPostValue"]["jsVarValueArray"]=array("encodeURI('&'+window.location.href.split('#')[1])");#$conf["responsePalaceId"],字串,回傳的內容要呈現於哪個<span id = ? ></span>、<div id= ? ></div>區塊之間。#$conf["javaScript::ajaxSendPostValue"]["responsePalaceId"]="";#$conf["condition"],字串,立即執行ajax的條件.$conf["javaScript::ajaxSendPostValue"]["condition"]="window.location.href.search('&')!==-1 &&window.location.href.search('#')!==-1 &&window.location.href.search('access_token')!== -1 &&window.location.href.search('token_type')!== -1 &&window.location.href.search('expires_in')!== -1 &&window.location.href.search('scope')!== -1";#$conf["conditionComment"],字串,立即執行ajax的條件註解,預設為$conf["condition"].$conf["javaScript::ajaxSendPostValue"]["conditionComment"]="if is amazon token response";#$conf["sendNow"],字串,是否要在document.#$conf["sendNow"],字串,是否要在document.ready後馬上執行ajax,預設為"false",代表不要,"true"代表要.$conf["javaScript::ajaxSendPostValue"]["sendNow"]="true";#$conf["successAction"],字串,ajax要求成功後做的事情.$conf["javaScript::ajaxSendPostValue"]["successAction"]="//如果存在回應內容if(xmlhttp.responseText!==undefined){//取得jsonif(data=JSON.parse(xmlhttp.responseText)){//debug//alert(data.toSource());//如果存在 data.statusif(data.status!==undefined){//如果 data.status 為 'true'if(data.status==='true'){//轉址window.location.href='".$conf["re_url"]."';}//if end}//if end}//if end}//if end";#如果有設置 conf["re_url"]if(isset($conf["re_url"])){#$conf["redir_url"],字串,是否要在要求成功後進行轉址的動作,轉址到$conf["redir_url"].$conf["javaScript::ajaxSendPostValue"]["redir_url"]=$conf["re_url"];}#if end#參考資料來源:#http://www.w3school.com.cn/php/php_ajax_suggest.asp$ajaxSendPostValue=javaScript::ajaxSendPostValue($conf["javaScript::ajaxSendPostValue"]);unset($conf["javaScript::ajaxSendPostValue"]);#如果建立 ajax 要求失敗if($ajaxSendPostValue["status"]==="false"){#設置執行失敗$result["status"]="false";#設置執行錯誤訊息$result["error"]=$ajaxSendPostValue;#回傳結果return $result;}#if end#取得js語法$result["content"]=$ajaxSendPostValue["content"];#設置執行正常$result["status"]="true";#不是json$result["isJson"]="false";#是js語法$result["isJs"]="true";#回傳結果return $result;}#if end#反之是ajaxelse{#接收變數#涵式說明:#可以處理多個透過GET、POST而來的資訊,儲存成變數,同時限定傳送的方法、來源,來增加安全性,檢查有沒有皆收到必須要接收到的變數,沒有接收到的變數可以指定從session變數中取得.#回傳的結果:#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.#$result["error"],錯誤訊息陣列.#$resutl["function"],當前執行的涵式名稱.#$result["warning"],警告訊息陣列.#$result["passed"],是否有皆收到全部該接收到的變數,若有設定$conf["checkedVarName"]的話,執行正常後會回傳該結果。#$result["lostVarName"],沒有皆收到的變數名稱陣列#$result["inputDataContent"],所接收的參數陣列.#$result["inputDataContent"]["變數名稱"],所接收變數的內容.#$result["inputDataCount"],從表單總共接收到幾個元素.#$result["HTTP_REFERER"],前一頁的網址,null代表不存在.#必填的參數:#$conf["method"],字串,傳送過來的資料是用"post/POST"還是"get/GET"?$conf["form::responseMultiInputDataSecurityEnhance"]["method"]="POST";#可省略的參數:#$conf["allowGet"],字串,是否要允許 get 傳值,"true",代表允許;"false" ,代表不允許,預設爲不允許.#$conf["form::responseMultiInputDataSecurityEnhance"]["allowGet"]="true";#$conf["limitPrePage"],字串陣列,是否要限定前一頁的網址為哪些,才能接收內容,不符合則轉址.#$conf["limitPrePage"]=array("");#$conf["transferLocation"],字串,遇到get傳值,或前一個頁面不符合要求時要轉址到的頁面,預設爲資安素養網"https://isafe.moe.edu.tw/"#$conf["transferLocation"]="";#$conf["ignore"]=字串陣列,如果要接收的變數名稱與該陣列其一元素一樣,則不放進要回傳的變數裏面.#$conf["ignore"]=array();#$conf["correctCharacter"]=,字串,如果爲"false",則不處理可能導致網頁出問題的字串,預設爲要進行處理.#$conf["correctCharacter"]="false";#$conf["checkedVarName"],字串陣列,為檢查是否有接收到哪些變數.$conf["form::responseMultiInputDataSecurityEnhance"]["checkedVarName"]=array($conf["inputVar"],"access_token","token_type","expires_in","scope");#$conf["canBeEmptyString"],字串,用$conf["checkedVarName"]指定接收的變數名稱陣列,若接收到的內容為空字串是否算有接收到內容,預設為"false","true"代表接收到的內容可以為空字串,"false"代表接收到的內容不可以為空字串.$conf["form::responseMultiInputDataSecurityEnhance"]["canBeEmptyString"]="true";#$conf["sessionNameArray"],陣列,若存在則代表若沒有從表單取得變數,則從session變數中取得內容,每個元素代表每個表單變數對應的session名稱,若不是要改用session方式取得變數內容的變數,請輸入null,數量請跟$conf["checkedVarName"]參數一致.#$conf["sessionNameArray"]=array();#$conf["unsetSessionArray"],陣列,與$conf["sessionNameArray"]對應的元素,是否要接收到變數後就卸除,"true"代表要卸除,"false"代表不要卸除.#$conf["unsetSessionArray"]=array();#參考資料來源:#foreach 的用法 -> http://php.net/manual/en/control-structures.foreach.php#伺服器端的變數 -> http://php.net/manual/en/reserved.variables.server.php#備註:#表單變數的名稱若含有「.」,則會變成「-」。$responseMultiInputDataSecurityEnhance=form::responseMultiInputDataSecurityEnhance($conf["form::responseMultiInputDataSecurityEnhance"]);unset($conf["form::responseMultiInputDataSecurityEnhance"]);#如果接收變數失敗if($responseMultiInputDataSecurityEnhance["status"]==="false"){#設置執行不正常$result["status"]="false";#設置執行錯誤$result["error"]=$responseMultiInputDataSecurityEnhance;#回傳結果return $result;}#if end#如果沒有接收到一定要的變數if($responseMultiInputDataSecurityEnhance["passed"]==="false"){#嘗試取得 session 變數 amazon::parseToken#函式說明:#取得session變數裡面的數值,然後卸除該session變數#回傳的結果:#$result["status"],執行是否正常,"true"代表正常,"false"代表有誤.#$result["error"],錯誤訊息.#$result["founded"],是否找到session變數,"true"代表找到,"false"代表沒找到.#$result["content"],取得的變數內容.#$result["function"],當前執行的函數名稱.#必填的參數:#$conf["sessionVarName"],字串,要取得內容的session變數名稱$conf["session::getSessionValue"]["sessionVarName"]=$conf["restTokenSessionName"];#可省略的參數:#$conf["unsetSessionVar"],字串,代表要卸除session變數,預設為"false"不卸除,"true"代表要卸除.#$conf["session::getSessionValue"]["unsetSessionVar"]="true";#參考資料:#call-time-pass-by-reference-easy-fix-available=>http://stackoverflow.com/questions/8971261/php-5-4-call-time-pass-by-reference-easy-fix-available#可變變數=>http://emn178.pixnet.net/blog/post/80119035-php%E6%95%99%E5%AD%B8---%E8%AE%8A%E6%95%B8%28variables%29#卸除參考的原始變數=>http://stackoverflow.com/questions/6654538/php-function-to-unset-variables-passed-by-reference$getSessionValue=session::getSessionValue($conf["session::getSessionValue"]);unset($conf["session::getSessionValue"]);#如果嘗試取得session變數失敗if($getSessionValue["status"]==="false"){#設置執行不正常$result["status"]="false";#設置執行錯誤$result["error"]=$getSessionValue;#回傳結果return $result;}#if end#如果取得到session變數if($getSessionValue["founded"]==="true"){#取得 session 變數值$result["content"]=$getSessionValue["content"];#設置執行正常$result["status"]="true";#設置有取得到token$result["founded"]="true";#不是json$result["isJson"]="false";#不是js語法$result["isJs"]="false";#回傳結果return $result;}#if end#反之else{#設置執行正常$result["status"]="true";#設置沒有取得到token$result["founded"]="false";#印出 jsonecho json_encode($result);#設置是json$result["isJson"]="true";#不是js語法$result["isJs"]="false";#結束程式return true;}#else end}#if end#反之接收到一定要的變數else{#取得接收到的變數$recVar=$responseMultiInputDataSecurityEnhance["inputDataContent"];#卸除多餘的變數unset($recVar["is_ajax"]);unset($recVar[$conf["inputVar"]]);#儲存解析好的token資訊$_SESSION[$conf["restTokenSessionName"]]=$recVar;#設置取得的token資訊$result["content"]=$_SESSION[$conf["restTokenSessionName"]];#設置token資訊儲存在哪個session變數裡面$result["sessionName"]=$conf["restTokenSessionName"];#設置執行正常$result["status"]="true";#印出 jsonecho json_encode($result);#設置是json$result["isJson"]="true";#不是ajax語法$result["isJs"]="false";#結束程式return true;}#else}#else end}#function parseRestToken end/*#函式說明:#從表單接收解析從 amazon REST API 認證過後的 code 與相關資訊,並將結果儲存到$_SESSION變數裡面.#回傳結果:#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.#$result["error"],錯誤訊息#$result["content"],解析後的結果#$result["function"],當前執行的函數名稱.#$result["founded"],是否有找到必備的code.#必填參數:#無.#可省略參數:#$conf["restCodeSessionName"],字串陣列,儲存token資訊的session變數名稱,預設為array("amazon::parseRestCode").#$conf["restCodeSessionName"]=array("amazon::parseRestCode");#$conf["re_url"],字串,成功取得token資訊後要轉位到哪邊,預設為$_SERVER["PHP_SELF"].#$conf["re_url"]=$_SERVER["PHP_SELF"];#參考資料:#無.#備註:#無.*/public static function parseRestCode(&$conf){#初始化要回傳的結果$result=array();#取得當前執行的函數名稱$result["function"]=__FUNCTION__;#取得參數$result["argu"]=$conf;#如果 $conf 不為陣列if(gettype($conf)!="array"){#設置執行失敗$result["status"]="false";#設置執行錯誤訊息$result["error"][]="\$conf變數須為陣列形態";#如果傳入的參數為 nullif($conf==null){#設置執行錯誤訊息$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";}#if end#回傳結果return $result;}#if end#檢查參數#函式說明:#檢查一包含數個可省略變數的陣列變數,其型態是否正確,省略掉的陣列變數可以直接給定預設值。#回傳結果:#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.#$result["error"],錯誤訊息陣列.#$result["function"],當前執行的函式名稱.#$result["passed"],參數是否都通過檢查,"true",代表有通過檢查,"false"代表沒有通過檢查。#必填參數:#$conf["checkedVar"],陣列,要檢查的變數陣列名稱為?$conf["variableCheck::checkSkipableVarType"]["checkedVar"]=$conf;#$conf["sikpableVarNameArray"],字串陣列,要檢查型態是否設定正確的變數名稱陣列.$conf["variableCheck::checkSkipableVarType"]["sikpableVarNameArray"]=array("restCodeSessionName","re_url");#$argu,要直接存取的陣列變數名稱,變數前面加上「&」,如果要在別的函式裡面使用本函式,請記得將變動過結果($argu)給使用該函式的設定變數(通常是$conf=$argu).$argu=&$conf;#可省略參數:#$conf["skipableVarTypeArray"],字串陣列,要檢查的每個變數,其型態應該要為何,null代表不指定變數形態.$conf["variableCheck::checkSkipableVarType"]["skipableVarTypeArray"]=array("string","string");#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的變數要初始化為什麼,null代表不指定.$conf["variableCheck::checkSkipableVarType"]["skipableVarDefaultValue"]=array("amazon::parseRestCode",$_SERVER["PHP_SELF"]);$checkSkipableVarType=variableCheck::checkSkipableVarType($conf["variableCheck::checkSkipableVarType"],$argu);unset($conf["variableCheck::checkSkipableVarType"]);#如果檢查可省略參數失敗if($checkSkipableVarType["status"]==="false"){#設置執行失敗$result["status"]="false";#設置執行錯誤訊息$result["error"]=$checkSkipableVarType;#回傳結果return $result;}#if end#取得變動後的參數$conf=$argu;#接收變數#涵式說明:#可以處理多個透過GET、POST而來的資訊,儲存成變數,同時限定傳送的方法、來源,來增加安全性,檢查有沒有皆收到必須要接收到的變數,沒有接收到的變數可以指定從session變數中取得.#回傳的結果:#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.#$result["error"],錯誤訊息陣列.#$resutl["function"],當前執行的涵式名稱.#$result["warning"],警告訊息陣列.#$result["passed"],是否有皆收到全部該接收到的變數,若有設定$conf["checkedVarName"]的話,執行正常後會回傳該結果。#$result["lostVarName"],沒有皆收到的變數名稱陣列#$result["inputDataContent"],所接收的參數陣列.#$result["inputDataContent"]["變數名稱"],所接收變數的內容.#$result["inputDataCount"],從表單總共接收到幾個元素.#$result["HTTP_REFERER"],前一頁的網址,null代表不存在.#必填的參數:#$conf["method"],字串,傳送過來的資料是用"post/POST"還是"get/GET"?$conf["form::responseMultiInputDataSecurityEnhance"]["method"]="GET";#可省略的參數:#$conf["allowGet"],字串,是否要允許 get 傳值,"true",代表允許;"false" ,代表不允許,預設爲不允許.$conf["form::responseMultiInputDataSecurityEnhance"]["allowGet"]="true";#$conf["limitPrePage"],字串陣列,是否要限定前一頁的網址為哪些,才能接收內容,不符合則轉址.#$conf["limitPrePage"]=array("");#$conf["transferLocation"],字串,遇到get傳值,或前一個頁面不符合要求時要轉址到的頁面,預設爲資安素養網"https://isafe.moe.edu.tw/"#$conf["transferLocation"]="";#$conf["ignore"]=字串陣列,如果要接收的變數名稱與該陣列其一元素一樣,則不放進要回傳的變數裏面.#$conf["ignore"]=array();#$conf["correctCharacter"]=,字串,如果爲"false",則不處理可能導致網頁出問題的字串,預設爲要進行處理.#$conf["correctCharacter"]="false";#$conf["checkedVarName"],字串陣列,為檢查是否有接收到哪些變數.$conf["form::responseMultiInputDataSecurityEnhance"]["checkedVarName"]=array("code","scope");#$conf["canBeEmptyString"],字串,用$conf["checkedVarName"]指定接收的變數名稱陣列,若接收到的內容為空字串是否算有接收到內容,預設為"false","true"代表接收到的內容可以為空字串,"false"代表接收到的內容不可以為空字串.#$conf["form::responseMultiInputDataSecurityEnhance"]["canBeEmptyString"]="true";#$conf["sessionNameArray"],陣列,若存在則代表若沒有從表單取得變數,則從session變數中取得內容,每個元素代表每個表單變數對應的session名稱,若不是要改用session方式取得變數內容的變數,請輸入null,數量請跟$conf["checkedVarName"]參數一致.#$conf["sessionNameArray"]=array();#$conf["unsetSessionArray"],陣列,與$conf["sessionNameArray"]對應的元素,是否要接收到變數後就卸除,"true"代表要卸除,"false"代表不要卸除.#$conf["unsetSessionArray"]=array();#參考資料來源:#foreach 的用法 -> http://php.net/manual/en/control-structures.foreach.php#伺服器端的變數 -> http://php.net/manual/en/reserved.variables.server.php#備註:#表單變數的名稱若含有「.」,則會變成「-」。$responseMultiInputDataSecurityEnhance=form::responseMultiInputDataSecurityEnhance($conf["form::responseMultiInputDataSecurityEnhance"]);unset($conf["form::responseMultiInputDataSecurityEnhance"]);#如果接收變數失敗if($responseMultiInputDataSecurityEnhance["status"]==="false"){#設置執行不正常$result["status"]="false";#設置執行錯誤$result["error"]=$responseMultiInputDataSecurityEnhance;#回傳結果return $result;}#if end#如果沒有接收到一定要的變數if($responseMultiInputDataSecurityEnhance["passed"]==="false"){#嘗試取得 session 變數 amazon::parseToken#函式說明:#取得session變數裡面的數值,然後卸除該session變數#回傳的結果:#$result["status"],執行是否正常,"true"代表正常,"false"代表有誤.#$result["error"],錯誤訊息.#$result["founded"],是否找到session變數,"true"代表找到,"false"代表沒找到.#$result["content"],取得的變數內容.#$result["function"],當前執行的函數名稱.#必填的參數:#$conf["sessionVarName"],字串,要取得內容的session變數名稱$conf["session::getSessionValue"]["sessionVarName"]=$conf["restCodeSessionName"];#可省略的參數:#$conf["unsetSessionVar"],字串,代表要卸除session變數,預設為"false"不卸除,"true"代表要卸除.#$conf["session::getSessionValue"]["unsetSessionVar"]="true";#參考資料:#call-time-pass-by-reference-easy-fix-available=>http://stackoverflow.com/questions/8971261/php-5-4-call-time-pass-by-reference-easy-fix-available#可變變數=>http://emn178.pixnet.net/blog/post/80119035-php%E6%95%99%E5%AD%B8---%E8%AE%8A%E6%95%B8%28variables%29#卸除參考的原始變數=>http://stackoverflow.com/questions/6654538/php-function-to-unset-variables-passed-by-reference$getSessionValue=session::getSessionValue($conf["session::getSessionValue"]);unset($conf["session::getSessionValue"]);#如果嘗試取得session變數失敗if($getSessionValue["status"]==="false"){#設置執行不正常$result["status"]="false";#設置執行錯誤$result["error"]=$getSessionValue;#回傳結果return $result;}#if end#如果取得到session變數if($getSessionValue["founded"]==="true"){#取得 session 變數值$result["content"]=$getSessionValue["content"];#設置執行正常$result["status"]="true";#設置有取得到code$result["founded"]="true";#回傳結果return $result;}#if end#反之else{#設置執行正常$result["status"]="true";#設置沒有取得到code$result["founded"]="false";#結束程式return $result;}#else end}#if end#反之接收到一定要的變數else{#取得接收到的變數$recVar=$responseMultiInputDataSecurityEnhance["inputDataContent"];#儲存解析好的token資訊$_SESSION[$conf["restCodeSessionName"]]=$recVar;#函式說明:#設定session變數後,立即轉址.#回傳的結果:#$result["status"],執行是否成功,"true"代表成功,"false"代表不成功.#$result["function"],當前執行的函數名稱.#$result["error"],錯誤訊息陣列.#必填的參數:#$conf["headerLocation"],為要轉址到的地方,若爲 $_SERVER["PHP_SELF"],則爲回到目前頁面,全民資安素養網爲 https://isafe.moe.edu.tw/.$conf["header::redirectionNow"]["headerLocation"]=$conf["re_url"];#可省略的參數:#$conf["sessionName"],字串陣列,可以指派session變數的名稱.#$conf["sessionName"]=array("");#$conf["sessionValue"]字串陣列,可以指派session變數的內容.#$conf["sessionValue"]=array("");#參靠資料來源:#http://php.net/manual/en/reserved.variables.server.php$redirectionNow=header::redirectionNow($conf["header::redirectionNow"]);unset($conf["header::redirectionNow"]);}#else}#function parseRestCode end/*#函式說明:#用 RESTful API 來跟 Amazon cloud 互動的要求連結,識別的方式為token.#回傳結果:#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.#$result["error"],錯誤訊息#$result["content"],語法#$result["function"],當前執行的函數名稱#必填參數:#$conf["clientId"],字串,用戶端id,亦即app的clientId.$conf["clientId"]="";#$conf["scope"],字串,要求的權限,例如:clouddrive:read_all clouddrive:write就是代表擁有全部內容的讀寫權限.$conf["scope"]="";#可省略參數:#$conf["redirect_uri"],字串,認證完要轉址到哪哩,預設為當前網址.#$conf["redirect_uri"]="";#參考資料:#amazon cloud drive scrope=>https://developer.amazon.com/public/apis/experience/cloud-drive/content/getting-started#amazon restful api=>https://developer.amazon.com/appsandservices/apis/experience/cloud-drive/content/restful-api-getting-started#備註:#導頁後的網址格式=>https://127.0.0.1/#access_token=Atza%7CIwEBIA-3AFM0FETM_DFFpBQmyztJKN0TYp4AT7CBWy4k8InyFzTA-t1cMPJg05jaRFFjppk4S3VCu3FlBl4MwJj3Uh_A_15abg4SARxfgAv7-vRZ-1UbhYhFmbhjEdziWg4YyoYZvJn5ihZXI2o7mYxy-8r4d4TnwpIspJ3X9tLc6JYzJCU3VRPVCajwV3-WWGwyeQL-DiLgrwIm7iK8Y8W87HoqoXaomPpzsnuef0tQe2Fcquzo3_AVAIB0RYjyH97JtZgL95lQrCagjbr6HNL0mPvjD3GpHxhTjViZjvhMlj8zYAlHc0PYs6zMZ_gElFUOlH448woxtjJtDf4U-l8YZTYq25CBXYeN86l6YuNmi8ZuqozYwHGUDccWR2qbr8jsNdNvErSroeU30sKcPfPEdzbhi7VTOR4WtQS8oYdZHYZTwKWCPPKV1NXRfgQKA9LOUaH85KPWdTsseh-QeDKjk9dkP9j_noNre47mtQWbqojaIhSZfDmADwVQBqBUsQ1DFhaT0r5cF6vjC_LZmHfFZmY067G2JeMijpXfxCvlbwQweA&token_type=bearer&expires_in=3600&scope=clouddrive%3Aread_all*/public static function authenticateToACbyToken(&$conf){#初始化要回傳的結果$result=array();#取得當前執行的函數名稱$result["function"]=__FUNCTION__;#如果沒有參數if(func_num_args()==0){#設置執行失敗$result["status"]="false";#設置執行錯誤訊息$result["error"]="函數".$result["function"]."需要參數";#回傳結果return $result;}#if end#取得參數$result["argu"]=$conf;#如果 $conf 不為陣列if(gettype($conf)!=="array"){#設置執行失敗$result["status"]="false";#設置執行錯誤訊息$result["error"][]="\$conf變數須為陣列形態";#如果傳入的參數為 nullif($conf===null){#設置執行錯誤訊息$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";}#if end#回傳結果return $result;}#if end#檢查參數#函式說明:#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.#$reuslt["error"],執行不正常結束的錯訊息陣列.#$result["function"],當前執行的函式名稱.#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.#$result["argu"],字串陣列,目前輸入的參數名稱陣列.#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.#$result["notNeedVar"],字串陣列,多餘的參數名稱.#必填寫的參數:#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。$conf["variableCheck::checkArguments"]["varInput"]=&$conf;#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("clientId","scope");#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";#可以省略的參數:#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.#$conf["canNotBeEmpty"]=array();#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.#$conf["canBeEmpty"]=array();#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.#$conf["skipableVariableCanNotBeEmpty"]=array();#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("redirect_uri");#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string");#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array($_SERVER["REQUEST_URI"]);#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.#$conf["arrayCountEqualCheck"][]=array();#參考資料來源:#array_keys=>http://php.net/manual/en/function.array-keys.php$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);unset($conf["variableCheck::checkArguments"]);#如果參數檢查失敗if($checkArguments["status"]==="false"){#設置執行不正常$result["status"]="false";#設置執行錯誤$result["error"]=$checkArguments;#回傳結果return $result;}#if end#如果參數檢查不通過if($checkArguments["passed"]==="false"){#設置執行不正常$result["status"]="false";#設置執行錯誤$result["error"]=$checkArguments;#回傳結果return $result;}#if end#https://www.amazon.com/ap/oa?client_id=amzn1.application-oa2-client.b91a4d2fd2f641f2a15ea469&scope=clouddrive%3Aread_all%20clouddrive%3Awrite&response_type=token&redirect_uri=http://localhost#初始化用 amazon RESTful 認證的 url$url="https://www.amazon.com/ap/oa";#加密 $conf["clientId"]$conf["clientId"]=urlencode($conf["clientId"]);#加密 $conf["scope"]$conf["scope"]=urlencode($conf["scope"]);#加密 $response_type$response_type=urlencode("token");#加密 $conf["redirect_uri"]$conf["redirect_uri"]=urlencode($conf["redirect_uri"]);#組合成完整的url$url=$url."?client_id=".$conf["clientId"]."&scope=".$conf["scope"]."&response_type=".$response_type."&redirect_uri=".$conf["redirect_uri"];#涵式說明:#放置超鏈結#回傳的結果:#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.#$result["error"],錯誤訊息#$result["content"],語法#$result["function"],當前執行的函數名稱#必填的參數:#$conf["position"],字串,爲要連結到的位置,若留空,將回自動變成"#",則可以搭配ajax傳值.$conf["link::show_link"]["position"]=$url;#$conf["linkName",字串,爲連結的顯示名稱$conf["link::show_link"]["linkName"]="RESTful Authenticate";#可省略的參數:#$conf["method"],字串,爲點選連結後,新畫面要如何呈現,可省略預設爲"_self",可用的選項有 _top(覆蓋目前的視窗來顯現新內容) _parent _self _blank(跳新視窗)#$conf["method"]="";#$conf["class"],字串,爲要套用的css超連節樣式,可省略.#$conf["class"]="";#$conf["id"],字串,超連結的id.#$conf["id"]="";#$conf["no_outline"],字串,是否要取消連結的框線,"false為不取消,"true"代表要取消,預設為"false".#$conf["no_outline"]="";$show_link=link::show_link($conf["link::show_link"]);unset($conf["link::show_link"]);#如果建立超連結的語法失敗if($show_link["status"]==="false"){#取得當前執行的函式$result["function"]=__FUNCTION__;#設置執行不正常$result["status"]="false";#設置執行錯誤$result["error"]=$show_link;#回傳結果return $result;}#if end#取得語法$result["content"]=$show_link["content"];#設置執行正常$result["status"]="true";#回傳結果return $result;}#function demoAuthenticateToACbyToken end/*#函式說明:#用 RESTful API 來跟 Amazon cloud 互動的要求連結,識別的方式為code.#回傳結果:#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.#$result["error"],錯誤訊息#$result["content"],語法#$result["function"],當前執行的函數名稱#必填參數:#$conf["clientId"],字串,用戶端id,亦即app的clientId.$conf["clientId"]="";#$conf["scope"],字串,要求的權限,例如:clouddrive:read_all clouddrive:write就是代表擁有全部內容的讀寫權限.$conf["scope"]="";#可省略參數:#$conf["redirect_uri"],字串,認證完要轉址到哪哩,預設為當前網址.#$conf["redirect_uri"]="";#參考資料:#amazon cloud drive scrope=>https://developer.amazon.com/public/apis/experience/cloud-drive/content/getting-started#amazon restful api=>https://developer.amazon.com/appsandservices/apis/experience/cloud-drive/content/restful-api-getting-started#Amazon-Cloud-Drive-Python-SDK=>https://github.com/cnbeining/Amazon-Cloud-Drive-Python-SDK/blob/master/acd.py#備註:#導頁後的網址格式=>https://127.0.0.1/#access_token=Atza%7CIwEBIA-3AFM0FETM_DFFpBQmyztJKN0TYp4AT7CBWy4k8InyFzTA-t1cMPJg05jaRFFjppk4S3VCu3FlBl4MwJj3Uh_A_15abg4SARxfgAv7-vRZ-1UbhYhFmbhjEdziWg4YyoYZvJn5ihZXI2o7mYxy-8r4d4TnwpIspJ3X9tLc6JYzJCU3VRPVCajwV3-WWGwyeQL-DiLgrwIm7iK8Y8W87HoqoXaomPpzsnuef0tQe2Fcquzo3_AVAIB0RYjyH97JtZgL95lQrCagjbr6HNL0mPvjD3GpHxhTjViZjvhMlj8zYAlHc0PYs6zMZ_gElFUOlH448woxtjJtDf4U-l8YZTYq25CBXYeN86l6YuNmi8ZuqozYwHGUDccWR2qbr8jsNdNvErSroeU30sKcPfPEdzbhi7VTOR4WtQS8oYdZHYZTwKWCPPKV1NXRfgQKA9LOUaH85KPWdTsseh-QeDKjk9dkP9j_noNre47mtQWbqojaIhSZfDmADwVQBqBUsQ1DFhaT0r5cF6vjC_LZmHfFZmY067G2JeMijpXfxCvlbwQweA&token_type=bearer&expires_in=3600&scope=clouddrive%3Aread_all*/public static function authenticateToACbyCode(&$conf){#初始化要回傳的結果$result=array();#取得當前執行的函數名稱$result["function"]=__FUNCTION__;#如果沒有參數if(func_num_args()==0){#設置執行失敗$result["status"]="false";#設置執行錯誤訊息$result["error"]="函數".$result["function"]."需要參數";#回傳結果return $result;}#if end#取得參數$result["argu"]=$conf;#如果 $conf 不為陣列if(gettype($conf)!=="array"){#設置執行失敗$result["status"]="false";#設置執行錯誤訊息$result["error"][]="\$conf變數須為陣列形態";#如果傳入的參數為 nullif($conf===null){#設置執行錯誤訊息$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";}#if end#回傳結果return $result;}#if end#檢查參數#函式說明:#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.#$reuslt["error"],執行不正常結束的錯訊息陣列.#$result["function"],當前執行的函式名稱.#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.#$result["argu"],字串陣列,目前輸入的參數名稱陣列.#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.#$result["notNeedVar"],字串陣列,多餘的參數名稱.#必填寫的參數:#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。$conf["variableCheck::checkArguments"]["varInput"]=&$conf;#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("clientId","scope");#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";#可以省略的參數:#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.#$conf["canNotBeEmpty"]=array();#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.#$conf["canBeEmpty"]=array();#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.#$conf["skipableVariableCanNotBeEmpty"]=array();#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("redirect_uri");#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string");#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null);#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.#$conf["arrayCountEqualCheck"][]=array();#參考資料來源:#array_keys=>http://php.net/manual/en/function.array-keys.php$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);unset($conf["variableCheck::checkArguments"]);#如果參數檢查失敗if($checkArguments["status"]==="false"){#設置執行不正常$result["status"]="false";#設置執行錯誤$result["error"]=$checkArguments;#回傳結果return $result;}#if end#如果參數檢查不通過if($checkArguments["passed"]==="false"){#設置執行不正常$result["status"]="false";#設置執行錯誤$result["error"]=$checkArguments;#回傳結果return $result;}#if end#https://www.amazon.com/ap/oa?client_id=amzn1.application-oa2-client.b91a4d2fd2f641f2a15ea469&scope=clouddrive%3Aread_all%20clouddrive%3Awrite&response_type=token&redirect_uri=http://localhost#初始化用 amazon RESTful 認證的 url$url="https://www.amazon.com/ap/oa";#加密 $conf["clientId"]$conf["clientId"]=urlencode($conf["clientId"]);#加密 $conf["scope"]$conf["scope"]=urlencode($conf["scope"]);#加密 $response_type$response_type=urlencode("code");#加密 $conf["redirect_uri"]if(!isset($conf["redirect_uri"])){#涵式說明:#取得用戶端的資訊,並依據需要寫入到資料表裡面#回傳的結果:#$result["status"],執行是否正常,"true"代表執行成功,"false"代表執行失敗.#$result["error"],錯誤訊息.#$result["function"],檔前執行的函數名稱.#$result["mode"],當前的模式是"cmd"還是"web".#$result["userBrowserType"],爲使用者的瀏覽器資訊#$result["userIp"],爲使用者的IP#$result["serverIp"],為伺服器的IP#$result["scheme"],通訊協定#$result["serverPort"],伺服器給對外下載網頁的port#$result["requestUri"],爲使用者要求的網址#$result["username"],爲使用者目前的帳戶,若爲""則表示尚未登入成功#$result["phpUser"],運行該php的使用者帳戶.#必填的參數:$conf["csInformation::getConnectionInfo"]["getAccount"]="false";#是否要取得帳號#可省略的參數:#$conf["accountVar"]=$_SESSION["username"];#帳號儲存在哪個變數裏面,預設爲$_SESSION["username"]#$conf["saveToDb"]="true";#是否要除儲存到資料庫,"true"為要儲存",預設為不儲存#$conf["dbAddress"]=$dbAddress;;#爲mysql-Server的位置,若#$conf["saveToDb"]設為"true",則該參數為必填。#$conf["dbAccount"]=$dbAccount;#爲用於連入mysql-Server時要使用的帳號,若#$conf["saveToDb"]設為"true",則該參數為必填。#$conf["dbName"]=$dbName;#要選取的資料庫名稱,若#$conf["saveToDb"]設為"true",則該參數為必填。#$conf["tableName"]="visitorInfo";#爲要插入資料的資料表名稱,若#$conf["saveToDb"]設為"true",則該參數為必填。#$conf["columnName"]=array("username","userWebBrowser","userIp","requestUri","systemDateAndTime");#爲資料表的項目名稱,#例如:$conf["columnName"]=array("columnName1","columnName2","columnName3",...);#寫入的資料依序為,使用者帳戶、瀏覽器資訊、使用者IP、觀看的網址、當時的時間#$conf["saveToDb"]設為"true",則該參數為必填。#$conf["dbPassword"]=$dbPassword;#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼#參考資料:#$_SERVER=>http://php.net/manual/zh/reserved.variables.server.php#取得伺服器名稱與IP=>http://php.net/manual/en/function.gethostname.php$getConnectionInfo=csInformation::getConnectionInfo($conf["csInformation::getConnectionInfo"]);unset($conf["csInformation::getConnectionInfo"]);#如果取得使用者資訊失敗if($getConnectionInfo["status"]==="false"){#設置執行不正常$result["status"]="false";#設置執行錯誤$result["error"]=$getConnectionInfo;#回傳結果return $result;}#if end#預設的callback url$conf["redirect_uri"]=$getConnectionInfo["scheme"]."://".$getConnectionInfo["serverIp"].":".$getConnectionInfo["serverPort"].$getConnectionInfo["requestUri"];}#if end#組合成完整的url$url=$url."?client_id=".$conf["clientId"]."&scope=".$conf["scope"]."&response_type=".$response_type."&redirect_uri=".$conf["redirect_uri"];#涵式說明:#放置超鏈結#回傳的結果:#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.#$result["error"],錯誤訊息#$result["content"],語法#$result["function"],當前執行的函數名稱#必填的參數:#$conf["position"],字串,爲要連結到的位置,若留空,將回自動變成"#",則可以搭配ajax傳值.$conf["link::show_link"]["position"]=$url;#$conf["linkName",字串,爲連結的顯示名稱$conf["link::show_link"]["linkName"]="RESTful Authenticate";#可省略的參數:#$conf["method"],字串,爲點選連結後,新畫面要如何呈現,可省略預設爲"_self",可用的選項有 _top(覆蓋目前的視窗來顯現新內容) _parent _self _blank(跳新視窗)#$conf["method"]="";#$conf["class"],字串,爲要套用的css超連節樣式,可省略.#$conf["class"]="";#$conf["id"],字串,超連結的id.#$conf["id"]="";#$conf["no_outline"],字串,是否要取消連結的框線,"false為不取消,"true"代表要取消,預設為"false".#$conf["no_outline"]="";$show_link=link::show_link($conf["link::show_link"]);unset($conf["link::show_link"]);#如果建立超連結的語法失敗if($show_link["status"]==="false"){#取得當前執行的函式$result["function"]=__FUNCTION__;#設置執行不正常$result["status"]="false";#設置執行錯誤$result["error"]=$show_link;#回傳結果return $result;}#if end#取得語法$result["content"]=$show_link["content"];#設置執行正常$result["status"]="true";#回傳結果return $result;}#function demoAuthenticateToACbyCode end/*#函式說明:#讀取Amazon cloud drive的檔案清單#回傳結果:#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.#$result["error"],錯誤訊息陣列.#$result["function"],當前執行的函式名稱.#$result["content"],取得的回應內容.#必填參數:#$conf["fileArgu"],字串,變數__FILE__的內容.$conf["fileArgu"]=__FILE__;#$conf["authToken"],字串,使用者登入後取得的token.$conf["authToken"]="";#可省略參數:#無.#參考資料:#無.#備註:#建構中*/public static function readAD(&$conf){#初始化要回傳的結果$result=array();#取得當前執行的函數名稱$result["function"]=__FUNCTION__;#如果沒有參數if(func_num_args()==0){#設置執行失敗$result["status"]="false";#設置執行錯誤訊息$result["error"]="函數".$result["function"]."需要參數";#回傳結果return $result;}#if end#涵式說明:#判斷當前環境為web還是cmd#回傳結果:#$result,"web"或"cmd"if(csInformation::getEnv()==="web"){#設置執行失敗$result["status"]="false";#設置執行錯誤訊息$result["error"][]="函數 ".$result["function"]." 僅能在命令列環境下運行!";#回傳結果return $result;}#if end#取得參數$result["argu"]=$conf;#如果 $conf 不為陣列if(gettype($conf)!=="array"){#設置執行失敗$result["status"]="false";#設置執行錯誤訊息$result["error"][]="\$conf變數須為陣列形態";#如果傳入的參數為 nullif($conf===null){#設置執行錯誤訊息$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";}#if end#回傳結果return $result;}#if end#檢查參數#函式說明:#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.#$reuslt["error"],執行不正常結束的錯訊息陣列.#$result["function"],當前執行的函式名稱.#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息#必填寫的參數:#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。$conf["variableCheck::checkArguments"]["varInput"]=&$conf;#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("authToken","fileArgu");#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double");$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";#可以省略的參數:#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。#$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");#$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("header","allowAnySSLcertificate","postVar");#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");#$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("array","string","array");#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,"null"代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null,null,array());#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"][]=array();$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);unset($conf["variableCheck::checkArguments"]);#如果檢查參數失敗if($checkResult["status"]=="false"){#設置執行失敗$result["status"]="false";#設置執行錯誤$result["error"]=$checkResult;#回傳結果return $result;}#if end#如果檢查參數不通過if($checkResult["passed"]=="false"){#設置執行失敗$result["status"]="false";#設置執行錯誤$result["error"]=$checkResult;#回傳結果return $result;}#if end#函式說明:#運行curl cmd#回傳結果:#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.#$result["error"],錯誤訊息陣列.#$result["function"],當前執行的函式名稱.#$result["content"],取得的回應內容.#$result["cmd"],執行的command#必填參數:#$conf["url"],字串,目標url.$url="https://drive.amazonaws.com/drive/v1/account/endpoint";#$url="https://cdws.us-east-1.amazonaws.com/drive/v1/changes";#$url="https://drive.amazonaws.com/drive/v1/";$conf["catchWebContent::curlCmd"]["url"]=$url;#$conf["fileArgu"],字串,變數__FILE__的內容.$conf["catchWebContent::curlCmd"]["fileArgu"]=__FILE__;#可省略參數:#$conf["header"],字串陣列,要傳送的header.$conf["header"][]="Authorization: Bearer ".$conf["authToken"];#$conf["allowAnySSLcertificate"],字串,是否允許不可信任的SSL憑證,預設為"true".#$conf["allowAnySSLcertificate"]="";#$conf["postVar"],字串陣列,每個要傳送的post變數名稱(陣列的key值)與數值.#$conf["postVar"]=array();#備註:#僅能在命令列下執行.$curlCmd=catchWebContent::curlCmd($conf["catchWebContent::curlCmd"]);unset($conf["catchWebContent::curlCmd"]);#如果運行curl失敗if($curlCmd["status"]==="false"){#設置執行失敗$result["status"]="false";#設置執行錯誤訊息$result["error"]=$curlCmd;#回傳結果return $result;}#if endvar_dump($curlCmd);}#function readAD end/*#函式說明:#用parseRestCode函數取得的code來取得token#回傳結果:#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.#$result["error"],錯誤訊息陣列.#$result["function"],當前執行的函式名稱.#$result["content"],取得的回應內容.#$result["cmd"],執行的command#必填參數:#$conf["fileArgu"],字串,變數__FILE__的內容.$conf["fileArgu"]=__FILE__;#$conf["code"],字串,從parseRestCode函數取得的code.$conf["code"]="";#$conf["clientId"],字串,用戶端id,亦即app的clientId.$conf["clientId"]="";#$conf["clientSecret"],字串,用戶端的 client secret.$conf["clientSecret"]="";#可省略參數:#無#參考資料:#php的amazon cloud drive api應用=>https://github.com/alex-phillips/clouddrive-php#備註:#僅能在命令列下執行.#似乎因為沒有被 Amazon 列到 white list 裡面所以目前無法取得token*/public static function getACtokenByCode(&$conf){#初始化要回傳的結果$result=array();#取得當前執行的函數名稱$result["function"]=__FUNCTION__;#如果沒有參數if(func_num_args()==0){#設置執行失敗$result["status"]="false";#設置執行錯誤訊息$result["error"]="函數".$result["function"]."需要參數";#回傳結果return $result;}#if end#涵式說明:#判斷當前環境為web還是cmd#回傳結果:#$result,"web"或"cmd"if(csInformation::getEnv()==="web"){#設置執行失敗$result["status"]="false";#設置執行錯誤訊息$result["error"][]="函數 ".$result["function"]." 僅能在命令列環境下運行!";#回傳結果return $result;}#if end#取得參數$result["argu"]=$conf;#如果 $conf 不為陣列if(gettype($conf)!=="array"){#設置執行失敗$result["status"]="false";#設置執行錯誤訊息$result["error"][]="\$conf變數須為陣列形態";#如果傳入的參數為 nullif($conf===null){#設置執行錯誤訊息$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";}#if end#回傳結果return $result;}#if end#檢查參數#函式說明:#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.#$reuslt["error"],執行不正常結束的錯訊息陣列.#$result["function"],當前執行的函式名稱.#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.#$result["argu"],字串陣列,目前輸入的參數名稱陣列.#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.#$result["notNeedVar"],字串陣列,多餘的參數名稱.#必填寫的參數:#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。$conf["variableCheck::checkArguments"]["varInput"]=&$conf;#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("clientId","code","fileArgu","clientSecret");#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string","string","string");#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";#可以省略的參數:#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.#$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.#$conf["canNotBeEmpty"]=array();#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.#$conf["canBeEmpty"]=array();#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.#$conf["skipableVariableCanNotBeEmpty"]=array();#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");#$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("redirect_uri");#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");#$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string");#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null);#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.#$conf["arrayCountEqualCheck"][]=array();#參考資料來源:#array_keys=>http://php.net/manual/en/function.array-keys.php$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);unset($conf["variableCheck::checkArguments"]);#如果參數檢查失敗if($checkArguments["status"]==="false"){#設置執行不正常$result["status"]="false";#設置執行錯誤$result["error"]=$checkArguments;#回傳結果return $result;}#if end#如果參數檢查不通過if($checkArguments["passed"]==="false"){#設置執行不正常$result["status"]="false";#設置執行錯誤$result["error"]=$checkArguments;#回傳結果return $result;}#if end#函式說明:#運行curl cmd#回傳結果:#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.#$result["error"],錯誤訊息陣列.#$result["function"],當前執行的函式名稱.#$result["content"],取得的回應內容.#$result["cmd"],執行的command#必填參數:#$conf["url"],字串,目標url.$conf["catchWebContent::curlCmd"]["url"]="https://api.amazon.com/auth/o2/token";#$conf["catchWebContent::curlCmd"]["url"]="https://127.0.0.1/~qbpwcf/samplePage/phplib/qbpwcf/testCase/amazonT/showRequest.php";#$conf["fileArgu"],字串,變數__FILE__的內容.$conf["catchWebContent::curlCmd"]["fileArgu"]=$conf["fileArgu"];#可省略參數:#$conf["header"],字串陣列,要傳送的header.$conf["catchWebContent::curlCmd"]["header"][]="HTTP/1.1";$conf["catchWebContent::curlCmd"]["header"][]="Content-Type: application/x-www-form-urlencoded";$conf["catchWebContent::curlCmd"]["header"][]="Cache-Control: no-cache";#$conf["allowAnySSLcertificate"],字串,是否允許不可信任的SSL憑證,預設為"true".#$conf["allowAnySSLcertificate"]="";#$conf["postVar"],字串陣列,每個要傳送的post變數名稱(陣列的key值)與數值.$conf["catchWebContent::curlCmd"]["postVar"]["grant_type"]="authorization_code";$conf["catchWebContent::curlCmd"]["postVar"]["code"]=$conf["code"];$conf["catchWebContent::curlCmd"]["postVar"]["client_id"]=$conf["clientId"];$conf["catchWebContent::curlCmd"]["postVar"]["client_secret"]=$conf["clientSecret"];$conf["catchWebContent::curlCmd"]["postVar"]["redirect_uri"]="https://localhost";#$conf["urlEncode"],字串,post的內容是否要url_encode,"true"代表要,預設為"false"代表不要.$conf["catchWebContent::curlCmd"]["urlEncode"]="true";#備註:#僅能在命令列下執行.$curlCmd=catchWebContent::curlCmd($conf["catchWebContent::curlCmd"]);unset($conf["catchWebContent::curlCmd"]);#如果執行curl cmd失敗if($curlCmd["status"]==="false"){#設置執行失敗$result["status"]="false";#設置執行錯誤訊息$result["error"]=$curlCmd;#回傳結果return $result;}#if end#取得回應$result["content"]=$curlCmd["content"];#取得執行的culr命令$result["cmd"]=$curlCmd["cmd"];#設置正常執行$result["status"]="true";#回傳結果return $result;}#functino getACtokenByCode end}#class amazon end?>