1 前言:
本文原创,欢迎转载,但是,务必保持原文并且给出原文链接。
微信小程序 - 腾讯云 - PHP - DEMO 是微信提供的一个微信小程序和腾讯云小程序云服务wafer 进行接口的例子。
本仓库是最简版的 Wafer2 开发套件,建议配合腾讯云微信小程序开发者工具解决方案一起使用。适用于想要使用 Wafer SDK 开发的开发者,Demo 对 SDK 进行了详细的使用和介绍,降低开发者的学习成本。
2 界面:
该DEMO的界面如下:
3 路由配置:
软件里面给出了一个README.txt的说明文件:给出了如何设置环境的说明。参考我的另一个基础的博文。
前端和后端的路由设置,在微信小程序的代码上传到对应的腾讯云的时候,腾讯云小程序会自动设定好路由,你只需要安装说明里面做好小程序开发端的几个基本设置就好了。
上传代码完成之后,点击右上角的【详情】按钮,接着选择【腾讯云状态】即可看到腾讯云自动分配给你的开发环境域名。
完整复制(包括
https://
)开发环境 request 域名,然后在编辑器中打开client/config.js
文件,将复制的域名填入host
中并保存,保存之后编辑器会自动编译小程序,左边的模拟器窗口即可实时显示出客户端的 Demo。
4 文件构成:
Demo
├── application
│ ├── business
│ │ └── ChatTunnelHandler.php
│ ├── cache
│ ├── config
│ ├── controllers
│ │ ├── Welcome.php
│ │ ├── Login.php
│ │ ├── User.php
│ │ └── Tunnel.php
│ ├── core
│ ├── helpers
│ │ └── general_helper.php
│ ├── hooks
│ ├── language
│ ├── libraries
│ ├── logs
│ ├── models
│ ├── third_party
│ ├── vendor
│ └── views
│ └── welcome_message.php
├── index.php
├── install_qcloud_sdk.php
├── composer.json
└── system
`
4.1 根目录下的几个文件:
4.1.1 数据库文件:
我们在微信开发工具里面可以看到:cAuth.sql这个文件,这个是数据库文件,如何打开这个数据库文件呢?
这个我们用Navicat打开:Navicat是一款本地数据库工具:
参考,如何打开sql文件:
https://jingyan.baidu.com/article/0320e2c13bb4381b87507bdf.html
记住要双击!!
STEP as following:
右键刷新:
可以看到多了一个表格:双击打开:
对比:我们看文件内容如下:
下面解释一下:
SET NAMES utf8;
SET FOREIGN_KEY_CHECKS = 0;-- ----------------------------
-- Table structure for `cSessionInfo`
-- ----------------------------
DROP TABLE IF EXISTS `cSessionInfo`;
CREATE TABLE `cSessionInfo` (
`open_id` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL,
`uuid` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL,
`skey` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL,
`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`last_visit_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`session_key` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL,
`user_info` varchar(2048) COLLATE utf8mb4_unicode_ci NOT NULL,
PRIMARY KEY (`open_id`),
KEY `openid` (`open_id`) USING BTREE,
KEY `skey` (`skey`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='会话管理用户信息';SET FOREIGN_KEY_CHECKS = 1;
上述语句,相关知识如下:
COLLATE
一个子句,可应用于数据库定义或列定义以定义排序规则,或应用于字符串表达式以应用排序规则投影。
语法
COLLATE < collation_name >
< collation_name > ::=
{
Windows_collation_name } | { SQL_collation_name }
参数
collation_name
是应用于表达式、列定义或数据库定义的排序规则的名称。collation_name 可以只是指定的 Windows_collation_name 或 SQL_collation_name。
Windows_collation_name
是 Windows 排序规则的排序规则名称。请参见 Windows 排序规则名称。
SQL_collation_name
是 SQL 排序规则的排序规则名称。请参见 SQL 排序规则名称。
注释
COLLATE 子句可以在几个级别上指定,包括以下级别:
- 创建或更改数据库。
可以使用 CREATE DATABASE 或 ALTER DATABASE 语句的 COLLATE 子句指定数据库的默认排序规则。还可在创建数据库时使用 SQL Server 企业管理器指定排序规则。如果不指定排序规则,则将为数据库指派 SQL Server 实例的默认排序规则。
- 创建或更改表列。
可以使用 CREATE TABLE 或 ALTER TABLE 语句的 COLLATE 子句指定每个字符串列的排序规则。还可在创建表时使用 SQL Server 企业管理器指定排序规则。如果不指定排序规则,将为列指派数据库的默认排序规则。
还可使用 COLLATE 子句中的 database_default 选项,指定临时表中的列使用连接的当前用户数据库(而不是 tempdb)的默认排序规则。
- 投影表达式的排序规则。
可以使用 COLLATE 子句将字符表达式投影到特定的排序规则。将为字符字面值和变量指派当前数据库的默认排序规则。将为列引用指派列的定义排序规则。有关表达式排序规则的信息,请参见排序规则的优先顺序。
4.1.2 项目配置文件 project.config.json
4.2 client 下的几个文件
4.2.1 用到的几个函数和属性
require函数
在.wxs
模块中引用其他 wxs
文件模块,可以使用 require
函数。
引用的时候,要注意如下几点:
- 只能引用
.wxs
文件模块,且必须使用相对路径。 wxs
模块均为单例,wxs
模块在第一次被引用时,会自动初始化为单例对象。多个页面,多个地方,多次引用,使用的都是同一个wxs
模块对象。- 如果一个
wxs
模块在定义之后,一直没有被引用,则该模块不会被解析与运行。
示例代码:
在开发者工具中预览效果
// /pages/tools.wxs
var foo = "'hello world' from tools.wxs";
var bar = function (d) {
return d;
}
module.exports = {
FOO: foo,
bar: bar,
};
module.exports.msg = "some msg";
// /pages/logic.wxs
var tools = require("./tools.wxs");
module.exports 属性
个模块要想对外暴露其内部的私有变量与函数,只能通过 module.exports
实现。
示例代码:
Preview in Developer Tools
// /pages/tools.wxs
var foo = "'hello world' from tools.wxs";
var bar = function (d) {
return d;
}
module.exports = {
FOO: foo,
bar: bar,
};
module.exports.msg = "some msg";
<!-- page/index/index.wxml -->
<wxs src="./../tools.wxs" module="tools" />
<view> {{tools.msg}} </view>
<view> {{tools.bar(tools.FOO)}} </view>
小结:WXS分为模块内应用和直接页面应用,分别使用require函数和exports属性。
4.2.2 文件列表说明
4.2.2.1 app.js
4.3 Server 文件夹下的文件分析:
第一个起始文件就是,
4.3.1 根目录下:
4.3.1.1 install_qcloud_sdk.php
用来对sdk进行安装,初始化
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
// 加载 SDK
require_once './vendor/autoload.php';
require_once './config.php';
use \QCloud_WeApp_SDK\Conf as Conf;
// 系统判断
if (PHP_OS === 'WINNT') {
$sdkConfigPath = 'C:\qcloud\sdk.config';
} else {
$sdkConfigPath = '/data/release/sdk.config.json';
}
$sdkConfig = [];
if (file_exists($sdkConfigPath)) {
$sdkConfig = json_decode(file_get_contents($sdkConfigPath), true);
}
if (!is_array($sdkConfig)) {
echo "SDK 配置文件({$sdkConfigPath})内容不合法";
die;
}
// 合并 sdk config 和原来的配置
$config = array_merge($sdkConfig, $config);
/**
* --------------------------------------------------------------------
* 设置 SDK 基本配置
* --------------------------------------------------------------------
*/
Conf::setup($config);
/**
* --------------------------------------------------------------------
* 设置 SDK 日志输出配置(主要是方便调试)
* --------------------------------------------------------------------
*/
// 开启日志输出功能
Conf::setEnableOutputLog(true);
// 指定 SDK 日志输出目录(注意尾斜杠不能省略)
Conf::setLogPath(APPPATH . 'logs/');
// 设置日志输出级别
// 1 => ERROR, 2 => DEBUG, 3 => INFO, 4 => ALL
Conf::setLogThresholdArray([2]); // output debug log only
4.3.1.2 index.php
启动文件,定义了PHP的访问的文件名称。构建系统访问目录结构。
4.3.1.3 config.php
小程序配置文件。
4.3.1.4 composer.json
`composer.json` 文件中声明了对 SDK 的依赖,可执行命令 `composer install` 安装依赖。
Composer是一个非常流行的PHP包依赖管理工具,
https://docs.phpcomposer.com/01-basic-usage.html
4.3.2 配置和部署地址
- SDK 配置文件:`/etc/qcloud/sdk.config`
- 示例代码部署目录:`/data/release/php-weapp-demo`
- 运行示例的 nginx 配置文件: `/etc/nginx/conf.d/php-weapp-demo.conf`
4.3.3 application/
application 使用的是CodeIgniter的框架:
http://codeigniter.org.cn/user_guide/general/welcome.html
CodeIgniter 是一套给 PHP 网站开发者使用的应用程序开发框架和工具包。 它的目标是让你能够更快速的开发,它提供了日常任务中所需的大量类库, 以及简单的接口和逻辑结构。通过减少代码量,CodeIgniter 让你更加专注 于你的创造性工作。
CodeIgniter 的开发基于 MVC(模型-视图-控制器)设计模式。MVC 是一种 用于将应用程序的逻辑层和表现层分离出来的软件方法。
- 模型 代表你的数据结构。通常来说,模型类将包含帮助你对数据库进行增删改查的方法。
- 视图 是要展现给用户的信息。一个视图通常就是一个网页,但是在 CodeIgniter 中, 一个视图也可以是一部分页面(例如页头、页尾),它也可以是一个 RSS 页面, 或其他任何类型的页面。
- 控制器 是模型、视图以及其他任何处理 HTTP 请求所必须的资源之间的中介,并生成网页。
对于application 下的文件:
4.3.3.1 用户自己的应用运行地址:
## 如果在demo基础上开发
将自己开发的接口放到如下目录下即可生效
/data/release/php-weapp-demo/application/controllers/
【案】实践显示,
应该是如下目录:
controllers/
`application/controllers/` 目录包含了示例用到的4个接口路由,
路由和处理文件映射关系如下:
```
// 首页指引
/ => application/controllers/Welcome.php
// 登录
/login => application/controllers/Login.php
// 获取微信用户信息
/user => application/controllers/User.php
其他目录
// 处理信道请求
/tunnel => application/controllers/Tunnel.php
`application/business/ChatTunnelHandler.php` 是业务处理信道请求的示例代码。
`application/helpers/general_helper.php` 包含简单的 `debug` 方法用于打印日志。
案:
4.3.4 composer.json
http://blog.jobbole.com/108885/
Composer是一个非常流行的PHP包依赖管理工具,
https://docs.phpcomposer.com/01-basic-usage.html
基本用法:
小结:
微信小程序腾讯云的目录组织分为两个部分,一个部分是本地的客户端,一个部分是后台的处理程序。
分别在client, 和 server目录下,本文比较详细的说明了大多数的文件和文件夹的意义和用法。
针对server,微信其实主要用的是mvc的CodeIgniter的框架,大多数目录结构也非常一致。所以,可以再找CodeIgniter的说明仔细看一下。
遇到最比较特殊的地方是,服务器的结构和URL的对于关系,这个要分析Demo.php的仔细后,看给出的结果。
发现服务器的URL的接口标准为:
[你的服务器地址/weapp/接口文件名.php]
实际和遇到的问题:
在实践中,Demo给出的和服务器的接口都可以很好的访问,但是,自己开发的接口总是不行,一直怀疑是url的格式不对,仔细查看了CodeIgniter的URL的定义,没有问题。后来发现,原来是PHP的接口文件,
首字母没有大写的原因!!!
这居然导致,接口报错,例如,给出的例子,为Demo.php 而不是 demo.php
appservice?t=1534803450389:1008 GET https://fshmr7vc.qcloud.la/weapp/demo 404 (Not Found)
否则,会报后台php接口文件无法找到的错误。如上,一定要把首字母改成大写,就可以。
具体,后台的访问机制,我会在另外一篇博客里面再分开详细叙述,这里,因为接受文件结构为主,就暂时略过。
参考:
1 路由表是如何建立的?
https://www.cnblogs.com/qingjiaowoxiaoxioashou/p/6505360.html
2 项目配置文件
3 CGI 那点事
一个简洁的说明
https://www.cnblogs.com/f-ck-need-u/p/7627035.html
CGI 是什么玩意
https://blog.csdn.net/JAVA_SanXin/article/details/51496688
一个复杂的说明
https://blog.csdn.net/wangqing008/article/details/50411596
4 微信小程序session管理
https://www.it-man.cn/archives/post-140.html