【学习记录】微信小程序: 后端开发

服务端后台接口开发实战

推荐工具

  • 代码编辑器:Sublime
  • 本地运行环境:phpstudy (windows)
  • 接口测试工具:postman
  • 线上服务器:新浪云 SAE
  • 代码版本控制器:tortoise svn、PHP storm

Download - Sublime Text

sublime text3入门教程

PhpStorm

PhpStorm的简单使用教程

PhpStorm中如何配置SVN,详细操作方法

IntelliJ IDEA设置TortoiseSVN插件(Cannot run program "svn")

svn 安装目录 没有 svn.exe

小皮面板(phpstudy)

phpstudy使用说明教程

使用Mac系统的朋友可以自行探索~

Postman

Postman使用详解

云应用 SAE

新浪SAE快速上手教程

微信小程序的后台需要设置支持https,并且认证过的服务器域名。

TortoiseSVN 64位下载

新浪云 - 使用SVN客户端

网络请求基本知识

HTTP 方法:GET 对比 POST

JSON与XML的区别比较

MySQL

MySQL 教程

phpMyAdmin使用教程

登录MySQL

mysql -h localhost -u root -p

mysql -uroot -p

后面就跟着视频建表~

php

PHP 教程

thinkPHP

ThinkPHP框架

所有的代码都是首先经过index.php文件,然后再由这个文件分发到具体的文件夹。

  • ThinkPHP是一个类库
  • Public是公共文件
  • Application是应用(自己写的代码)
    • Common公共
      • Common
        • function.php里可以定义一些公共的函数
      • Conf
        • config.php公共配置
    • Home模块
      • Common放模块下面的一些公共代码
      • Conf放文件夹的配置文件,以数组的形式进行配置
        • config.php放Home模块独有的配置
      • Controller文件夹里面可以写各种类,每一种类里面可以写很多方式
      • Model文件夹里面放一些模型文件
      • View放一些HTML文档,用于网站开发

自己要写的是Application->Home->Controller模块

Controller里面所有的类文件,固定的写法都必须是IndexController.class.php

Controller.class.php是固定的写法,只有Index是我们自己命名的。

访问方法:localhost/treehole/index.php/Home/Index/test

Home表示属于哪个模块

Index表示属于哪个类文件

test表示属于哪个fanction函数

ThinkPHP3.2.3快速入门

若操作成功,返回新增数据的id。

操作数据库前,先修改配置文件。

后台接口

测试接口

<?php

namespace Home\Controller; //命名空间

use Think\Controller; //使用了什么样的类
class TestController extends BaseController
{ //TestController是当前代码的名字

	public function test()
	{
		echo 123;
	}

	public function insert_test()
	{
		//实例化数据表
		$Message = M('Message');

		//组装插入的数据
		$data = array(); //声明一个空数组
		$data['user_id'] = 5;
		$data['username'] = '小明';
		$data['face_url'] = 'xxx.jpg';
		$data['content'] = '今天是晴天。';
		$data['total_likes'] = 0;
		$data['send_timestamp'] = time();

		//插入数据
		$result = $Message->add($data); //add函数是封装好的
		var_dump($Message->getLastSql()); //打印SQL语句
		var_dump($result);
	}

	public function select_test()
	{
		//实例化数据库表
		$Message = M('Message');

		//设置查询条件
		$where = array();
		$where['user_id'] = 5;

		//查询数据
		$all_messages = $Message->where($where)->select();

		//箭头的意思是调用它的函数
		//thinkPHP可以连续调用函数

		// var_dump($all_messages);
		dump($all_messages);

		//只打印id和username
		$all_messages = $Message->where($where)->field('id,username')->select();
		dump($all_messages);
		dump($Message->getLastSql());
	}

	public function find_test()
	{
		//实例化数据库表
		$Message = M('Message');

		//设置查询条件
		$where = array();
		$where['user_id'] = 5;

		//查询数据
		$all_messages = $Message->where($where)->select();
		dump($all_messages);
		dump($Message->getLastSql());

		$all_messages = $Message->where($where)->find();
		dump($all_messages);
		dump($Message->getLastSql());
	}

	public function save_test()
	{
		//实例化数据表
		$Message = M('Message');

		//设置要修改的条件
		$where = array();
		$where['id'] = 4;

		//要保存的数据
		$data = array();
		$data['total_likes'] = 123;

		//保存
		$result = $Message->where($where)->save($data);
		dump($result);
	}

	public function delete_test()
	{
		//实例化数据表
		$Message = M('Message');

		//设置条件
		$where = array();
		$where['id'] = 4;
		// $where['user_id'] = 3;

		//删除
		$result = $Message->where($where)->delete();
		dump($result);
		dump($Message->getLastSql());
	}
}

用户的注册接口

  • 接收数据
  • 校验数据
  • 查询数据库
  • 插入数据库
  • 组装数据
  • 返回数据
class UserController extends BaseController
{ //UserController是当前代码的名字

	/**
	 * 
	 * 用户注册
	 * @return [type] [description]
	 */
	public function sign()
	{

		// 校验参数是否存在
		if (!$_POST['username']) {

			$return_data = array();
			$return_data['error_code'] = 1;
			$return_data['msg'] = '参数不足: username';
			//msg是给前端开发人员看的,告诉开发人员每个数字代表什么意思
            
			$this->ajaxReturn($return_data);
			//如果要把数据返回给前端,都需要用$this->ajaxReturn
			//ajaxReturn意思是以ajax的方式把数据返回前端去
		}

		if (!$_POST['phone']) {

			$return_data = array();
			$return_data['error_code'] = 1;
			$return_data['msg'] = '参数不足: phone';

			$this->ajaxReturn($return_data);
		}

		if (!$_POST['password']) {

			$return_data = array();
			$return_data['error_code'] = 1;
			$return_data['msg'] = '参数不足: password';

			$this->ajaxReturn($return_data);
		}

		if (!$_POST['password_again']) {

			$return_data = array();
			$return_data['error_code'] = 1;
			$return_data['msg'] = '参数不足: password_again';

			$this->ajaxReturn($return_data);
		}

		// 检验两次密码是否输入一致
		if ($_POST['password'] != $_POST['password_again']) {

			$return_data = array();
			$return_data['error_code'] = 2;
			$return_data['msg'] = '两次密码不一致';

			$this->ajaxReturn($return_data);
		}

		// 检验手机号是否已经被注册

		$User = M('User');

		// 构造查询条件
		$where = array();
		$where['phone'] = $_POST['phone'];

		//因为只需要查出一个,所以用find比较好
		$user = $User->where($where)->find();

		if ($user) {

			// 如果存在该手机号的用户,则提示
			// 不再允许重复注册该手机号

			$return_data = array();
			$return_data['error_code'] = 3;
			$return_data['msg'] = '该手机号已被注册';

			$this->ajaxReturn($return_data);
		} else {

			// 如果用户尚未注册,则注册
			// 构建插入的数据

			$data = array();
			$data['username'] = $_POST['username'];
			$data['phone'] = $_POST['phone'];
			// $data['password'] = md5($_POST['password']);
			// 密码,用md5函数进行加密,得到32位字符串
			$data['password'] = $_POST['password'];
			$data['face_url'] = $_POST['face_url'];

			// dump($data);

			// 插入数据
			$result = $User->add($data); // add函数添加数据成功之后,返回的就是该条数据的id

			if ($result) { //if语句中只要$result有值,就是非零非空

				// 插入数据成功
				$return_data = array();
				$return_data['error_code'] = 0;
				$return_data['msg'] = '注册成功';
				$return_data['data']['user_id'] = $result;
				$return_data['data']['username'] = $_POST['username'];
				$return_data['data']['phone'] = $_POST['phone'];
				$return_data['data']['face_url'] = $_POST['face_url'];

				$this->ajaxReturn($return_data);
			} else {

				// 插入数据执行失败
				$return_data = array();
				$return_data['error_code'] = 4;
				$return_data['msg'] = '注册失败';

				$this->ajaxReturn($return_data);
			}
		}
		// dump($_POST);
	}

使用postman测试该接口,传参数是在Body->form-data

用户的登录接口

  • 接收数据
  • 处理数据
  • 返回结果
/**
	 * 用户登录
	 * @return [type] [description]
	 */
	public function login()
	{

		// 校验参数是否存在
		if (!$_POST['phone']) {

			$return_data = array();
			$return_data['error_code'] = 1;
			$return_data['msg'] = '参数不足: phone';

			$this->ajaxReturn($return_data);
		}

		if (!$_POST['password']) {

			$return_data = array();
			$return_data['error_code'] = 1;
			$return_data['msg'] = '参数不足: password';

			$this->ajaxReturn($return_data);
		}

		// 查询用户
		$User = M('User');

		$where = array();
		$where['phone'] = $_POST['phone'];

		$user = $User->where($where)->find();

		if ($user) {

			// 如果查询到该手机号用户
			// dump($user);

			// if (md5($_POST['password']) != $user['password']) {
			if($_POST['password'] != $user['password']){
				$return_data = array();
				$return_data['error_code'] = 3;
				$return_data['msg'] = '密码不正确,请重新输入';

				$this->ajaxReturn($return_data);
			} else {
				// 如果密码一样

				$return_data = array();
				$return_data['error_code'] = 0;
				$return_data['msg'] = '登陆成功';
				$return_data['data']['user_id'] = $user['id'];
				$return_data['data']['username'] = $user['username'];
				$return_data['data']['phone'] = $user['phone'];
				$return_data['data']['face_url'] = $user['face_url'];

				$this->ajaxReturn($return_data);
			}
		} else {

			$return_data = array();
			$return_data['error_code'] = 2;
			$return_data['msg'] = '不存在该手机号用户,请注册';

			$this->ajaxReturn($return_data);
		}

		dump($_POST);
	}

发布新树洞接口

/**
     * 发布新树洞
     * @return [type] [description]
     */
    public function publish_new_message()
    {

        // 校验参数是否存在
        if (!$_POST['user_id']) {

            $return_data = array();
            $return_data['error_code'] = 1;
            $return_data['msg'] = '参数不足: user_id';

            $this->ajaxReturn($return_data);
        }

        if (!$_POST['username']) {

            $return_data = array();
            $return_data['error_code'] = 1;
            $return_data['msg'] = '参数不足: username';

            $this->ajaxReturn($return_data);
        }

        if (!$_POST['face_url']) {

            $return_data = array();
            $return_data['error_code'] = 1;
            $return_data['msg'] = '参数不足: face_url';

            $this->ajaxReturn($return_data);
        }

        if (!$_POST['content']) {

            $return_data = array();
            $return_data['error_code'] = 1;
            $return_data['msg'] = '参数不足: content';

            $this->ajaxReturn($return_data);
        }

        $Message = M('Message');

        // 设置要插入的数据
        $data = array();
        $data['user_id'] = $_POST['user_id'];
        $data['username'] = $_POST['username'];
        $data['face_url'] = $_POST['face_url'];
        $data['content'] = $_POST['content'];
        $data['total_likes'] = 0;
        $data['send_timestamp'] = time();

        //插入数据
        $result = $Message->add($data);

        if ($result) {

            $return_data = array();
            $return_data['error_code'] = 0;
            $return_data['msg'] = '数据添加成功';

            $this->ajaxReturn($return_data);
        } else {

            $return_data = array();
            $return_data['error_code'] = 2;
            $return_data['msg'] = '数据添加失败';

            $this->ajaxReturn($return_data);
        }
    }

获取所有树洞接口

/**
     * 得到所有树洞
     * @return [type] [description]
     */
    public function get_all_messages()
    {

        // 实例化数据表
        $Message = M('Message');

        // 设置查询条件

        // 按照时间倒序获取所有树洞
        // 这里的时间和id是同一个
        //desc递减
        //asc递增
        $all_messages = $Message->order('id desc')->select();

        // dump($all_messages);

        // 将所有的时间戳转换为2021-03-13 08:38:53
        // php里面的循环使用foreach
        foreach ($all_messages as $key => $message) {

            $all_messages[$key]['send_timestamp'] = date('Y-m-d H:i:s', $message['send_timestamp']);
        }

        $return_data = array();
        $return_data['error_code'] = 0;
        $return_data['msg'] = '数据获取成功';
        $return_data['data'] = $all_messages;

        $this->ajaxReturn($return_data);

        // dump($all_messages);
    }

得到某一用户的所有树洞

/**
     * 得到某一用户的所有树洞
     * @return [type] [description]
     */
    public function get_one_user_all_messages()
    {

        // 校验参数是否存在
        if (!$_POST['user_id']) {

            $return_data = array();
            $return_data['error_code'] = 1;
            $return_data['msg'] = '参数不足: user_id';

            $this->ajaxReturn($return_data);
        }

        // 实例化数据表
        $Message = M('Message');

        // 设置查询条件
        $where = array();
        $where['user_id'] = $_POST['user_id'];

        $message = $Message->where($where)->select();
        if (!$message) {

            $return_data = array();
            $return_data['error_code'] = 2;
            $return_data['msg'] = '数据获取失败';

            $this->ajaxReturn($return_data);
        } else {

            $return_data = array();
            $return_data['error_code'] = 0;
            $return_data['msg'] = '数据获取成功';
            $return_data['data'] = $message;

            $this->ajaxReturn($return_data);
        }
    }

点赞接口

/**
     * 点赞数增加
     * @return [type] [description]
     */
    public function do_like()
    {

        // 校验参数
        if (!$_POST['message_id']) {

            $return_data = array();
            $return_data['error_code'] = 1;
            $return_data['msg'] = '参数不足: message_id';

            $this->ajaxReturn($return_data);
        }

        if (!$_POST['user_id']) {

            $return_data = array();
            $return_data['error_code'] = 1;
            $return_data['msg'] = '参数不足: user_id';

            $this->ajaxReturn($return_data);
        }

        // dump($_POST);

        $Message = M('Message');

        // 查询条件
        $where = array();
        $where['id'] = $_POST['message_id'];

        $message = $Message->where($where)->find();

        // 判断是否存在该条树洞
        if (!$message) {

            $return_data = array();
            $return_data['error_code'] = 2;
            $return_data['msg'] = '指定的树洞不存在';

            $this->ajaxReturn($return_data);
        }

        // dump($message);

        $data = array();
        $data['total_likes'] = $message['total_likes'] + 1;

        // 构造要保存的条件
        $where = array();
        $where['id'] = $_POST['message_id'];

        $result = $Message->where($where)->save($data);

        if ($result) {

            $return_data = array();
            $return_data['error_code'] = 0;
            $return_data['msg'] = '数据保存成功';
            $return_data['data']['message_id'] = $_POST['message_id'];
            $return_data['data']['total_likes'] = $data['total_likes'];

            $this->ajaxReturn($return_data);
        } else {

            $return_data = array();
            $return_data['error_code'] = 2;
            $return_data['msg'] = '数据保存失败';

            $this->ajaxReturn($return_data);
        }
    }

删除指定树洞接口

/**
     * 删除指定树洞接口
     * @return [type] [description]
     */
    public function delete_message()
    {

        // 校验参数
        if (!$_POST['message_id']) {

            $return_data = array();
            $return_data['error_code'] = 1;
            $return_data['msg'] = '参数不足: message_id';

            $this->ajaxReturn($return_data);
        }

        if (!$_POST['user_id']) {

            $return_data = array();
            $return_data['error_code'] = 1;
            $return_data['msg'] = '参数不足: user_id';

            $this->ajaxReturn($return_data);
        }

        $Message = M('Message');

        //设置条件
        $where = array();
        $where['id'] = $_POST['message_id'];
        $where['user_id'] = $_POST['user_id'];

        $message = $Message->where($where)->find();

        if (!$message) {

            $return_data = array();
            $return_data['error_code'] = 2;
            $return_data['msg'] = '指定的数据查询不存在';

            $this->ajaxReturn($return_data);
        } else {

            $message_id = $message['id'];

            $message = $Message->where($where)->delete();

            $return_data = array();
            $return_data['error_code'] = 0;
            $return_data['msg'] = '数据删除成功';
            $return_data['message_id'] =  $message_id;

            $this->ajaxReturn($return_data);
        }
    }

SVN

一种代码版本控制器,可以多人协作开发。

  1. 进到这里,获取SVN仓库地址
  1. 打开网站根目录
  1. 右键,点击SVN检出,将刚才获取到的地址粘贴到这
  1. 点击确定,就把代码从新浪云更新到本地了
  1. 成功后,文件前面都有一个绿色的对号
  1. 输入http://zzdxyyf.saelinzi.com/zzdxyyf/1/treehole1/index.php/Home/Index/test,输出int(666)
  1. 修改本地代码,看到文件夹图标上有个警告,右键文件夹,点击SVN提交。
  1. 可以看到修改前后的变化
  1. 点击确定,提交完成,刷新网页,看到输出变为int(999)
image-20210716174913040

微信小程序API补充

配置服务器域名

服务器域名保存成功之后,小程序就可以和服务器进行通信了。

对接注册接口

这部分内容,由于没有购买域名,目前也没有精力继续搞了,所以先把一些课程的知识点记录一下。

  1. 数据传递
  2. API调用发起网络请求
  3. 接口回调处理
  4. 全局数据交互

postman

  • 在POST方式下参数要写在Body中
  • 在GET方式下参数要写在Params中

线上服务器的域名最好保存在全局变量中。

“=”赋值的方式,并不会触发前端页面的刷新。

测试、上传、发布

posted @ 2021-07-16 14:22  zhulu506  阅读(754)  评论(0编辑  收藏  举报