本来是不想写全这教程的,其实通过前2篇文章已经实现了功能对接,并且sae在傍晚经常会无法访问微信,具体原因未知,渣浪和企鹅的客服都是说是对方的问题,如果你非要实现远程控制功能,建议自己购买VPS中转,反正我是这么做了….
自定义菜单
先来看一下WeChat的自定义菜单接口说明,通过往微信API接口post一段json字符串来创建自定义菜单,在菜单中定义了类型,名称,和key的键值
https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN
{
“button”:[
{
“type”:”click”,
“name”:”今日歌曲”,
“key”:”V1001_TODAY_MUSIC”
},
{
“name”:”菜单”,
“sub_button”:[
{
“type”:”view”,
“name”:”搜索”,
“url”:”http://www.soso.com/”
},
{
“type”:”view”,
“name”:”视频”,
“url”:”http://v.qq.com/”
},
{
“type”:”click”,
“name”:”赞一下我们”,
“key”:”V1001_GOOD”
}]
}]
}
在代码上实现也是非常简单的,就略过不说,如果实在自己不会写,使用官方提供的在线调试接口创建,只需要把你自己的JSON字符串填入即可
然后就可以在sae平台上写入你希望的功能代码
这里我用开启电灯为例(具体硬件为继电器模块)
这里贴出了关键代码
if mstype == 'event': #判断消息类型
type = xml.find("Event").text
if type== 'CLICK': #判断是否为点击按钮事件
if EventKey == 'OPEN': #判断Key值,执行相应指令
Key = 'justmyroom'
Commands = 'LightOn'
API_url = "http://%s:8023/api/%s/%s" %(mc.get('ip'), Commands, Key)
try:
res = urllib2.urlopen(url = API_url)
json_data = json.loads(res.read())
if json_data['status'] == 'ok':
return self.render.reply_text(fromUser,toUser,int(time.time()),u'电灯已经打开了')
else:
return self.render.reply_text(fromUser,toUser,int(time.time()),u'电灯未开启')
except:
return self.render.reply_text(fromUser,toUser,int(time.time()),u'Pi端服务未开启')
具体就是通过传过来的消息类型,判断点击按钮的key,然后通过PI上报的IP地址,去往PI的对外接口发送数据,让接口执行相应的过程后返回成功状态,然后sae返回数据到微信,整个过程就这样实现
至于Pi上的服务端,如果你有仔细看过前2篇文章,相信自己写出来也是很容易的,这里就不贴了…