微信小程序与后台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 相关文章推荐
javascript iframe中打开文件,并检测iframe存在否
Dec 28 Javascript
jtable列中自定义button示例代码
Nov 21 Javascript
在Node.js中使用HTTP上传文件的方法
Jun 23 Javascript
jQuery拖动元素并对元素进行重新排序
Dec 30 Javascript
JavaScript算法系列之快速排序(Quicksort)算法实例详解
Sep 04 Javascript
浅谈jquery中使用canvas的问题
Oct 10 Javascript
JS实现的DIV块来回滚动效果示例
Feb 07 Javascript
JQuery validate 验证一个单独的表单元素实例
Feb 17 Javascript
JS声明对象时属性名加引号与不加引号的问题及解决方法
Feb 16 Javascript
vue实现element-ui对话框可拖拽功能
Aug 17 Javascript
详解ES6 系列之异步处理实战
Oct 26 Javascript
vue项目出现页面空白的解决方案
Oct 31 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
一个显示效果非常不错的PHP错误、异常处理类
2014/03/21 PHP
PHP编程获取图片的主色调的方法【基于Imagick扩展】
2017/08/02 PHP
php mysql PDO 查询操作的实例详解
2017/09/23 PHP
js/jquery去掉空格,回车,换行示例代码
2013/11/05 Javascript
Javascript变量的作用域和作用域链详解
2015/04/02 Javascript
js实现图片轮播效果
2015/12/19 Javascript
喜大普奔!jQuery发布 3.0 最终版
2016/06/12 Javascript
bootstrapfileinput实现文件自动上传
2016/11/08 Javascript
bootstrap table之通用方法( 时间控件,导出,动态下拉框, 表单验证 ,选中与获取信息)代码分享
2017/01/24 Javascript
node.js 用socket实现聊天的示例代码
2017/10/17 Javascript
详解如何在项目中使用jest测试react native组件
2018/02/09 Javascript
在Vue项目中使用d3.js的实例代码
2018/05/01 Javascript
vue 中使用 watch 出现了如下的报错的原因分析
2019/05/21 Javascript
layui table数据修改的回显方法
2019/09/04 Javascript
jQuery高级编程之js对象、json与ajax用法实例分析
2019/11/01 jQuery
bootstrapValidator表单校验、更改状态、新增、移除校验字段的实例代码
2020/05/19 Javascript
浅谈Vue 函数式组件的使用技巧
2020/06/16 Javascript
Vue表单提交点击事件只允许点击一次的实例
2020/10/23 Javascript
[04:02]DOTA2上海特锦赛小组赛第二日recap精彩回顾
2016/02/28 DOTA
Python迭代用法实例教程
2014/09/08 Python
Python实现将照片变成卡通图片的方法【基于opencv】
2018/01/17 Python
在Python中os.fork()产生子进程的例子
2019/08/08 Python
Python 等分切分数据及规则命名的实例代码
2019/08/16 Python
带你彻底搞懂python操作mysql数据库(cursor游标讲解)
2020/01/06 Python
Python 一行代码能实现丧心病狂的功能
2020/01/18 Python
解决Pycharm中恢复被exclude的项目问题(pycharm source root)
2020/02/14 Python
使用keras2.0 将Merge层改为函数式
2020/05/23 Python
什么是python的id函数
2020/06/11 Python
世界知名接发和假发品牌:Poze Hair
2017/03/08 全球购物
英国知名化妆品网站:Revolution Beauty(原TAM Beauty)
2018/02/28 全球购物
美国最大的户外装备和服装购物网站:Backcountry
2019/10/15 全球购物
讲解员培训方案
2014/05/04 职场文书
中华魂放飞梦想演讲稿
2014/08/26 职场文书
2015年评职称工作总结范文
2015/04/20 职场文书
2016圣诞节贺卡寄语
2015/12/07 职场文书
Mybatis-Plus 使用 @TableField 自动填充日期
2022/04/26 Java/Android