使用PHP寫(xiě)api接口是經(jīng)常做的,PHP寫(xiě)好接口后,前臺(tái)就可以通過(guò)鏈接獲取接口提供的數(shù)據(jù),而返回的數(shù)據(jù)一般分為兩種情況,xml和json,在這個(gè)過(guò)程中,服務(wù)器并不知道,請(qǐng)求的來(lái)源是什么,有可能是別人非法調(diào)用我們的接口,獲取數(shù)據(jù),因此就要使用安全驗(yàn)證
公司主營(yíng)業(yè)務(wù):成都網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計(jì)、移動(dòng)網(wǎng)站開(kāi)發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競(jìng)爭(zhēng)能力。創(chuàng)新互聯(lián)是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開(kāi)放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來(lái)的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來(lái)驚喜。創(chuàng)新互聯(lián)推出仁壽免費(fèi)做網(wǎng)站回饋大家。
原理
從圖中可以看得很清楚,前臺(tái)想要調(diào)用接口,需要使用幾個(gè)參數(shù)生成簽名。
時(shí)間戳:當(dāng)前時(shí)間
隨機(jī)數(shù):隨機(jī)生成的隨機(jī)數(shù)
口令:前后臺(tái)開(kāi)發(fā)時(shí),一個(gè)雙方都知道的標(biāo)識(shí),相當(dāng)于暗號(hào)
算法規(guī)則:商定好的運(yùn)算規(guī)則,上面三個(gè)參數(shù)可以利用算法規(guī)則生成一個(gè)簽名。前臺(tái)生成一個(gè)簽名,當(dāng)需要訪問(wèn)接口的時(shí)候,把時(shí)間戳,隨機(jī)數(shù),簽名通過(guò)URL傳遞到后臺(tái)。后臺(tái)拿到時(shí)間戳,隨機(jī)數(shù)后,通過(guò)一樣的算法規(guī)則計(jì)算出簽名,然后和傳遞過(guò)來(lái)的簽名進(jìn)行對(duì)比,一樣的話,返回?cái)?shù)據(jù)。
算法規(guī)則
在前后臺(tái)交互中,算法規(guī)則是非常重要的,前后臺(tái)都要通過(guò)算法規(guī)則計(jì)算出簽名,至于規(guī)則怎么制定,看你怎么高興怎么來(lái)。
我這個(gè)算法規(guī)則是
時(shí)間戳,隨機(jī)數(shù),口令按照首字母大小寫(xiě)順序排序
然后拼接成字符串
進(jìn)行sha1加密
再進(jìn)行MD5加密
轉(zhuǎn)換成大寫(xiě)。
方法/步驟
將解壓的框架包放到的你的php環(huán)境的w w w/api目錄下:這里建立api目錄作為測(cè)試項(xiàng)目目錄。并運(yùn)行l(wèi)ocalhost/api/index.php,就可以看到環(huán)境界面了
在對(duì)應(yīng)的目錄下修改控制器中的方法:默認(rèn)在application/controller/welcome.php文件中的
修改welcome.php中的index方法,看到的歡迎頁(yè)面從這里加載的
開(kāi)始寫(xiě)我們的api接口吧,寫(xiě)api接口前要鏈接我們的數(shù)據(jù)庫(kù),配置數(shù)據(jù)庫(kù)信息在application/config/database.php中
連接我們配置好的數(shù)據(jù)庫(kù),回到我們的welcome.php中
去github官網(wǎng)中下載codeIgniter支持的api接口包
解壓文件包,并將對(duì)應(yīng)的文件放到指定的目錄
修改我們控制器的方法名,把index該為index_get,在該方法中實(shí)現(xiàn)我們的業(yè)務(wù)需求。這里只是簡(jiǎn)單帶領(lǐng)大家。沒(méi)有做過(guò)多的操作。
在瀏覽器中運(yùn)行我們的接口,根據(jù)不同的參數(shù)返回不同的數(shù)據(jù)。
獲取的是json數(shù)據(jù)
localhost/api/index/php?username=張三format=json
獲取的是xml數(shù)據(jù)
localhost/api/index/php?username=張三format=xml
注意事項(xiàng)
PHP環(huán)境要PHP 5.2 以上。
框架包要 CodeIgniter 2.1.0 以上哦。
不是的,通常php查詢數(shù)據(jù)庫(kù),取得結(jié)果集后,把每行的每個(gè)字段值作為一個(gè)節(jié)點(diǎn)輸出xml,或者把所有行數(shù)據(jù)存入一個(gè)數(shù)組,之后json_encode輸出json供app調(diào)用。
以我目前的能力沒(méi)法理解這個(gè)問(wèn)題。但我舉個(gè)例子,可能并不是你想要的答案,但沒(méi)準(zhǔn)可以提醒一下。我們用GOOGLE MAP API (開(kāi)源)的時(shí)候,會(huì)引用一個(gè)類(lèi)似接口的方法,方法有很多參數(shù)可以設(shè)置。比如這是個(gè)引用地圖的方法,它的里面寫(xiě)了很多完整的方法,我這里就不放出來(lái)了,但是我舉得例子是參數(shù)傳遞在最上面的initialize () (這里我們暫時(shí)當(dāng)作接口)方法上,我們可以傳遞interface_zoom即縮放大小,interface_lati,interface_lngi就是經(jīng)緯度等等參數(shù),這些參數(shù)可以由我們自己處理,無(wú)論是從database還是什么其他方法讀取還是怎么運(yùn)算,然后call這個(gè)initialize方法帶指定參數(shù)就可以了,具體里面如何操作的地圖,如何生成的地圖,我們就不管了。接口就是我們看到日常生活中的插座,它規(guī)定好了規(guī)格,是幾項(xiàng)的插頭,我們就做成幾項(xiàng)的插頭,具體里面什么線路我們不管。方法中規(guī)定了什么類(lèi)型的參數(shù),我們就傳什么類(lèi)型的參數(shù),具體里面有什么算法我們不管。個(gè)人最自白的解釋?zhuān)c官方有出入。
var map;
var infoWindow;
function initialize(interface_zoom,interface_lati,interface_lngi) {
var mapDiv = document.getElementById('map-canvas');
map = new google.maps.Map(mapDiv, {
center: new google.maps.LatLng(interface_lati, interface_lngi),
zoom: interface_zoom,
mapTypeId: google.maps.MapTypeId.ROADMAP
});
......
......
}
1.修改PHP配置文件,保證能夠連接到數(shù)據(jù)庫(kù)。
2.修改數(shù)據(jù)庫(kù)配置,授予192.168.1.253以訪問(wèn)權(quán)限。這里只需授予這個(gè)IP就行了。如果不授予,PHP將不能訪問(wèn)數(shù)據(jù)庫(kù);如果授予范圍過(guò)廣,將會(huì)給你的系統(tǒng)帶來(lái)潛在的安全風(fēng)險(xiǎn)。