Phalcon微信后台开发指北

这是我的一个个人项目,基于Phalcon的mvc应用,拥有后台管理以及api输出的功能,暂时只有修改菜单并输出json的功能(哭)

Phalcon微信后台开发指北

基于Phalcon 4.x ,文档与3.x通用

根据Phalcon 官网教程安装Phaclon
这里是phalcon爱好者翻译的中文文档,内容翻译的也差不多了,如果看不懂官网的英文的话可以在这里学习。

安装好 Phaclon devtool后

1
2
3
$ git clone [email protected]:JackyCZJ/phalcon-Wechat-Order.git
$ cd phalcon-Wechat-Order
$ composer install

这里引用了论坛大佬的autoload代码 如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<?php
//app/config/loader.php

$loader = new \Phalcon\Loader();

$namespace = [

];
/**

- We're a registering a set of directories taken from the configuration file
*/

$map = require $config->application->vendorDir.'composer/autoload_namespaces.php';

foreach ($map as $k => $values) {
$k = trim($k, '\\');
if (!isset($namespaces[$k])) {
$dir = '/' . str_replace('\\', '/', $k) . '/';
$namespaces[$k] = implode($dir . ';', $values) . $dir;
}
}

$loader->registerNamespaces($namespaces);

$classMap = require $config->application->vendorDir . 'composer/autoload_classmap.php';

$loader->registerClasses($classMap);

$loader->registerDirs(
[
$config->application->controllersDir,
$config->application->modelsDir
]
);

$loader->register();

特此感谢

然后找到 app/config/config.php 修改数据库信息

~phalcon migration run #迁移数据库

然后就可以跑起来了

个人觉得微信小程序自动生成的开发环境就是个弟弟,官方完全没有本地调试的doc,全靠自己摸索,要不然就要用官方的云开发环境,而云开发环境只有CI框架和node.js两个选择,完全没想过让开发者自己配置…不过毕竟是免费的,也不能要求太多

导入wafer的数据库cAuth.sql文件

不过我们其实可以把cAuth导入到我们应用的数据库然后再修改wafer2的数据库名,这样就不用弄两个数据库了

我们还要修改wafer2套件里面的config
vendor->qcloud-weapp-sdk->Conf.php
本地调试中我们主要要修改一下几个选项

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
private static $Mysql = [
'host' => 'localhost',
'port' => 3306,
'user' => 'root',
'db' => 'cAuth',
'pass' => '*',
'char' => 'utf8mb4'
];
private static $QcloudAppId = *;

// 腾讯云 QcloudSecretId
private static $QcloudSecretId = '*';

// 腾讯云 QcloudSecretKey
private static $QcloudSecretKey = '*';

// 微信消息通知 token
private static $WxMessageToken = 'weixinmsgtoken';
//这里开始跑题

Phalcon的代码非常的简洁明了,而且组件模块化,当你想要只想创建一个微服务而不是MVC应用的话,可以直接引用micro组件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php

use Phalcon\Mvc\Micro;

$app = new Micro();

$app->get(
"/say/welcome/{name}",
function ($name) {
echo "<h1>Welcome $name!</h1>";
}
);

$app->handle();

就这样我们就创建了一个简单的微服务

要与微信联动,我们就需要用到wafer2的php套件,官方演示是用CI框架,(早知道一开始就用CI写了,哭泣) 个人觉得CI在开发上非常的方便,而且效率高,但是似乎没办法提供micro service?(未验证)但是phalcon是php的c拓展,虽然在跑分上比CI低,但是实际使用上,
CI比起phalcon还是有所不如,而且CI框架的官网….怎么说呢,明明CI4.0已经发布了为啥还在说最新版本为3.1.9..

这里写一下在MVC架构下,weixin的controller写法

MVC架构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
use QCloud_WeApp_SDK\Auth\LoginService as LoginService;
use QCloud_WeApp_SDK\Constants as Constants;
class WeixinController extends \Phalcon\Mvc\Controller
{
//用以处理微信事务的控制器

public function indexAction()
{
die;

}
public function LoginAction() {
$result = LoginService::login(); //引用wafer2套件的登陆
if ($result['loginState'] === Constants::S_AUTH) {
return $this->response->setJsonContent([
'code' => 0,
'data' => $result['userinfo'] //返回用户信息
]);
} else {
return $this->response->setJsonContent([
'code' => -1,
'error' => $result['error'] //返回登陆错误信息
]);
}
}
public function UserAction() {
$result = LoginService::check(); //引用wafer2的确认方法

if ($result['loginState'] === Constants::S_AUTH) {
return $this->response->setJsonContent([
'code' => 0,
'data' => $result['userinfo'] //根据数据库中存储的登录状态判断用户是否登陆过,嘤嘤嘤
]);
} else {
return $this->response->setJsonContent([
'code' => -1,
'data' => []
]);
}
}
}

Micro Services

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
<?php

use Phalcon\Mvc\Micro;
use QCloud_WeApp_SDK\Auth\LoginService as LoginService;
use QCloud_WeApp_SDK\Constants as Constants;

$app = new Micro();

$app->get(
"/Login",
function () {
$result = LoginService::login(); //引用wafer2套件的登陆



if ($result['loginState'] === Constants::S_AUTH) {
return $this->response->setJsonContent([
'code' => 0,
'data' => $result['userinfo'] //返回用户信息
]);
} else {
return $this->response->setJsonContent([
'code' => -1,
'error' => $result['error'] //返回登陆错误信息
]);
}
}


);
$app->get(
"/User",
function () {
$result = LoginService::check(); //引用wafer2的确认方法


if ($result['loginState'] === Constants::S_AUTH) {
return $this->response->setJsonContent([
'code' => 0,
'data' => $result['userinfo'] //根据数据库中存储的登录状态判断用户是否登陆过,嘤嘤嘤
]);
} else {
return $this->response->setJsonContent([
'code' => -1,
'data' => []
]);
}
}


);

$app->handle();
?>

然后在小程序内配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/**

- 小程序配置文件
*/
var host = 'http://localhost'; // 此处主机域名修改成腾讯云解决方案分配的域名

var config = {
service: {
host,

// 登录地址,用于建立会话
loginUrl: `${host}/login`,

// 测试的请求地址,用于测试会话
requestUrl: `${host}/user`,
}
};
module.exports = config;

这样子就能愉快的在本地小程序开发了

顺便一提,最好在nts版本的php7.2.8以及加载了mod_cgi的apache或者开启php-fpm的Nginx服务器上跑,不然的话在进行Ajax操作时整个框架会发生崩溃。