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


Posted in Javascript onDecember 10, 2018

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

接下来将讲后台如何与前台进行数据及图片之间的交互,相信这一点是很多人所关注的,因为当时我实在团队中负责后台开发,因此对前端不是特别了解,这里我会贴出前端开发时的部分代码截图,微信小程序的官方api介绍地址是:

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

微信与后台服务器之间的数据通信是调用wx.request(OBJECT)实现的,官方api接口里有对此说明,

例如前台向后台发送数据,需要链接服务器php作用路径下的具体php文件,并以key-value形式封装json格式数据,请看以下代码:

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

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,则进行接下来的操作,此时图片位于缓存区,因此必须将图片改名后存于图书图片的文件夹下,这一部分在代码里有实现,此外,还需要将图片的路径与该图书其他信息一起存到数据库里。到这里基本小程序与后台大部分能用到的交互我都在这里讲了,基本可以完成一个简单的小程序。

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

Javascript 相关文章推荐
jQuery AJAX 调用WebService实现代码
Mar 24 Javascript
Javascript 面向对象之重载
May 04 Javascript
JS判断表单输入是否为空(示例代码)
Dec 23 Javascript
AngularJS中的Directive自定义一个表格
Jan 25 Javascript
实例详解JavaScript中setTimeout函数的执行顺序
Jul 12 Javascript
ComboBox(下拉列表框)通过url加载调用远程数据的方法
Aug 06 Javascript
jquery.uploadView 实现图片预览上传功能
Aug 10 jQuery
微信小程序实现顶部选项卡(swiper)
Jun 19 Javascript
浅谈Vuex的状态管理(全家桶)
Nov 04 Javascript
详解使用jQuery.i18n.properties实现js国际化
May 04 jQuery
深入浅出 Vue 系列 -- 数据劫持实现原理
Apr 23 Javascript
vue+koa2实现session、token登陆状态验证的示例
Aug 30 Javascript
引入外部js脚本加载慢与页面白屏问题的解决
Dec 10 #Javascript
JQuery Ajax执行跨域请求数据的解决方案
Dec 10 #jQuery
发布Angular应用至生产环境的方法
Dec 10 #Javascript
webpack优化的深入理解
Dec 10 #Javascript
BootStrap模态框闪退问题实例代码详解
Dec 10 #Javascript
详解为生产环境编译Angular2应用的方法
Dec 10 #Javascript
深入理解Vue.js轻量高效的前端组件化方案
Dec 10 #Javascript
You might like
Protoss兵种对照表
2020/03/14 星际争霸
用PHP制作静态网站的模板框架(三)
2006/10/09 PHP
一个php Mysql类 可以参考学习熟悉下
2009/06/21 PHP
php连接odbc数据源并保存与查询数据的方法
2014/12/24 PHP
CI框架的安全性分析
2016/05/18 PHP
Ajax实现对静态页面的文章访问统计功能示例
2016/10/10 PHP
JS代码防止SQL注入的方法(超简单)
2016/04/12 Javascript
JQuery异步加载PartialView的方法
2016/06/07 Javascript
微信小程序 加载 app-service.js 错误解决方法
2016/10/12 Javascript
Node.js 异步异常的处理与domain模块解析
2017/05/10 Javascript
AngularJS日程表案例详解
2017/08/15 Javascript
vue中如何去掉空格的方法实现
2018/11/09 Javascript
详解vue使用插槽分发内容slot的用法
2019/03/28 Javascript
详解vuex数据传输的两种方式及this.$store undefined的解决办法
2019/08/26 Javascript
JS实现贪吃蛇游戏
2019/11/15 Javascript
vue如何使用async、await实现同步请求
2019/12/09 Javascript
python读写ini配置文件方法实例分析
2015/06/30 Python
Python 绘图和可视化详细介绍
2017/02/11 Python
Python实现读写sqlite3数据库并将统计数据写入Excel的方法示例
2017/08/07 Python
用Python shell简化开发
2018/08/08 Python
python实现根据指定字符截取对应的行的内容方法
2018/10/23 Python
flask-restful使用总结
2018/12/04 Python
python使用pymongo操作mongo的完整步骤
2019/04/13 Python
Python定时任务随机时间执行的实现方法
2019/08/14 Python
使用Python脚本zabbix自定义key监控oracle连接状态
2019/08/28 Python
Django中自定义模型管理器(Manager)及方法
2019/09/23 Python
python 实现方阵的对角线遍历示例
2019/11/29 Python
python上传时包含boundary时的解决方法
2020/04/08 Python
使用 css3 实现圆形进度条的示例
2017/07/05 HTML / CSS
关爱残疾人演讲稿
2014/05/24 职场文书
新闻报道策划方案
2014/06/11 职场文书
班训口号大全
2014/06/18 职场文书
大学军训的体会
2014/11/08 职场文书
大学生学期个人总结
2015/02/12 职场文书
高中运动会广播稿
2015/08/19 职场文书
Android开发手册TextInputLayout样式使用示例
2022/06/10 Java/Android