内网穿透,让外网可以访问树莓派

树莓派对接微信

需要安装webpypython-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)的更多相关文章

  1. 在新浪SAE上搭建微信公众号的python应用

    微信公众平台的开发者文档https://www.w3cschool.cn/weixinkaifawendang/ python,flask,SAE(新浪云),搭建开发微信公众账号http://www. ...

  2. 个人微信公众号搭建Python实现 -接收和发送消息-基本说明与实现(14.2.1)

    @ 目录 1.原理 2.接收普通消息 3.接收代码普通消息代码实现 1.原理 2.接收普通消息 其他消息类似参考官方文档 3.接收代码普通消息代码实现 from flask import Flask, ...

  3. 个人微信公众号搭建Python实现 -开发配置和微信服务器转入-配置说明(14.1.2)

    @ 目录 1.查看基本配置 2.修改服务器配置 3.当上面都配置好,点击提交 4.配置如下 1.查看基本配置 登录到微信公众号控制面板后点击基本配置 这里要讲的就是订阅号 前往注册微信公众号 2.修改 ...

  4. 个人微信公众号搭建Python实现 -个人公众号搭建-永久素材管理(14.3.5)

    @ 目录 1.说明 2.上传素材 3.获取素材列表 关于作者 1.说明 个人微信公众号开发的功能有限,因为很多权限没有,但支持上传永久素材,具体查看微信公众号文档 这里的请求都要将本地IP地址放到微信 ...

  5. 个人微信公众号搭建Python实现 -个人公众号搭建-总结(14.3.6)

    @ 目录 1.主要技术:Flask,requests 2.实现的主要功能 3.目录说明 4.运行方式 关于作者 1.主要技术:Flask,requests requirements.txt如下 req ...

  6. 个人微信公众号搭建Python实现 -个人公众号搭建-处理消息和事件(14.3.4)

    @ 目录 1.消息处理 2.事件处理 3.返回处理 关于作者 1.消息处理 现在只处理text文本消息 没有关键字的就交给qingyunke机器人去应付,这是一个免费的对话api 从配置文件中读取关键 ...

  7. 个人微信公众号搭建Python实现 -个人公众号搭建-运行run方法的编写(14.3.3)

    @ 目录 1.主要逻辑 2.代码 关于作者 1.主要逻辑 使用的是flask服务器 就使用一个函数处理请求 第一个是验证服务器,返回微信服务器给的字符串就表示验证成功 第二是要处理微信服务器发送过来的 ...

  8. 个人微信公众号搭建Python实现 -个人公众号搭建-被动回复消息建模(14.3.2)

    @ 目录 1.阅读官方文档 2.思考 关于作者 1.阅读官方文档 点击进入微信官方开发者文档 接收普通消息 文本消息 图片消息 语言消息 视频消息 小视频消息 地理位置消息 链接消息 接收事件消息 关 ...

  9. 个人微信公众号搭建Python实现 -个人公众号搭建-构想(14.3.1)

    @ 目录 1.需求 2.怎么做 关于作者 1.需求 个人便捷工具 2.怎么做 针对个人未认证订阅号拥有以下权限 以及微信网页的一些权限,但是由于开发微信网页有限制 可定制功能只有被动回复,以及这个素材 ...

随机推荐

  1. 20155234 2016-2017-2 《Java程序设计》第5周学习总结

    20155234 2016-2017-2 <Java程序设计>第5周学习总结 教材学习内容总结 Java中所有错误都会被打包为对象,运用try.catch,可以在错误发生时显示友好的错误信 ...

  2. 选择Memcached还是Redis?

    两者相似之处 Memcached与Redis都属于内存内.键值数据存储方案.它们都从属于数据管理解决方案中的NoSQL家族,而且都基于同样的键值数据模型.双方都选择将全部数据保存在内存当中,这自然也就 ...

  3. Anaconda+django写出第一个web app(二)

    今天开始建立App中的第一个Model,命名为Tutorial. Model的定义在main文件夹下的models.py中通过类进行,我们希望Tutorial这个model包含三个属性:标题.内容和发 ...

  4. 【CC2530强化实训02】普通延时函数实现按键的长按与短按

    [CC2530强化实训02]普通延时函数实现按键的长按与短按 [题目要求]      用一个按键实现单击与双击的功能已经是很多嵌入式产品的常用手法.使用定时器的间隔定时来计算按键按下的时间是通用的做法 ...

  5. Python练习-函数(方法)的定义和应用

    需求:对文件进行增删改查,使用函数调用的方式完成操作 # 编辑者:闫龙 import MyFuncation; Menu = ["查询","添加"," ...

  6. 说说C语言运算符的“优先级”与“结合性”

    论坛和博客上常常看到关于C语言中运算符的迷惑,甚至是错误的解读.这样的迷惑或解读大都发生在表达式中存在着较为复杂的副作用时.但从本质上看,仍然是概念理解上的偏差.本文试图通过对三个典型表达式的分析,集 ...

  7. 网页中嵌入swf文件的几种方法

    1. object + embed       传统的方法 优点:浏览器兼容性好,是 Macromedia 一直以来的官方方法缺点:a.embed 标签是不符合 W3C 的规范的,无法通过验证.当然, ...

  8. 【黑客免杀攻防】读书笔记15 - 源码免杀、C++壳的编写

    1.源码免杀 1.1 定位产生特征的源码 定位文件特征 1.根据MyCCL的特征码定位工具,定位出有特征的地址 2.根据VS的反汇编窗口,输入有特征的地址得到特征地址与源码的关系 3.插入Messag ...

  9. python网络编程-socket样例

    socket样例 一:只能一个客户端发送一个信息. 客户端 # -*- coding:utf-8 -*- __author__ = 'shisanjun' import socket sock=soc ...

  10. json的用法

    json格式 JSON格式:http://www.json.org/ python和JSON的关系请参考:http://docs.python.org/library/json.html JSON建构 ...