微信小程序与后台PHP交互的方法实例分析

本文实例讲述了微信小程序与后台PHP交互的方法。分享给大家供大家参考,具体如下:

接下来将讲后台如何与前台进行数据及图片之间的交互,相信这一点是很多人所关注的,因为当时我实在团队中负责后台开发,因此对前端不是特别了解,这里我会贴出前端开发时的部分代码截图,微信小程序的官方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数据库操作的都会有,这里我不再进行过多阐述。

此外,对于一个微信小程序来说,图片是必不可少的,而图片资源都是存储在服务器中的,因此如何对图片进行存储是一个关键。接下来将结合一个书本信息的具体插入数据库的过程来进行讲解。。。(其实注释特别详细)

<?php
header('content-type:application/json;charset=utf8');
$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['classification'];;/*从小程序前端获取书本分类*/
date_default_timezone_set('PRC'); /*设置默认时区为中国*/
$time=(string)date("Y-m-d-h-i",time());/*获取时间*/function Unioname($a) /*将时间格式更改的函数*/{
  $a=explode('-',$a);
  $a=implode('',$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,则进行接下来的操作,此时图片位于缓存区,因此必须将图片改名后存于图书图片的文件夹下,这一部分在代码里有实现,此外,还需要将图片的路径与该图书其他信息一起存到数据库里。到这里基本小程序与后台大部分能用到的交互我都在这里讲了,基本可以完成一个简单的小程序。

希望本文所述对大家微信小程序开发有所帮助。

(0)

相关推荐

  • 微信小程序中form 表单提交和取值实例详解

    微信小程序中form 表单提交和取值实例详解 我们知道,如果我们直接给 input 添加 bindinput,比如:<input bindinput="onUsernameInput" />,那么可以在 onUsernameInput 中直接使用 e.detail.value,即: onUsernameInput : function(e) { e.detail.value; } 但是,如果有多个输入控件,我们不可能为每个控件添加 bindinput.bindchange

  • 微信小程序form表单组件示例代码

    表单,将组件内的用户输入的<switch/> <input/> <checkbox/> <slider/> <radio/> <picker/> 提交. 当点击<form/>表单中 formType 为 submit 的<button/>组件时,会将表单组件中的 value 值进行提交,需要在表单组件中加上 name 来作为 key. 属性名 类型 说明 report-submit Boolean 是否返回fo

  • 微信小程序 PHP后端form表单提交实例详解

    微信小程序 PHP后端form表单 1.小程序相对于之前的WEB+PHP建站来说,个人理解为只是将web放到了微信端,用小程序固定的格式前前端进行布局.事件触发和数据的输送和读取,服务器端可以用任何后端语言写,但是所有的数据都要以JSON的形式返回给小程序. 2.昨天写了登录注册.忘记密码功能,他们实质上都是一个表单提交操作.因此就拿注册功能来写这个例子. 3.目录图 js文件是逻辑控制,主要是它发送请求和接收数据, json 用于此页面局部 配置并且覆盖全局app.json配置, wxss用于

  • 微信小程序 表单Form实例详解(附源码)

    微信小程序 表单Form实例 表单Form的应用很广泛,我们可以利用form设计登录注册,也可以设计一种答题问卷的形式,今天主要讲一下form的使用 form表单,将组件内输入的"switch","input","checkbox","slider","radio","picker"的值进行提交,数据的格式为:name:value,所以表单中控件都需要添加name属性,否则找不到对应控件

  • 微信小程序学习笔记之表单提交与PHP后台数据交互处理图文详解

    本文实例讲述了微信小程序学习笔记之表单提交与PHP后台数据交互处理.分享给大家供大家参考,具体如下: 前面一篇结介绍了微信小程序函数定义.页面渲染.这里介绍form表单提交与后台php数据交互处理. [form表单提交] form.wxml: <form bindsubmit="formSubmit" bindreset="formReset"> <view> 昵称:<input type="text" name=&

  • 微信小程序支付功能 php后台对接完整代码分享

    微信小程序支付,php后台对接完整代码,全是干货呀,拿过来可以直接使用.小程序在调起微信支付之前需要5个参数,这时候就需要携带code向后台请求,然后后台根据code获取openid 再进行服务器之间的. 一.准备工作 1.小程序注册,要以公司的以身份去注册一个小程序,才有微信支付权限: 2.绑定商户号. 3.在小程序填写合法域  二.完成以上条件,你可以得到      小程序appid 小程序秘钥    这两个用于获取用户openid: 商户号id ,商户号秘钥     支付接口必须的: 三.

  • 微信小程序表单验证form提交错误提示效果

    本文实例为大家分享了微信小程序表单验证提交错误提示的具体代码,供大家参考,具体内容如下 表单验证,点击确认发布不能为空错误提示. 以下是效果图: 代码如下: WXML: <view class="ad_popError" wx:if="{{popErrorMsg}}">{{popErrorMsg}}</view> <view class="ad_popFt"> <form bindsubmit="

  • 微信小程序调用PHP后台接口 解析纯html文本

    微信小程序调用PHP后台接口,解析纯html文本,效果图片预览 1.微信js动态传参: wx.request({ url: 'https://m.****.com/index.php/Home/Xiaoxxf/activity_detail?a_id='+options.id,//含富文本html data: { is_detail:1 }, method: 'GET', // OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT heade

  • 微信小程序request请求后台接口php的实例详解

    微信小程序request请求后台接口php的实例详解 后台php接口:http://www.vueyun.com/good/info 没有处理数据,直接返回了,具体再根据返回格式处理 public function getGoodInfo(Request $request) { $goods_datas = $this->Resource->get(); return response()->json(['status' => 'success','code' => 200,

  • 微信小程序使用form表单获取输入框数据的实例代码

    本文讲述了微信小程序使用form表单获取输入框数据的实例代码.分享给大家供大家参考,具体如下: 1.效果展示 2.关键代码 index.wxml 用户名: 密码: 登录 重置 {{tip}}{{userName}}{{psw}} index.js Page({ data:{ // text:"这是一个页面" tip:'', userName:'', psw:'' }, formBindsubmit:function(e){ if(e.detail.value.userName.leng

  • 微信小程序简单实现form表单获取输入数据功能示例

    本文实例讲述了微信小程序简单实现form表单获取输入数据功能.分享给大家供大家参考,具体如下: 1.效果展示 2.关键代码 index.wxml <form bindsubmit="formBindsubmit" bindreset="formReset"> <view style="display:flex;"> <label>用户名:</label> <input name="u

随机推荐