本篇文章給大家分享的內容是關于淺談PHP(基于TP3.2框架)開發APP接口(個人見解),有著一定的參考價值,有需要的朋友可以參考一下
PHP很強大,可以搞各種東西,web開發,小程序,商城,自然也包括APP啦。
由于博主也是準備完成一個APP項目,就把心得寫一下,以后也能回味一下,哈哈。
因為我們是寫接口嘛,所以安全第一,不能搞出人命是吧。所以就得和前端協商一種接口加密的方法,每個接口都要噢(這個可以叫token加密,也可以叫sign加密,看個人喜歡怎么叫吧)
下面我說下我是怎么加密的吧,我建議接口都是用post傳遞,所以以下參數都是基于post傳遞的
1.首先對傳遞過來的參數進行key字典排序,除去token值(PHP提供了一個ksort函數,默認是標準ASICC碼排序,這里有個坑,就是IOS的排序有時會和安卓的不一樣,只是個別)
2.拼接排序后的值(PHP提供了一個http_build_query函數)
3.在排序后的字符串后面拼接一個自定義的密鑰(這要跟前端好,統一),然后md5加密
4.轉換成大寫作為token,當做參數。
還是貼一下代碼吧
function makeToken($data){ //$data就是$_POST傳過來的參數 unset($data['token']); unset($data['auth_key']); //這個下面會說到 ksort($data); $string = http_build_query($data); if(empty($data)){ $string = 'key=CT01aVVsCkSxYdxi55ml'; } else { $string = $string .'&key=CT01aVVsCkSxYdxi55ml'; } $string = md5($string); $result = strtoupper($string); return $result;}
<?phpnamespace Api/Controller;use Think/Controller;/** * 公共控制器 */html' target='_blank'>class CommonController extends Controller { public function _initialize(){ // // //驗證token $token = I('token'); $sal = makeToken($_POST); if($sal!=$token){ $result = ajaxR(404,'認證失敗'); $this->ajaxReturn($result); } }}
前端生成的token作為參數一并傳入,然后再跟你生成的token進行比對,如果錯誤的話,那token就驗證失敗,接口就不能訪問了。
有些接口是例外,它可能是不需要參數直接請求數據的,所以只需要對自定義的密鑰進行md5加密就可以了,就是將key=CT01aVVsCkSxYdxi55ml這一串加密,當然了這一串你喜歡怎么弄都可以,主要是和前端協商好。
在參數排序前,就是在http_build_query之前,需要先把前端傳過來的token和auth_key去掉(這個先不說),之后再參與排序,這個也要和前端協商好。
接下來說下auth_key吧,大家都知道session是用來記住web頁面的用戶登錄狀態的,而APP也是需要登錄用戶狀態的。這里我使用的一個自己加密的一串用來記住用戶登錄狀態,叫auth_key的參數。
auth_key的生成規則你可以自己定義,在APP端注冊登錄之后,把這個串存入相應的用戶里面,并且將其返回給前端,前端之后的每個訪問都帶上這個auth_key這個參數,而你就可以通過這個參數來查詢這個用戶的相關信息。
當然,你也可以對這個auth_key進行一個時間的限制,例如給個7天的期限,在項目的每個方法都調用一下,看看是否過期了,過期了就給前端返回一個登陸狀態失效,退出登錄。
其實開發APP的接口不難,主要和前端協商好,就很容易辦。一般我們返回的都是json格式,如下
{ "code": 200, "message": "獲取信息成功", "data": { "lng": "113.743393", "lat": "23.015902", }}
定義好返回的狀態碼和信息還有數據,這是必不可少的。
PHP很強大,可以搞各種東西,web開發,小程序,商城,自然也包括APP啦。
由于博主也是準備完成一個APP項目,就把心得寫一下,以后也能回味一下,哈哈。
因為我們是寫接口嘛,所以安全第一,不能搞出人命是吧。所以就得和前端協商一種接口加密的方法,每個接口都要噢(這個可以叫token加密,也可以叫sign加密,看個人喜歡怎么叫吧)
下面我說下我是怎么加密的吧,我建議接口都是用post傳遞,所以以下參數都是基于post傳遞的
1.首先對傳遞過來的參數進行key字典排序,除去token值(PHP提供了一個ksort函數,默認是標準ASICC碼排序,這里有個坑,就是IOS的排序有時會和安卓的不一樣,只是個別)
2.拼接排序后的值(PHP提供了一個http_build_query函數)
3.在排序后的字符串后面拼接一個自定義的密鑰(這要跟前端好,統一),然后md5加密
4.轉換成大寫作為token,當做參數。
還是貼一下代碼吧
function makeToken($data){ //$data就是$_POST傳過來的參數 unset($data['token']); unset($data['auth_key']); //這個下面會說到 ksort($data); $string = http_build_query($data); if(empty($data)){ $string = 'key=CT01aVVsCkSxYdxi55ml'; } else { $string = $string .'&key=CT01aVVsCkSxYdxi55ml'; } $string = md5($string); $result = strtoupper($string); return $result;}
<?phpnamespace Api/Controller;use Think/Controller;/** * 公共控制器 */class CommonController extends Controller { public function _initialize(){ // // //驗證token $token = I('token'); $sal = makeToken($_POST); if($sal!=$token){ $result = ajaxR(404,'認證失敗'); $this->ajaxReturn($result); } }}
前端生成的token作為參數一并傳入,然后再跟你生成的token進行比對,如果錯誤的話,那token就驗證失敗,接口就不能訪問了。
有些接口是例外,它可能是不需要參數直接請求數據的,所以只需要對自定義的密鑰進行md5加密就可以了,就是將key=CT01aVVsCkSxYdxi55ml這一串加密,當然了這一串你喜歡怎么弄都可以,主要是和前端協商好。
在參數排序前,就是在http_build_query之前,需要先把前端傳過來的token和auth_key去掉(這個先不說),之后再參與排序,這個也要和前端協商好。
接下來說下auth_key吧,大家都知道session是用來記住web頁面的用戶登錄狀態的,而APP也是需要登錄用戶狀態的。這里我使用的一個自己加密的一串用來記住用戶登錄狀態,叫auth_key的參數。
auth_key的生成規則你可以自己定義,在APP端注冊登錄之后,把這個串存入相應的用戶里面,并且將其返回給前端,前端之后的每個訪問都帶上這個auth_key這個參數,而你就可以通過這個參數來查詢這個用戶的相關信息。
當然,你也可以對這個auth_key進行一個時間的限制,例如給個7天的期限,在項目的每個方法都調用一下,看看是否過期了,過期了就給前端返回一個登陸狀態失效,退出登錄。
其實開發APP的接口不難,主要和前端協商好,就很容易辦。一般我們返回的都是json格式,如下
{ "code": 200, "message": "獲取信息成功", "data": { "lng": "113.743393", "lat": "23.015902", }}
定義好返回的狀態碼和信息還有數據,這是必不可少的。
相關推薦:
淺談PHP的跨域問題
淺談PHP面向對象編程
淺談php字符串反轉實例詳解
以上就是淺談PHP(基于TP3.2框架)開發APP接口(個人見解)的詳細內容,更多請關注 其它相關文章!
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。
新聞熱點
疑難解答