微信小程式實作與後台PHP交互

小云云
發布: 2018-03-29 11:39:54
原創
39495 人瀏覽過

接下來將講後台如何與前台進行數據及圖片之間的交互,相信這一點是很多人所關注的,因為當時我實在團隊中負責後台開發,因此對前端不是特別了解,這裡我會貼出前端開發時的部分程式碼截圖,微信小程式的官方api介紹網址是:

    https://mp.weixin.qq.com/debug/wxadoc/dev/api/api -network.html

微信與後台伺服器之間的資料通訊是呼叫wx.request(OBJECT)實現的,官方api介面裡有對此說明,

例如前台向後台發送數據,需要連結伺服器php作用路徑下的特定php文件,並以key-value形式封裝json格式數據,請看以下程式碼:

    

#url是伺服器的網域名稱及isbn.php在伺服器的位置,這個位置是相對位置,在我上一篇購買的鏡像裡預設php檔案路徑為:   /yjdata/www/
,這意味著直接放在這個資料夾下的php只需要在網域後面直接/+*.php即可,如果為了方便管理在這個目錄下建造了一個資料夾則在網域後/資料夾名字/*.php即可。


    此外前端向後台傳送的資料是以json格式封裝的,如圖中的data裡寫的數據,前面是key,後面是具體的value值,後台取得時候是要根據前面的key值取值,此外,method決定了後台與前台通過什麼方式交流,這裡是用的GET方法,後台與前台方法必須配對使用,不能一個是GET,另一端是POST,在做微信支付功能時,有些安全性隱私性較高的資料必須採用POST進行互動。


    這裡的前端傳送給後台的result是圖書的ISBN碼,因為我們做的小程式有個功能是呼叫相機掃描書本後面的條碼從而獲得ISBN碼,前端將ISBN碼發送到後台,後台程式將調用第三方豆瓣圖書接口來依據ISBN碼查詢圖書信息,並將圖書信息返回給前台,這裡我貼出服務器端的代碼供大家參考:

<?php$result=$_GET["result"];/*获取前端微信小程序扫书的isbn结果*/
登入後複製
/*与第三方接口通信获取书本信息*/
登入後複製
$book_info=file_get_contents("https://api.douban.com/v2/book/isbn/:".$result);$jsondecode = json_decode($book_info,true);/*将获取到的书本信息JSON解码*/$title=$jsondecode["title"];/*将解码后书名赋值给title变量*/$author=$jsondecode["author"];/*将解码后作者赋值给author变量*/$publisher=$jsondecode["publisher"];/*将解码后出版社名赋值给publisher变量*/echo "title=".$title; /*向前端返回书名*/echo "author=".$author; /*向前端返回作者名*/echo "publisher=".$publisher; /*向前端返回出版社名*/?>
登入後複製

    具體的註釋都寫得很詳細,向前台返回資料則直接用echo即可,一般開發都要與資料庫打交道,因此,後台程式就需要依據前台傳來的數據對資料庫進行操作,這一部分其實也就是接受前台的數據,執行對應的資料庫操作,這一部分只要是講到php資料庫操作的都會有,這裡我不再進行過多闡述。

    另外,對於一個微信小程式來說,圖片是必不可少的,而圖片資源都是儲存在伺服器中的,因此如何儲存圖片是一個關鍵。接下來將結合一個書本資訊的具體插入資料庫的過程來進行講解。 。 。 (其實註釋特別詳細)

<?phpheader(&#39;content-type:application/json;charset=utf8&#39;);$mysql_server_name="localhost";/*数据库服务器名称*/$mysql_username="root";/*数据库用户名*/$mysql_password="123456";/*数据库用户密码*/$mysql_databasename="zhishu";/*进入数据库后数据库名*/$conn=mysqli_connect($mysql_server_name,$mysql_username,$mysql_password,$mysql_databasename);/*数据库连接语句*/;;$bookname=$_POST["bookname"];/*从小程序前端获取书本名字*/$authorname=$_POST["authorname"];/*从小程序前端获取书本作者名字*/$bookintroduce=$_POST["introduce"];/*从小程序前端获取书本介绍信息*/$bookholder_name=$_POST["openid"];/*从小程序前端获取书本持有人昵称*/$bookclass=$_POST[&#39;classification&#39;];;/*从小程序前端获取书本分类*/date_default_timezone_set(&#39;PRC&#39;); /*设置默认时区为中国*/$time=(string)date("Y-m-d-h-i",time());/*获取时间*/function Unioname($a) /*将时间格式更改的函数*/{
    $a=explode(&#39;-&#39;,$a);
    $a=implode(&#39;&#39;,$a);
    return $a;
}$time=Unioname($time);$allowedExts = array("gif", "jpeg", "jpg", "png"); /*这里的内容同用户注册时代码含义一样,只不过那时是为了存用户头像并修改用户头像名字,这里是存书本图像并修改书本图像的名字*/$temp = explode(".", $_FILES["file"]["name"]);//将图片名字以.分割成两个字符串$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 "错误:: " . $_FILES["file"]["error"] . "<br>";
    } else {
        // 判断当期目录下的 upload 目录是否存在该文件        // 如果没有 upload 目录,你需要创建它,upload 目录权限为 777
        if (file_exists("bookimage/" . $_FILES["file"]["name"])) {
            echo $_FILES["file"]["name"] . " 文件已经存在。 ";
        } 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); /*将获取到书本信息插入数据库语句*/            $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 "插入书籍成功!";
            }
            else
            {
                echo "插入失败";
            }
        }
    }
}mysqli_close($conn); /*关闭数据库连接*/?>
登入後複製

首先使用$[FILE]全域數組接受文件,其擁有的幾個屬性如下:

$_FILES["file"]["name"] - 上傳檔案的名稱

#$_FILES["file "]["type"] - 上傳檔案的型別


$_FILES["file"]["size"] - 上傳檔案的大小,以位元組計
$_FILES["file"]["tmp_name"] - 儲存在伺服器的檔案的暫存副本的名稱

$_FILES["file"]["error"] - 由檔案上傳導致的錯誤代碼###這是一種非常簡單文件發送及接收方式,接收到以後對文件名字進行以“.”進行分割,這是為了獲取後綴,接下來要對後綴進行判斷,看是否是常用的圖片後綴格式,如果是且圖片大小小於1MB,則進行接下來的操作,此時圖片位於快取區,因此必須將圖片改名後存於圖書圖片的資料夾下,這一部分在程式碼裡有實現,此外,還需要將圖片的路徑與該圖書其他資訊一起存到資料庫裡。到這裡基本小程式與後台大部分能用到的互動我都在這裡講了,基本上可以完成一個簡單的小程式。 ######

相關推薦:

微信小程式PHP後台實作的方法

以上是微信小程式實作與後台PHP交互的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!