微信小程序开发总结
简介
学习微信小程序开发中遇到问题,总结一下。
模板消息遇到的问题
- 区分ID和template_id, id是所有小程序都可以使用的,是”模板库”里面的ID, template_id 是我的模板中的ID, template_id 是发模板消息时需要使用的。
- 请求POST接口时, request body需要是json字符串, 比如PHP语言,需要这样设置request body
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data))
data是由请求参数组成的数组, 比如:/cgi-bin/wxopen/template/library/list 这个接口,要是request_body 格式不对, 会返回system error hint:xxxx
的错误信息, post请求的抓包数据如下:
POST /cgi-bin/wxopen/template/library/list?access_token=ZAnYXewHQFzsAlOwGsAgB4AIAhHnW9y-2B7EghTvvdIokI8JZtosZ-MieDNwzYdM_Sc4lNq4EJ9AOkcRTZ0PXOHg2MQlD5w7B4V__4LChI1_1qJPTlyXz-V1oplIjuK_UIVcABAAOB HTTP/1.1
Host: api.weixin.qq.com
Accept: */*
Content-Length: 22
Content-Type: application/x-www-form-urlencoded
{"offset":0,"count":3}HTTP/1.1 200 OK
Connection: keep-alive
Content-Type: application/json; encoding=utf-8
Date: Sat, 16 Sep 2017 15:19:33 GMT
Content-Length: 183
{"errcode":0,"errmsg":"ok","list":[{"id":"AT0002","title":".................."},{"id":"AT0003","title":".................."},{"id":"AT0004","title":"............"}],"total_count":880}
鉴权服务搭建,
github: https://github.com/tencentyun/wafer-session-server
会话服务来实现cookie的功能, 需要创建存储appid以及用户session信息的表,并导入appid和secret记录, 并且需要检查system/db/db.ini文件中db访问的配置
鉴权服务和小程序后端服务的nginx配置
server {
listen 80;
rewrite_log on;
access_log /Users/huyongde/Desktop/wxapplet/wafer-demo/logs/access.log ;
error_log /Users/huyongde/Desktop/wxapplet/wafer-demo/logs/error.log debug;
root /Users/huyongde/Desktop/wxapplet;
location ^~ /wafer-demo {
root /Users/huyongde/Desktop/wxapplet/wafer-demo;
rewrite ^/wafer-demo/(.*)$ /index.php/$1 break;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi.conf;
}
location ^~ /wafer-session-server {
rewrite ^/wafer-session-server(.*)$ /wafer-session-server/index.php/$1 break;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi.conf;
}
}
对应的代码目录是:
▾ wxapplet/
▸ demo/
▸ server/
▸ wafer-client-demo/
▸ wafer-demo/
▸ wafer-session-server/
其中wafer-demo对应的是wafer-php-server-demo的代码
wafer-session-server是会话服务的代码
### wafer-demo(小程序后端) 代码修改:
application/config/routes.php
文件最后一行加一个路由设置
$route['wafer-demo/(.*)'] = '$1';
配合nginx的conf来实现ci框架的自动路由
### 配置sdk.config, 配置小程序后端用到的各项服务:
wafer-demo 目录下创建sdk.config
文件,并且修改wafer-demo/wafer-demo/install_qcloud_sdk.php
文件中的sdkConfig变量 $sdkConfig='./sdk.config
sdk.config文件内容为:
{
"serverHost": "127.0.0.1",
"authServerUrl": "http://127.0.0.1/wafer-session-server/",
"tunnelServerUrl": "https://ws.qcloud.com",
"tunnelSignatureKey": "key",
"networkTimeout": 6000
}
其中authServerUrl 是会话的鉴权服务 tunnelServerUrl是websockets的信道服务, 使用腾讯云提供的就可以
如上改动之后的小程序相关代码, 记录在了 https://github.com/huyongde/wx 的
minapp
中,server 中的代码是小程序API相关的, wafer开头的目录是搭建小程序官方demo使用的。
#### 问题
- FastCGI sent in stderr: “Primary script unknown” while reading response header from upstream, 解决方法:用普通账户运行php-fpm, 不用root账户, 也不用sudo php-fpm
小程序信道服务
wafer-demo/vendor/qcloud/weapp-sdk/lib/Tunnel/TunnelService.php
修改此处签名教研部分的代码后才跑通信道测试。
如上内容仅供参考,如有问题欢迎交流。