收藏
评论

Wafer2 自行部署到 Wafer 解决方案,后端 PHP


在腾讯云的微信小程序-开发者工具方案中,开发环境和生产环境均为 wafer2 解决方案,且均为自动部署,当你已经在开发环境和生产环境都开发好并完成调试之后,又开通了 wafer 解决方案,那么问题来了,如何把开发者工具方案迁移到 wafer 解决方案?


问题1:

在开通 wafer 解决方案的时候,腾讯云已经做了初始化工作,有 client 和 server 端的 demo,但是 demo 均为 wafer1,如果 client 不变,使用之前调试好的开发者工具方案的代码,把 server 的代码上传覆盖至业务服务器的 /data/release/php-weapp-demo , 然后 client 请求 server 接口,会报错: SDK 配置文件(data/release/sdk.config.json)不存在。

解决办法:将 /etc/qcloud/sdk.config 复制过来

[业务服务器]

cp /etc/qcloud/sdk.config /data/release/sdk.config.json


问题2:

配置文件 qcloud 配置信息缺失

解决办法:编辑 config.php 配置文件,增加 qcloud 相关配置

[业务服务器]

vim /data/release/php-weapp-demo/config.php


/**
* Wafer php demo 配置文件
*/
$config = [
   'rootPath' => '',
   // 微信小程序 AppID
   'appId' => '',
   // 微信小程序 AppSecret
   'appSecret' => '',
   // 使用腾讯云代理登录
   'useQcloudLogin' => true,
   /**
    * 这里请填写云数据库的
    */
   'mysql' => [
       'host' => '云数据库内网IP',
       'port' => 3306,
       'user' => 'root',
       'db'   => 'cAuth',
       'pass' => '云数据库密码',
       'char' => 'utf8mb4'
   ],
   'cos' => [
       /**
        * 区域
        * 上海:cn-east
        * 广州:cn-sorth
        * 北京:cn-north
        * 广州二区:cn-south-2
        * 成都:cn-southwest
        * 新加坡:sg
        * @see https://cloud.tencent.com/document/product/436/6224
        */
       'region' => 'cn-sorth',
       // Bucket 名称
       'fileBucket' => 'wafer',
       // 文件夹
       'uploadFolder' => ''
   ],
   // 微信登录态有效期
   'wxLoginExpires' => 7200,
   'wxMessageToken' => 'abcdefgh',
   // 其他配置 这个配置已经在 /data/release/sdk.config.json 中有了
   //'serverHost' => 'wx.wafersolution.com',
   //'tunnelServerUrl' => 'http://tunnel.ws.qcloud.la',
   //'tunnelSignatureKey' => '27fb7d1c161b7ca52d73cce0f1d833f9f5b5ec89',
   // 腾讯云相关配置可以查看云 API 秘钥控制台:https://console.cloud.tencent.com/capi
   'qcloudAppId' => 1200000000,// 必须是数字
   'qcloudSecretId' => '你的腾讯云 SecretId',
   'qcloudSecretKey' => '你的腾讯云 SecretKey',

   //'networkTimeout' => 30000  //这个配置已经在 /data/release/sdk.config.json 中有了



问题3:

小程序客户端登录报错,鉴权服务调用失败:1007-WEIXIN_RETURN_ERR

解决办法:删除 Auth.php 第50行 的  isset($json_message['expires_in']

[会话服务器] 注意要登录到会话服务器修改

vim /opt/lampp/htdocs/mina_auth/application/controllers/qcloud/minaauth/Auth.php

文件第50行修改为:

if (isset($json_message['openid']) && isset($json_message['session_key'])) {


问题4:

Fatal error: Class 'PDO' not found

解决办法:Wafer2 数据库操作采用 PDO,业务服务器 PHP 环境可能不支持,需要重装一下

[业务服务器]

wget 'https://mirrors.tuna.tsinghua.edu.cn/remi/enterprise/remi.repo' -O /etc/yum.repos.d/remi.repo
yum install --enablerepo=remi --enablerepo=remi-php56 php php-mbstring php-mcrypt php-mysql php-curl php-fpm php-simplexml


注意最后面的 php-simplexml,可以解决: Call to undefined function: simplexml_load_string()

要确保 SimpleXML 已经加载,相关函数用于微信支付接口,如果你的小程序涉及到微信支付的话


[业务服务器]

# php -m
[PHP Modules]
bz2
calendar
Core
SimpleXML



参考文档:

https://cloud.tencent.com/document/product/619/12797

https://developers.weixin.qq.com/blogdetail?action=get_post_info&lang=zh_CN&token=&docid=06c9c398b0c9be2c233bb3acc0dbe2f4

最后一次编辑于  2018-01-23
赞 0
收藏

3 个评论

  • 补桓🤗
    补桓🤗
    2018-01-24

    信道服务地址填写正确的情况下,如果信道服务连不上报错:(其中错误如下)

    <p>Severity: Warning</p>
    <p>Message:  file_put_contents(/data/release/php-weapp-demo/application/business/chat_data.json): failed to open stream: Permission denied</p>
    <p>Filename: business/ChatTunnelHandler.php</p>
    <p>Line Number: 187</p>

    那么请给与当前项目目录777权限

    chmod -R 777 文件夹


    2018-01-24
    赞同
    回复
  • 补桓🤗
    补桓🤗
    2018-01-24

    关于问题4,我碰到的错误是  Class 'SimpleXMLElement' not found   处理的方法是相同的

    2018-01-24
    赞同
    回复
  • 补桓🤗
    补桓🤗
    2018-01-24

    如果wafer2代码本地服务器部署之后  发现 (云数据库) 连接失败.

    请按以下方法操作:

    云数据库安全组配置只能设置限制来源IP,不能设置成0.0.0.0/0, 端口和协议必须设置为ALL

    2018-01-24
    赞同
    回复