【中级】 微信小程序 - 腾讯云 - wafer2 - PHP - DEMO - 003 - 源码分析 - 01 - 文件组成详细分析

1 前言:

本文原创,欢迎转载,但是,务必保持原文并且给出原文链接。

微信小程序 - 腾讯云 - PHP - DEMO 是微信提供的一个微信小程序和腾讯云小程序云服务wafer 进行接口的例子。

本仓库是最简版的 Wafer2 开发套件,建议配合腾讯云微信小程序开发者工具解决方案一起使用。适用于想要使用 Wafer SDK 开发的开发者,Demo 对 SDK 进行了详细的使用和介绍,降低开发者的学习成本。

2 界面:

该DEMO的界面如下:

 

 3 路由配置:

软件里面给出了一个README.txt的说明文件:给出了如何设置环境的说明。参考我的另一个基础的博文。

前端和后端的路由设置,在微信小程序的代码上传到对应的腾讯云的时候,腾讯云小程序会自动设定好路由,你只需要安装说明里面做好小程序开发端的几个基本设置就好了。

  1. 上传代码完成之后,点击右上角的【详情】按钮,接着选择【腾讯云状态】即可看到腾讯云自动分配给你的开发环境域名。

 

  1. 查看开发域名

 

  1. 完整复制(包括 https://)开发环境 request 域名,然后在编辑器中打开 client/config.js 文件,将复制的域名填入 host 中并保存,保存之后编辑器会自动编译小程序,左边的模拟器窗口即可实时显示出客户端的 Demo。

  1. 修改客户端配置


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 子句可以在几个级别上指定,包括以下级别:

  1. 创建或更改数据库。

    可以使用 CREATE DATABASE 或 ALTER DATABASE 语句的 COLLATE 子句指定数据库的默认排序规则。还可在创建数据库时使用 SQL Server 企业管理器指定排序规则。如果不指定排序规则,则将为数据库指派 SQL Server 实例的默认排序规则。

  2. 创建或更改表列。

    可以使用 CREATE TABLE 或 ALTER TABLE 语句的 COLLATE 子句指定每个字符串列的排序规则。还可在创建表时使用 SQL Server 企业管理器指定排序规则。如果不指定排序规则,将为列指派数据库的默认排序规则。

    还可使用 COLLATE 子句中的 database_default 选项,指定临时表中的列使用连接的当前用户数据库(而不是 tempdb)的默认排序规则。

  3. 投影表达式的排序规则。

    可以使用 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接口文件无法找到的错误。如上,一定要把首字母改成大写,就可以。


具体,后台的访问机制,我会在另外一篇博客里面再分开详细叙述,这里,因为接受文件结构为主,就暂时略过。


参考:

路由表是如何建立的?

https://www.cnblogs.com/qingjiaowoxiaoxioashou/p/6505360.html

2 项目配置文件

https://developers.weixin.qq.com/miniprogram/en/dev/devtools/projectconfig.html?search-key=miniprogramRoot

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

 

 

 

 

 

 

 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Franklin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值