Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

自行部署 Wafer 的一点心得 #8

Open
ITJaye opened this issue Jan 12, 2017 · 17 comments
Open

自行部署 Wafer 的一点心得 #8

ITJaye opened this issue Jan 12, 2017 · 17 comments

Comments

@ITJaye
Copy link

ITJaye commented Jan 12, 2017

自行部署 Wafer 的一点心得

最近以官方的demo为例配置部署wafer,实现了小程序的授权登陆、获取用户信息以及小程序websocket聊天室功能。这个过程中踩了几个小坑,特分享出来,让大家少碰壁。自行部署前最好是要弄明白wafer的业务流程,需要准备相应的服务器环境、所需的代码,以及清楚明白你需要配置什么。

一、准备工作

  • 服务器:服务器环境centOS 6.8 + php7 + nginx/1.9.10

  • wafer SDK代码,以官方demo为例 下载

  • 提供会话服务的代码 下载

  • 客户端小程序demo代码 下载

二、配置文件

1. 配置以支持https访问

如何配置免费的https,自行百度

2. 配置wafer的SDK配置文件sdk.config

新建个文本文件粘贴如下代码:

{
    "serverHost": "www.xx.com",
    "authServerUrl": "http://www.xx.com/itjaye/wafer-session-server/",
    "tunnelServerUrl": "https://ws.qcloud.com",
    "tunnelSignatureKey": "xxxxxx",
    "networkTimeout": 30000
}
  • serverHost 你的业务服务器的域名,上面部署wafer SDK代码
  • authServerUrl 会话服务地址,登陆授权会用到。上面部署会话服务的代码
  • tunnelServerUrl 这个是信道服务器地址,不需要部署,直接使用腾讯提供的信道服务器地址https://ws.qcloud.com
  • tunnelSignatureKey 修改成自己的签名秘钥,随便自己定义一个就行

将文件保存为sdk.config并上传到/etc/qcloud/sdk.config (需要在/etc/下面自己创建下qcloud这个目录)

3. 配置会话服务调用的数据库连接配置文

上线前需要在服务器如下配置

a.在数据库中创建cAuth数据库并导入根目录下的mina_auth/db.sql

b.修改wafer-session-server/system/db/db.ini代码

[db]
host = 数据库服务器IP
port = 3306
user_name = 用户名
pass_wd = 密码
data_base = cAuth

4. 配置小程序管理平台

登陆微信小程序管理平台https://mp.weixin.qq.com/ 在 『设置』-『开发设置』 里添加如下url

wss://ws.qcloud.com、https://ws.qcloud.com

5. 配置客户端代码

修改下客户端demo中的/config.js的host为你的业务服务器上wafer SDK地址

var host = 'www.xx.com/itjaye/wafer-php-server-demo';

6. 配置wafer-php-server-demo

针对 wafer-php-server-demo代码,记得先在该文件夹下执行composer install操作来安装wafer SDK

需要分配配置下SDK本身所采用的CI框架来支持伪静态,隐藏index.php

修改代码中application/config/config.php里的配置
修改26行为

    $config['base_url'] = 'https://www.xx.com/itjaye/wafer';

修改38行为

    $config['index_page'] = '';

同时,在Nginx服务器的配置文件中增加如下设置以支持ci框架的伪静态

location /itjaye/wafer/ {
			index  index.html index.php;
			if (!-e $request_filename) {
				rewrite  ^(.*)$  /tjaye/wafer/index.php?s=$1  last;
				break;
			}
        }

三、上传代码

在服务器上web根目录下创建一个文件夹,我的文件夹名为itjaye,把上面wafer-php-server-demo文件夹和wafer-session-server文件夹上传到该文件夹下即可。

四、其他问题

针对会话服务由于是php7 需要如下修改,

  • mysql 的函数换成mysqli支持,修改方法可以参考

  • 采用function __construct 构造函数来替换和类名相同的函数名

五、参考资料

https://github.com/tencentyun/wafer/wiki

有疑问的可以加官方qq群交流 216602757

@ITJaye ITJaye changed the title 自行部署的wafer php demo的一点心得 自行部署wafer的一点心得 Jan 14, 2017
@xiaoyun94
Copy link

这个大佬在sdk.config里面对tunnelserver是对的,官方默认设置是有问题的
正确的是
"tunnelServerUrl": "https://ws.qcloud.com",
官方的是
"tunnelServerUrl": "https://ws.qcloud.com/",
自己好好体会一下吧

@techird
Copy link
Contributor

techird commented Mar 13, 2017

@xiaoyun94 谢谢提醒,Wiki 已经更正过来了

@techird techird changed the title 自行部署wafer的一点心得 自行部署 Wafer 的一点心得 Mar 13, 2017
@techird
Copy link
Contributor

techird commented Mar 13, 2017

感谢 @ITJaye ,真是干货资料

@edwardguo
Copy link

edwardguo commented Mar 27, 2017

@techird @ITJaye 请问这是什么原因引起的呢?
调用鉴权服务失败:#1012 - NO_APPID
default
我的小程序未认证,是这个原因引起的吗?

@dedecom
Copy link

dedecom commented Apr 1, 2017

dlin8600_1491026705234_18
腾讯云服务内存持久化存储(CMEM)CMEM服务介绍
要购买cmem才行咯,云缓存Memcached

@wynsto
Copy link

wynsto commented Apr 2, 2017

费劲啊。。。中间搞个授权服务器也是醉了

@dedecom
Copy link

dedecom commented Apr 5, 2017

@ITJaye 看看我上面的问题怎么解决

@hdwmp123
Copy link

这个是不是已经过期了?现在2017-4-18 23:07:00,我刚部署了一套,发现代码和楼主说的不一样

@BEIBEI123
Copy link

很奇怪,长链接为什么不用wss,而是用https

@owendswang
Copy link

唉……基础比较差……高了两天,没搞出来……唉……

@yujianchi
Copy link

@edwardguo 同样的问题。请问你的已经解决掉了吗?

@huangyuan
Copy link

huangyuan commented Aug 29, 2017

@aimin
Copy link

aimin commented Sep 18, 2017

我的为什么总,签名错误吗? 求大神帮助,指教!
{
"serverHost": "1111.qcloud.la",
"authServerUrl": "http://192.168.1.101:8002/mina_auth",
"tunnelServerUrl": "https://ws.qcloud.com",
"tunnelSignatureKey": "ddddd ",
"networkTimeout": 30000
}

报错如下:

A PHP Error was encountered

Severity: Notice

Message: Undefined index: signature

Filename: Tunnel/TunnelService.php

Line Number: 94

<p>Backtrace:</p>

	

	

	
		<p style="margin-left:10px">
		File: /home/songaimin/www/cs-server/vendor/qcloud/weapp-sdk/lib/Tunnel/TunnelService.php<br />
		Line: 94<br />
		Function: _error_handler			</p>

	

	
		<p style="margin-left:10px">
		File: /home/songaimin/www/cs-server/vendor/qcloud/weapp-sdk/lib/Tunnel/TunnelService.php<br />
		Line: 17<br />
		Function: handleGet			</p>

	

	
		<p style="margin-left:10px">
		File: /home/songaimin/www/cs-server/application/controllers/Tunnel.php<br />
		Line: 11<br />
		Function: handle			</p>

	

	

	
		<p style="margin-left:10px">
		File: /home/songaimin/www/cs-server/index.php<br />
		Line: 328<br />
		Function: require_once			</p>

	

	
		<p style="margin-left:10px">
		File: /home/songaimin/www/cs-server/webServer.php<br />
		Line: 17<br />
		Function: require_once			</p>

A PHP Error was encountered

Severity: Notice

Message: Array to string conversion

Filename: Tunnel/Signature.php

Line Number: 11

<p>Backtrace:</p>

	

	

	
		<p style="margin-left:10px">
		File: /home/songaimin/www/cs-server/vendor/qcloud/weapp-sdk/lib/Tunnel/Signature.php<br />
		Line: 11<br />
		Function: _error_handler			</p>

	

	
		<p style="margin-left:10px">
		File: /home/songaimin/www/cs-server/vendor/qcloud/weapp-sdk/lib/Tunnel/Signature.php<br />
		Line: 23<br />
		Function: compute			</p>

	

	
		<p style="margin-left:10px">
		File: /home/songaimin/www/cs-server/vendor/qcloud/weapp-sdk/lib/Tunnel/TunnelService.php<br />
		Line: 97<br />
		Function: check			</p>

	

	
		<p style="margin-left:10px">
		File: /home/songaimin/www/cs-server/vendor/qcloud/weapp-sdk/lib/Tunnel/TunnelService.php<br />
		Line: 17<br />
		Function: handleGet			</p>

	

	
		<p style="margin-left:10px">
		File: /home/songaimin/www/cs-server/application/controllers/Tunnel.php<br />
		Line: 11<br />
		Function: handle			</p>

	

	

	
		<p style="margin-left:10px">
		File: /home/songaimin/www/cs-server/index.php<br />
		Line: 328<br />
		Function: require_once			</p>

	

	
		<p style="margin-left:10px">
		File: /home/songaimin/www/cs-server/webServer.php<br />
		Line: 17<br />
		Function: require_once			</p>
{"error":"签名校验失败"}

@zhaodifangsi
Copy link

{"error":"签名校验失败"}可以绕过,但是还是无法发送信息。
TunnelService.php 95行,加判定绕过,代码如下:
if (@$body['signature']) {
$signature = $body['signature'];

            // 校验签名
            if (!Signature::check($data, $signature)) {
                throw new Exception('签名校验失败');
            }

            $data = json_decode($data, TRUE);
        }

@xiaoyun94
Copy link

xiaoyun94 commented Oct 12, 2017

@zhaodifangsi 如果你用的免费开放版,免费版本缺少签名参数,并且发送的格式有问题,比如发送的是JSON OBJECT但实际应该是JSON STRING。我这里有一个信道服务器DEMO, 不过是JAVA的,爱折腾可以看看

@ProfessorC
Copy link

appid 都不用设置吗?

@khs1994
Copy link

khs1994 commented Nov 10, 2017

最新版变动较大,正在尝试中

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests