搭建微信公众号

一、在官网申请账号

申请官网
注意:一个邮箱、一个身份证只能注册一个。

二、安装运行 python 测试

  1. 一般 python 在服务器上都是预装好的。
  2. 安装 web 包
sudo python -m pip install web.py 
  1. 编写服务器 python 代码
# -*- coding: utf-8 -*-
# filename: main.py
import web
from handle import Handle

urls = (
    '/wx', 'Handle',
)

if __name__ == '__main__':
    app = web.application(urls, globals())
    app.run()
  1. 运行服务器 web 程序
sudo python main.py 80
  1. 浏览器 web 访问


    浏览器web访问

三、服务器代码运行

  1. 重写main函数如下:
# -*- coding: utf-8 -*-
# filename: main.py
import web
from handle import Handle

urls = (
    '/wx', 'Handle',
)

if __name__ == '__main__':
    app = web.application(urls, globals())
    app.run()
  1. 写服务处理函数 handle.py
    其实如果只是想通过校正的话,返回data.echostr即可,中间token的hash只是为了验证确实微信发出
# -*- coding: utf-8 -*-
# filename: handle.py

import hashlib
import web

class Handle(object):
    def GET(self):
        try:
            data = web.input()
            if len(data) == 0:
                return "hello, this is handle view"
            signature = data.signature
            timestamp = data.timestamp
            nonce = data.nonce
            echostr = data.echostr
            token = "hello2021" #请按照公众平台官网\基本配置中信息填写

            list = [token, timestamp, nonce]
            list.sort()
            sha1 = hashlib.sha1()
            sha1.update("".join(list).encode('utf-8'))
            hashcode = sha1.hexdigest()
            print("handle/GET func: hashcode, signature: ", hashcode, signature)
            if hashcode == signature:
                return echostr
            else:
                return ""
        except Exception as Argument:
            return Argument
  1. 运行
sudo python main.py 80

微信网页的基本配置中,点击提交。验证成功。

四、日志分析

日志来源:C语言搭的服务器,把收发的消息全打出来了。
1.微信验证服务器时,微信通过socket发给服务器的信息,其中signature、echostr等的信息隐去。

GET /wx?signature=******&echostr=******×tamp=1626511955&nonce=1219627732 HTTP/1.0
User-Agent: Mozilla/4.0
Host: 1.13.14.226
Accept: */*
Pragma:no-cache

// 以两个\r\n\r\n结尾
  1. 微信验证服务器时,服务器通过socket给微信回的信息,其中echostr等的信息隐去,13是echostr的长度。
HTTP/1.1 200 OK
Transfer-Encoding: chunked
Date: Sat, 17 Jul 2021 16:52:35 GMT
Server: localhost

13
******
0

// 以两个\r\n\r\n结尾

3、当用户向微信公众号发送 “你好” 时,微信给服务器发过来的消息是:

POST /wx?signature=******×tamp=1626513248&nonce=1982032182&openid=****** HTTP/1.1
User-Agent: Mozilla/4.0
Accept: */*
Host: 1.13.14.226
Pragma: no-cache
Content-Length: 277
Content-Type: text/xml

// 以两个\r\n\r\n结尾,然后接着POST的内容。读取长度: Content-Length 。


1626513248


23286067514628707

4、服务器向微信回的消息。

HTTP/1.1 200 OK
Transfer-Encoding: chunked
Date: Sat, 17 Jul 2021 17:14:08 GMT
Server: localhost

// 以两个\r\n\r\n 隔开
101
1626513248

0

// 以两个\r\n\r\n结尾

你可能感兴趣的:(搭建微信公众号)