博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用python一步一步搭建微信公众平台(一)
阅读量:6226 次
发布时间:2019-06-21

本文共 3873 字,大约阅读时间需要 12 分钟。

使用的工具,python 新浪SAE平台,微信的公众平台

你需要先在微信的公众平台与新浪SAE平台上各种注册,微信平台注册的时候需要你拍张手持身份证的照片,还有几天的审核期

微信公众平台:

新浪SAE:

等待微信公众审核通过后,登录公众平台后,点击高级功能。EncodingAESKey随机生成一个即可,将会看到需要提供一个接入信息:

微信接口配置

那么我们需要一个网址作为接口(这时就需要SAE上搭建Python的一个应用),Token呢,就是相当于我们和微信之间约定的“密码”,这里可以随便填写英文或者数字,但实测输入纯数字有时会有问题,所以还是字符串比较靠谱。

第一步,在SAE上搭建python的应用,在下图的应用里选择python应用。

 

填好二级域名和应用名称等,选择好语言。这里我们使用Python开发选择web应用。创建好应用之后,在代码管理SVN中创建一个新的版本。而后我们可以选择编辑代码。能够实现在线编辑,根本用不着配置本地环境,SVN等等。当然像这种轻量级的应用在线编辑器就可以了,SVN的话还不如在线编辑好用

第二步,编写index.wsgi

因为我们使用的是web.py框架,因为其良好的xml解析,想了解web.py的童鞋可以移步 

首先编写config.yaml

 

1
2
3
4
5
6
7
8
9
10
11
name: yangyanxing
version: 
1
 
libraries:
- 
name: webpy 
  
version: 
"0.36"
 
- 
name: lxml
  
version: 
"2.3.4"
 
 

 

注意严格的缩进,差一个空格你就废了!而且调试的时候很不好发现问题。。。 

接着我们继续编写index.wsgi

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# coding: UTF-8
import 
os
 
import 
sae
import 
web
 
from 
weixinInterface 
import 
WeixinInterface
 
urls 
= 
(
'/weixin'
,
'WeixinInterface'
)
 
app_root 
= 
os.path.dirname(__file__)
templates_root 
= 
os.path.join(app_root, 
'templates'
)
render 
= 
web.template.render(templates_root)
 
app 
= 
web.application(urls, 
globals
()).wsgifunc()        
application 
= 
sae.create_wsgi_app(app)

 

简单解释一下,

from weixinInterface import WeixinInterface

 

这里我们需要再创建一个weixinInterface的py文件,你也可以将这个类写在index.wsgi文件中,只是这样看起来会乱乱的

新建一个weixinInterface.py文件,注意大小写,写入以下代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# -*- coding: utf-8 -*-
import 
hashlib
import 
web
import 
lxml
import 
time
import 
os
import 
urllib2,json
from 
lxml 
import 
etree
 
class 
WeixinInterface:
 
    
def 
__init__(
self
):
        
self
.app_root 
= 
os.path.dirname(__file__)
        
self
.templates_root 
= 
os.path.join(
self
.app_root, 
'templates'
)
        
self
.render 
= 
web.template.render(
self
.templates_root)
 
    
def 
GET(
self
):
        
#获取输入参数
        
data 
= 
web.
input
()
        
signature
=
data.signature
        
timestamp
=
data.timestamp
        
nonce
=
data.nonce
        
echostr
=
data.echostr
        
#自己的token
        
token
=
"amilyguo
" 
#这里改写你在微信公众平台里输入的token
        
#字典序排序
        
list
=
[token,timestamp,nonce]
        
list
.sort()
        
sha1
=
hashlib.sha1()
        
map
(sha1.update,
list
)
        
hashcode
=
sha1.hexdigest()
        
#sha1加密算法        
 
        
#如果是来自微信的请求,则回复echostr
        
if 
hashcode 
=
= 
signature:
            
return 
echostr

 

这里定义了一个GET方法,是根据微信公众平台的要求,进行的token验证,因为这里我们定义了templates_root为根目录下的templates,所以还要在根目录下创建一个目录templates的目录

1 开发者通过检验signature对请求进行校验(下面有校验方式)。若确认此次GET请求来自微信服务器,请原样返回echostr参数内容,则接入生效,否则接入失败。
2  
3 signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。
4  
5 加密/校验流程:
6 1. 将token、timestamp、nonce三个参数进行字典序排序
7 2. 将三个参数字符串拼接成一个字符串进行sha1加密
8 3. 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信

因为微信是将验证信息GET发出去的,所以这里使用了GET方法来取得值并且返回相应用值

保存全部,现在回到微信的公众平台高级管理界面,EncodingAESKey随机生成一个即可

在url里面填写你在新浪SAE里应用名称并且加上/weixin,如:http://XXXX.sinaapp.com/weixin token随便输入,只要注意更改weixinInterface.py中的token就行了,EncodingAESKey随机生成一个即可另外消息加密解密方式一定要先选择“兼容模式”(被这个坑了一天),输入好了以后点击提交,如果没有什么问题的话就会通过验证!

 

第三步,新建一个简单的自动回复的方法,鹦鹉学舌,就是用户说什么,它也回复什么,没什么用,只是随便玩玩!

在weixinInterface.py里继续添加代码

1
2
3
4
5
6
7
8
def 
POST(
self
):        
        
str_xml 
= 
web.data() 
#获得post来的数据
        
xml 
= 
etree.fromstring(str_xml)
#进行XML解析
        
content
=
xml.find(
"Content"
).text
#获得用户所输入的内容
        
msgType
=
xml.find(
"MsgType"
).text
        
fromUser
=
xml.find(
"FromUserName"
).text
        
toUser
=
xml.find(
"ToUserName"
).text
        
return 
self
.render.reply_text(fromUser,toUser,
int
(time.time()),u
"您好,我现在还在开发中,还没有什么功能,您刚才说的是:"
+
content)

 

 

这个def 是和上一个GET同级的,注意缩进,先放到编辑器中编辑好格式,再放上来,避免格式问题。

接着我们在templates目录下创建reply_text.xml模板文件,写入以下代码

1
2
3
4
5
6
7
8
$def with (toUser,fromUser,createTime,content)
<
xml
>
<
ToUserName
>
<![CDATA[$toUser]]>
</
ToUserName
>
<
FromUserName
>
<![CDATA[$fromUser]]>
</
FromUserName
>
<
CreateTime
>$createTime</
CreateTime
>
<
MsgType
>
<![CDATA[text]]>
</
MsgType
>
<
Content
>
<![CDATA[$content]]>
</
Content
>
</
xml
>

 

 

注意这里的toUser与fromUser是刚才post的是相反的,因为这里的toUser也就是POST函数里的fromUser,这里的fromUser也就是POST函数里的toUser,msgType是text 

全部保存,现在就在用你的个人微信关注一下你创建的公众微信号,然后随便输入些内容,如果没有什么问题,你将会收到一条鹦鹉学舌的回复内容!

转载于:https://www.cnblogs.com/AmilyWilly/p/5231536.html

你可能感兴趣的文章
结构体初始化
查看>>
java中this的N种使用方法
查看>>
Windows IIS安装php
查看>>
mingw 设置python 设置git环境变量
查看>>
linux 系统下如何进行用户之间的切换
查看>>
设计一个算法移除字符串中的重复字符,并写出测试用例。
查看>>
goole机器学习视频链接【学习笔记】
查看>>
查看django版本的方法
查看>>
kafka channle的应用案例
查看>>
WPF 圆角textbox
查看>>
熊彼特的创新理论:非连续性模型
查看>>
Windows10内置ubuntu子系统安装后中文环境设置
查看>>
Spring Security教程(八):用户认证流程源码详解
查看>>
由浅入深:CNN中卷积层与转置卷积层的关系
查看>>
Solve Error: "errcode": 40016, "errmsg": "invalid button size hint"
查看>>
EF Core Fluent API
查看>>
MAC 设置环境变量path的几种方法
查看>>
JVM垃圾收集器(2)
查看>>
SpringBoot之hello world!
查看>>
Socket拆包和解包
查看>>