[前言]:因为自己第一次配置开发者模式是底,当时是SAE的应用,现在申请了一个阿里云的服务器,根据官方文档尝试一晚上无果,自己又找资料成功完成启用微信公众号后台开发者模式的服务器设置。
一、前提
1、购买一台云服务器
必须要有公网IP,可以没有域名,我选择安装的是CentOS 7.5的系统。(这里我是用的最后一个月的学生优惠9.9买了台阿里云玩玩);
2、配置安全组
添加一条可以访问80端口的安全规则。
3、远程连接
(1)在阿里云的管理平台上直接登入
用户名默认root
密码是购买的时候设置的用户密码,忘记的话可以在控制台重置密码。
(2)使用Xshell、SecureCRT、Putty等软件远程登入
这里推荐使用Xshell,用户名密码同上。
4、搭建服务
以下是远程登入后,在命令行中操作。全部在命令行中操作完成的。
(1)安装python2.7以上版本
CentOS7.2自带python2.7.5,readline-devel 如果没有安装的话,会造成进入python解释器上下左右回退键都输入不正常。
yum install -y readline-devel
如果缺少openssl-devel的话,访问https会无法工作。
yum install -y openssl-devel
下载
cd /tmpwget /ftp/python/2.7.12/Python-2.7.12.tar.xz
解压缩
tar -xJvf Python-2.7.12.tar.xz
编译
cd Python-2.7.12/./configure --prefix=/usr/local/python2.7makemake install
链接
ln -s /usr/local/python2.7/bin/python2.7 /usr/local/bin/python
由于系统自带的python路径是/usr/bin/python。PATH中,/usr/local/bin比/usr/bin靠前,所以当你输入python,系统会自动启动你安装的python2.7.12。
echo $PATH/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
在python脚本中,你可以使用env来搜寻python
#!/bin/env python
这样,CentOS7.2调用的也是你安装的2.7.12。好处是当你在别的环境里运行,不需要改第一行也能执行。当然你也可以使用绝对路径:
#!/usr/local/bin/python
这样当在别的环境中执行,你需要用sed把第一行的路径替换下。
(2)安装web.py
先安装 easy install:
yum install python-setuptools
安装完成,输入:
easy_install web.py
(3)安装libxml2, libxslt, lxml python
yum install libxml2yum install libxsltyum install lxml python
(4)编辑代码,如果不懂python 语法,请到python官方文档查询说明。
vim main.py
点击“i”,进入编辑模式,输入以下代码:
# -*- coding: utf-8 -*-# filename: main.pyimport weburls = ('/wx', 'Handle',)class Handle(object):def GET(self):return "hello, this is a test"if __name__ == '__main__':app = web.application(urls, globals())app.run()
点击“ESC”,退出编辑模式,输入“:wq”,退出编辑器并保存。
(5)开启服务
如果出现“socket.error: No socket could be created“错误信息,可能为80端口号被占用,可能是没有权限,请自行查询解决办法。如果遇见其他错误信息,请到web.py官方文档,学习webpy 框架3执行命令:
sudo python main.py 80
(6)测试
在浏览器输入http://外网IP:80/wx,可以看到类似于如下的页面:
这表明一个简单的web应用已搭建完成。
5、部署LAMP
即Linux+Apache+MySQL/MariaDB+Perl/PHP/Python,
参考阿里云官方文档:
/document_detail/50774.html?spm=5176.doc52954.6.722.t92kLG
完成LAMP的部署;
6、修改index.php
代码参考官方文档:https://mp./wiki?t=resource/res_main&id=mp1421135319
如下:
<?php /** * wechat php test */ //define your token define("TOKEN", "weixin"); $wechatObj = new wechatCallbackapiTest(); $wechatObj->valid(); class wechatCallbackapiTest { public function valid() { $echoStr = $_GET["echostr"]; //valid signature , option if($this->checkSignature()){ echo $echoStr; exit; } } public function responseMsg() { //get post data, May be due to the different environments $postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; //extract post data if (!empty($postStr)){ $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA); $fromUsername = $postObj->FromUserName; $toUsername = $postObj->ToUserName; $keyword = trim($postObj->Content); $time = time(); $textTpl = "<xml> <ToUserName><![CDATA[%s]]></ToUserName> <FromUserName><![CDATA[%s]]></FromUserName> <CreateTime>%s</CreateTime> <MsgType><![CDATA[%s]]></MsgType> <Content><![CDATA[%s]]></Content> <FuncFlag>0</FuncFlag> </xml>"; if(!empty( $keyword )) { $msgType = "text"; $contentStr = "Welcome to wechat world!"; $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr); echo $resultStr; }else{ echo "Input something..."; } }else { echo ""; exit; } } private function checkSignature() { $signature = $_GET["signature"]; $timestamp = $_GET["timestamp"]; $nonce = $_GET["nonce"]; $token = TOKEN; $tmpArr = array($token, $timestamp, $nonce); sort($tmpArr); $tmpStr = implode( $tmpArr ); $tmpStr = sha1( $tmpStr ); if( $tmpStr == $signature ){ return true; }else{ return false; } } } ?>
其中:
define("TOKEN", "weixin");
第7行是用户定义的“token”,需要与下面将会提及的令牌(Token)相同。
安装Linux/Unix同Windows进行ZModem文件传输的命令行工具:
yum install lrzsz
完成后在命令行中输入“rz”,选择本地文件并上传。
想要删除文件输入:
rm -f 文件名
从服务器下载文件的命令是:
sz 文件名
我在使用putty的时候rz一直无法完成上传,换用Xshell顺利解决。
二、公众号开发信息
1、启用开发者密码(AppSecret)
直接扫码完成验证,开启后保存好密码即可。
2、IP白名单
将自己的云服务器的公网IP地址添加到IP白名单中。三、服务器配置
填写完毕后,提交即可完成服务器配置的启用。