微信公衆號開發——服務器配置及token驗證

[前言]:因爲自己第一次配置開發者模式是2015年底,當時是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 /tmp
wget https://www.python.org/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.7
make
make 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 libxml2
yum install libxslt
yum install lxml python

(4)編輯代碼,如果不懂python 語法,請到python官方文檔查詢說明。

vim main.py

點擊“i”,進入編輯模式,輸入以下代碼:

# -*- coding: utf-8 -*-
# filename: main.py
import web

urls = (
    '/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,

參考阿里雲官方文檔

https://help.aliyun.com/document_detail/50774.html?spm=5176.doc52954.6.722.t92kLG

完成LAMP的部署;

6、修改index.php

代碼參考官方文檔:https://mp.weixin.qq.com/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白名單中。

三、服務器配置

填寫完畢後,提交即可完成服務器配置的啓用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章