树莓派与微信公众号对接(python)
二 树莓派对接微信
需要安装webpy和python-lxml
git clonegit://github.com/webpy/webpy.git ln -s `pwd`/webpy/web cd /root/webpy sudo python setup.py install sudo apt-get install python-lxml
下载微信模板
git clone https://github.com/mcdona1d/Wechat-Python-Template.git
index.python
#!/usr/bin/env python
# -*- coding: utf- -*-
import os
import web
import time
import hashlib
from lxml import etree
urls = (
'/weixin','WeixinInterface'
)
def _check_hash(data):
#sha1加密算法
signature=data.signature
timestamp=data.timestamp
nonce=data.nonce
#自己的token
token="your_token" #这里改写你在微信公众平台里输入的token
#字典序排序
list=[token,timestamp,nonce]
list.sort()
sha1=hashlib.sha1()
map(sha1.update,list)
hashcode=sha1.hexdigest()
#如果是来自微信的请求,则回复True
if hashcode == signature:
return True
return False
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()
if _check_hash(data):
return data.echostr
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)
application = web.application(urls, globals())
if __name__ == "__main__":
application.run()
reply_text.xml
$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>
将此文件夹放到树莓派中,更改index.py中的your_token为你的token
在文件夹目录内,输入命令执行:sudo python index.py 80
80为绑定到80端口上,微信公众平台目前仅支持80端口
Ps:如果无法执行,可能需要更改文件权限:chmod +x index.py
打开微信公众号官网:https://mp.weixin.qq.com

依次选择 开发者工具-》公众平台测试账号

程序执行后,在微信公众平台的接口配置界面分别输入你的ip或者域名及token:
http://你的ip或域名/weixin
然后输入刚才配置程序时更改的自己的token
点击提交,提示配置成功。
在微信上对此公众平台测试号发送消息,微信可以返回你发送的消息。
配置自定义菜单
打开微信公众平台-》在线接口调试工具

首先获取access_token

填写appid和secret,即可获取access_token,复制备用
生成自定义菜单,access_token填入刚才生成的,body内容为菜单项menu

menu示例:
{
"button": [
{
"name": "监控",
"sub_button": [
{
"type": "click",
"name": "实况截图",
"key": "V1001_SNAPSHOT"
},
{
"type": "view",
"name": "实时监控",
"url": "http://raspberrypi.mnstar.me"
},
{
"type": "click",
"name": "云台向左",
"key": "V1001_C_LEFT"
},
{
"type": "click",
"name": "云台向右",
"key": "V1001_C_RIGHT"
},
{
"type": "click",
"name": "安全预警功能",
"key": "V1001_AUTOSAFE"
}
]
},
{
"name": "操作",
"sub_button": [
{
"type": "click",
"name": "获取温度湿度",
"key": "V1001_TEMPERATURES"
},
{
"type": "click",
"name": "电灯开",
"key": "V1001_LED_ON"
},
{
"type": "click",
"name": "电灯关",
"key": "V1001_LED_OFF"
},
{
"type": "click",
"name": "自动光控功能",
"key": "V1001_AUTOLED"
}
]
},
{
"type": "click",
"name": "帮助&简介",
"key": "V1001_HELP"
}
]
}
至此,微信平台与树莓派的对接结束
树莓派与微信公众号对接(python)的更多相关文章
- 在新浪SAE上搭建微信公众号的python应用
微信公众平台的开发者文档https://www.w3cschool.cn/weixinkaifawendang/ python,flask,SAE(新浪云),搭建开发微信公众账号http://www. ...
- 个人微信公众号搭建Python实现 -接收和发送消息-基本说明与实现(14.2.1)
@ 目录 1.原理 2.接收普通消息 3.接收代码普通消息代码实现 1.原理 2.接收普通消息 其他消息类似参考官方文档 3.接收代码普通消息代码实现 from flask import Flask, ...
- 个人微信公众号搭建Python实现 -开发配置和微信服务器转入-配置说明(14.1.2)
@ 目录 1.查看基本配置 2.修改服务器配置 3.当上面都配置好,点击提交 4.配置如下 1.查看基本配置 登录到微信公众号控制面板后点击基本配置 这里要讲的就是订阅号 前往注册微信公众号 2.修改 ...
- 个人微信公众号搭建Python实现 -个人公众号搭建-永久素材管理(14.3.5)
@ 目录 1.说明 2.上传素材 3.获取素材列表 关于作者 1.说明 个人微信公众号开发的功能有限,因为很多权限没有,但支持上传永久素材,具体查看微信公众号文档 这里的请求都要将本地IP地址放到微信 ...
- 个人微信公众号搭建Python实现 -个人公众号搭建-总结(14.3.6)
@ 目录 1.主要技术:Flask,requests 2.实现的主要功能 3.目录说明 4.运行方式 关于作者 1.主要技术:Flask,requests requirements.txt如下 req ...
- 个人微信公众号搭建Python实现 -个人公众号搭建-处理消息和事件(14.3.4)
@ 目录 1.消息处理 2.事件处理 3.返回处理 关于作者 1.消息处理 现在只处理text文本消息 没有关键字的就交给qingyunke机器人去应付,这是一个免费的对话api 从配置文件中读取关键 ...
- 个人微信公众号搭建Python实现 -个人公众号搭建-运行run方法的编写(14.3.3)
@ 目录 1.主要逻辑 2.代码 关于作者 1.主要逻辑 使用的是flask服务器 就使用一个函数处理请求 第一个是验证服务器,返回微信服务器给的字符串就表示验证成功 第二是要处理微信服务器发送过来的 ...
- 个人微信公众号搭建Python实现 -个人公众号搭建-被动回复消息建模(14.3.2)
@ 目录 1.阅读官方文档 2.思考 关于作者 1.阅读官方文档 点击进入微信官方开发者文档 接收普通消息 文本消息 图片消息 语言消息 视频消息 小视频消息 地理位置消息 链接消息 接收事件消息 关 ...
- 个人微信公众号搭建Python实现 -个人公众号搭建-构想(14.3.1)
@ 目录 1.需求 2.怎么做 关于作者 1.需求 个人便捷工具 2.怎么做 针对个人未认证订阅号拥有以下权限 以及微信网页的一些权限,但是由于开发微信网页有限制 可定制功能只有被动回复,以及这个素材 ...
随机推荐
- Android 动态添加Spinner(.java文件内实现) 实现 改变spinner 内文字属性
动态添加spinner 控件 Spinner s = new Spinner(this); String []items={"自己定义的要显示的数组"}; my_SpinnerAd ...
- HDFS的java接口——简化HDFS文件系统操作
今天闲来无事,于是把HDFS的基本操作用java写出简化程序出来给大家一些小小帮助! package com.quanttech; import org.apache.hadoop.conf.Conf ...
- java 连接Kafka报错java.nio.channels.ClosedChannelExcep
Java 客户端连接Kafka报如下错误 java.nio.channels.ClosedChannelExcep 是由于Kafka server.properties中的advertised.hos ...
- jmeter,测登录,要不要过滤掉JS,CSS等请求?感觉过滤掉了压出来的数据就不真实?
首先,我们来明确下你的性能测试目的,你的目的是服务端的性能还是前端的性能.这两用目的所涉及到的测试场景和工具等方法是不一样的.1.我们先来谈谈服务端的性能.一般的web产品,像css, jpeg等这种 ...
- select()函数用法二
Select在Socket编程中还是比较重要的,可是对于初学Socket的人来说都不太爱用Select写程序,他们只是习惯写诸如 connect.accept.recv或recvfrom这样的阻塞程序 ...
- 使用ubifs格式的根文件系统
配置内核,使其支持ubifs文件系统 1)Device Drivers --->Memory Technology Device (MTD) support --->UBI - Uns ...
- Vue模板语法总结
文本 数据绑定最常见的方式就是使用"Mustache"语法(两个大括号{{ }})的文本插值 <span>Message: {{ msg }}</span> ...
- 十九、springboot使用@ControllerAdvice(二)之深入理解
前言: 接口类项目开发时,为了便于后期查找问题,一般会拦截器或过滤器中记录每个接口请求的参数与响应值记录, 请求参数很容易从request中获取,但controller的返回值无法从response中 ...
- 纯css进度条,各种兼容
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><HTML><HEAD&g ...
- poj1077
题意:给出一个八数码问题,求解法,不可解则输出unsolvable. 分析:可以用ida*算法,估价函数可以使用每个数码到其最终位置的最短距离之和.对于不可解的判断,我这里用迭代深度大于100时判定为 ...