微信小程序與后臺(tái)PHP交互的方法實(shí)例分析
本文實(shí)例講述了微信小程序與后臺(tái)PHP交互的方法。分享給大家供大家參考,具體如下:
接下來(lái)將講后臺(tái)如何與前臺(tái)進(jìn)行數(shù)據(jù)及圖片之間的交互,相信這一點(diǎn)是很多人所關(guān)注的,因?yàn)楫?dāng)時(shí)我實(shí)在團(tuán)隊(duì)中負(fù)責(zé)后臺(tái)開(kāi)發(fā),因此對(duì)前端不是特別了解,這里我會(huì)貼出前端開(kāi)發(fā)時(shí)的部分代碼截圖,微信小程序的官方api介紹地址是:
https://mp.weixin.qq.com/debug/wxadoc/dev/api/api-network.html
微信與后臺(tái)服務(wù)器之間的數(shù)據(jù)通信是調(diào)用wx.request(OBJECT)
實(shí)現(xiàn)的,官方api接口里有對(duì)此說(shuō)明,
例如前臺(tái)向后臺(tái)發(fā)送數(shù)據(jù),需要鏈接服務(wù)器php作用路徑下的具體php文件,并以key-value形式封裝json格式數(shù)據(jù),請(qǐng)看以下代碼:
url是服務(wù)器的域名及isbn.php在服務(wù)器的位置,這個(gè)位置是相對(duì)位置,在我上一篇購(gòu)買(mǎi)的鏡像里默認(rèn)php文件路徑為:
/yjdata/www/ ,這就意味著直接放在這個(gè)文件夾下的php只需要在域名后直接/+*.php即可,如果為了方便管理在這個(gè)目錄下建了一個(gè)文件夾則在域名后/文件夾名字/*.php即可。
此外前端向后臺(tái)傳輸?shù)臄?shù)據(jù)是以json格式封裝的,如圖中的data里寫(xiě)的數(shù)據(jù),前面是key,后面是具體的value值,后臺(tái)取得時(shí)候是要根據(jù)前面的key值取值,此外,method決定了后臺(tái)與前臺(tái)通過(guò)什么方式交流,這里是用的GET方法,后臺(tái)與前臺(tái)方法必須配對(duì)使用,不能一個(gè)是GET,另一端是POST,在做微信支付功能時(shí),有些安全性隱私性較高的數(shù)據(jù)必須采用POST進(jìn)行交互。
這里的前端向后臺(tái)傳輸?shù)膔esult是圖書(shū)的ISBN碼,因?yàn)槲覀冏龅男〕绦蛴袀€(gè)功能是調(diào)用相機(jī)掃描書(shū)本后面的條形碼從而獲得ISBN碼,前端將ISBN碼發(fā)送到后臺(tái),后臺(tái)程序?qū)⒄{(diào)用第三方豆瓣圖書(shū)接口來(lái)依據(jù)ISBN碼查詢圖書(shū)信息,并將圖書(shū)信息返回給前臺(tái),這里我貼出服務(wù)器端的代碼供大家參考:
<?php $result=$_GET["result"];/*獲取前端微信小程序掃書(shū)的isbn結(jié)果*/ /*與第三方接口通信獲取書(shū)本信息*/ $book_info=file_get_contents("https://api.douban.com/v2/book/isbn/:".$result); $jsondecode = json_decode($book_info,true);/*將獲取到的書(shū)本信息JSON解碼*/ $title=$jsondecode["title"];/*將解碼后書(shū)名賦值給title變量*/ $author=$jsondecode["author"];/*將解碼后作者賦值給author變量*/ $publisher=$jsondecode["publisher"];/*將解碼后出版社名賦值給publisher變量*/ echo "title=".$title; /*向前端返回書(shū)名*/ echo "author=".$author; /*向前端返回作者名*/ echo "publisher=".$publisher; /*向前端返回出版社名*/ ?>
具體的注釋都寫(xiě)得很詳細(xì),向前臺(tái)返回?cái)?shù)據(jù)則直接用echo即可,一般開(kāi)發(fā)都要與數(shù)據(jù)庫(kù)打交道,因此,后臺(tái)程序就需要依據(jù)前臺(tái)傳來(lái)的數(shù)據(jù)對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作,這一部分其實(shí)也就是接受前臺(tái)的數(shù)據(jù),執(zhí)行對(duì)應(yīng)的數(shù)據(jù)庫(kù)操作,這一部分只要是講到php數(shù)據(jù)庫(kù)操作的都會(huì)有,這里我不再進(jìn)行過(guò)多闡述。
此外,對(duì)于一個(gè)微信小程序來(lái)說(shuō),圖片是必不可少的,而圖片資源都是存儲(chǔ)在服務(wù)器中的,因此如何對(duì)圖片進(jìn)行存儲(chǔ)是一個(gè)關(guān)鍵。接下來(lái)將結(jié)合一個(gè)書(shū)本信息的具體插入數(shù)據(jù)庫(kù)的過(guò)程來(lái)進(jìn)行講解。。。(其實(shí)注釋特別詳細(xì))
<?php header('content-type:application/json;charset=utf8'); $mysql_server_name="localhost";/*數(shù)據(jù)庫(kù)服務(wù)器名稱*/ $mysql_username="root";/*數(shù)據(jù)庫(kù)用戶名*/ $mysql_password="123456";/*數(shù)據(jù)庫(kù)用戶密碼*/ $mysql_databasename="zhishu";/*進(jìn)入數(shù)據(jù)庫(kù)后數(shù)據(jù)庫(kù)名*/ $conn=mysqli_connect($mysql_server_name,$mysql_username,$mysql_password,$mysql_databasename);/*數(shù)據(jù)庫(kù)連接語(yǔ)句*/ $bookname=$_POST["bookname"];/*從小程序前端獲取書(shū)本名字*/ $authorname=$_POST["authorname"];/*從小程序前端獲取書(shū)本作者名字*/ $bookintroduce=$_POST["introduce"];/*從小程序前端獲取書(shū)本介紹信息*/ $bookholder_name=$_POST["openid"];/*從小程序前端獲取書(shū)本持有人昵稱*/ $bookclass=$_POST['classification'];;/*從小程序前端獲取書(shū)本分類*/ date_default_timezone_set('PRC'); /*設(shè)置默認(rèn)時(shí)區(qū)為中國(guó)*/ $time=(string)date("Y-m-d-h-i",time());/*獲取時(shí)間*/function Unioname($a) /*將時(shí)間格式更改的函數(shù)*/{ $a=explode('-',$a); $a=implode('',$a); return $a; } $time=Unioname($time); $allowedExts = array("gif", "jpeg", "jpg", "png"); /*這里的內(nèi)容同用戶注冊(cè)時(shí)代碼含義一樣,只不過(guò)那時(shí)是為了存用戶頭像并修改用戶頭像名字,這里是存書(shū)本圖像并修改書(shū)本圖像的名字*/ $temp = explode(".", $_FILES["file"]["name"]);//將圖片名字以.分割成兩個(gè)字符串 $extension = end($temp); // 獲取圖片后綴名 if ((($_FILES["file"]["type"] == "image/gif") || ($_FILES["file"]["type"] == "image/jpeg") || ($_FILES["file"]["type"] == "image/jpg") || ($_FILES["file"]["type"] == "image/pjpeg") || ($_FILES["file"]["type"] == "image/x-png") || ($_FILES["file"]["type"] == "image/png")) && ($_FILES["file"]["size"] < 1024000) // 小于 1MB && in_array($extension, $allowedExts)) { if ($_FILES["file"]["error"] > 0) { echo "錯(cuò)誤:: " . $_FILES["file"]["error"] . "<br>"; } else { // 判斷當(dāng)期目錄下的 upload 目錄是否存在該文件 // 如果沒(méi)有 upload 目錄,你需要?jiǎng)?chuàng)建它,upload 目錄權(quán)限為 777 if (file_exists("bookimage/" . $_FILES["file"]["name"])) { echo $_FILES["file"]["name"] . " 文件已經(jīng)存在。 "; } else { // 如果 upload 目錄不存在該文件則將文件上傳到 upload 目錄下 move_uploaded_file($_FILES["file"]["tmp_name"], "bookimage/".$_FILES["file"]["name"]); $oldname = "bookimage/" . $_FILES["file"]["name"]; $newname = "bookimage/" . $time .$bookholder_name.".".$extension; rename($oldname, $newname); $sql_num="select * from book"; $reasult=mysqli_query($conn,$sql_num); $reasult_num=mysqli_num_rows($reasult); /*將獲取到書(shū)本信息插入數(shù)據(jù)庫(kù)語(yǔ)句*/ $sql_insert="insert into book (book_id,bookname,authorname,book_intro,bookclass,bookholder_openid,bookpicture_path,is_CunZai,ChengJiao_num) VALUES ($reasult_num+1,'$bookname','$authorname','$bookintroduce','$bookclass','$bookholder_openid','$newname','1',0)"; if( mysqli_query($conn,$sql_insert)) { echo "插入書(shū)籍成功!"; } else { echo "插入失敗"; } } } } mysqli_close($conn); /*關(guān)閉數(shù)據(jù)庫(kù)連接*/ ?>
首先使用$[FILE]
全局?jǐn)?shù)組接受文件,其擁有的幾個(gè)屬性如下:
$_FILES["file"]["name"] - 被上傳文件的名稱
$_FILES["file"]["type"] - 被上傳文件的類型
$_FILES["file"]["size"] - 被上傳文件的大小,以字節(jié)計(jì)
$_FILES["file"]["tmp_name"] - 存儲(chǔ)在服務(wù)器的文件的臨時(shí)副本的名稱
$_FILES["file"]["error"] - 由文件上傳導(dǎo)致的錯(cuò)誤代碼
這是一種非常簡(jiǎn)單文件發(fā)送及接收方式,接收到以后對(duì)文件名字進(jìn)行以“.”進(jìn)行分割,這是為了獲取后綴,接下來(lái)要對(duì)后綴進(jìn)行判斷,看是否是常用的圖片后綴格式,如果是并且圖片大小小于1MB,則進(jìn)行接下來(lái)的操作,此時(shí)圖片位于緩存區(qū),因此必須將圖片改名后存于圖書(shū)圖片的文件夾下,這一部分在代碼里有實(shí)現(xiàn),此外,還需要將圖片的路徑與該圖書(shū)其他信息一起存到數(shù)據(jù)庫(kù)里。到這里基本小程序與后臺(tái)大部分能用到的交互我都在這里講了,基本可以完成一個(gè)簡(jiǎn)單的小程序。
希望本文所述對(duì)大家微信小程序開(kāi)發(fā)有所幫助。
相關(guān)文章
JavaScript實(shí)現(xiàn)打字效果的方法
這篇文章主要介紹了JavaScript實(shí)現(xiàn)打字效果的方法,可實(shí)現(xiàn)文字陸續(xù)出現(xiàn)的打字效果,涉及javascript時(shí)間函數(shù)及頁(yè)面元素獲取的相關(guān)技巧,需要的朋友可以參考下2015-07-07JavaScript XML實(shí)現(xiàn)兩級(jí)級(jí)聯(lián)下拉列表
用xml作為存儲(chǔ)容器,不用數(shù)據(jù)庫(kù),速度和效率高些。2008-11-11JavaScript使用簡(jiǎn)單正則表達(dá)式的數(shù)據(jù)驗(yàn)證功能示例
這篇文章主要介紹了JavaScript使用簡(jiǎn)單正則表達(dá)式的數(shù)據(jù)驗(yàn)證功能,結(jié)合實(shí)例形式分析了JS針對(duì)表單輸入內(nèi)容的簡(jiǎn)單正則驗(yàn)證操作技巧,需要的朋友可以參考下2017-01-01JavaScript實(shí)現(xiàn)移動(dòng)端簽字功能
這篇文章主要為大家詳細(xì)介紹了JavaScript實(shí)現(xiàn)移動(dòng)端簽字功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-10-10

JavaScript知識(shí)點(diǎn)總結(jié)(十六)之Javascript閉包(Closure)代碼詳解