刚才弄完了,验证了,现在就开始弄个简单的东西。在UNIX网络编程中一般都是写一个回显的功能,
这里也写成一个回显的。
http://www.yangyanxing.com/?p=859这是我照着他的试的
http://sae.sina.com.cn/doc/python/tutorial.html这个是SAE的开发文档,可以直接在里面搜web.py就可以
看到大小写熟悉的东西。
其实我是完全按照上面地址的那个教程里做的,但是遇到了些问题,不过最后处理了,不过其实还有不懂的,就像
中文的问题。下面我一点点的说一下:
第一:先说index.swgi里的东西,这个其实直接看上面那个开发者文档就可以看到这里面写的这些内容就在web.py那部分
第二:被动回复用户消息,就是调用了POST,在微信公众平台的开发文档中有这部分:
http://mp.weixin.qq.com/wiki/10/79502792eef98d6e0c6e1739da387346.html
其实你在SAE这里写的相当于回调函数,消息来了,会调用你的这个POST,然后你要按照那个文档中的格式来解析
这个XML,然后你要被动回复一个XML格式的消息:
http://mp.weixin.qq.com/wiki/14/89b871b5466b19b3efa4ada8e577d45e.html
两个XML的toUser和fromUser正好相反,因为一个是它发给你,一个是你发给它的,所以传的时候反过来。
def POST(self): str_xml = web.data() xml = etree.fromstring(str_xml) content = xml.find("Content").text //这是用户发的内容 msgType = xml.find("MsgType").text //这个是消息类型,文本消息就是text fromUser = xml.find("FromUserName").text //这个是对方的 toUser = xml.find("ToUserName").text //这是自己的 return self.render.MyReply1(fromUser, toUser, int(time.time()), 'I am crazy..... ' + content)
这里就会通过render来调用你自己创建的XML来回复,因为我定义的XML就叫MyReply1,所以就是这个,
还有一点就是那个教程中这块I am crazy.....这段他用的是中文,但是我按照写了,就是一直不行,
当我给公众号发消息的时候会回复我"该公众号暂时无法提供服务,请稍后再试",如果提示这个基本上就是你发的
有问题,要么是XML格式不对,要么是字体问题,我这个就是因为我输入的中文怎么都不行,但是别人行,就说明我
的这个有问题肯定,不过暂时先放下了,直接改成英文,或者不加这个字符串,直接返回用户的消息一样,就是为了测试用.
解决问题:对于这里的中文不能正常执行的问题,我找到了解决方法,是从下面的地址里看到的,主要是把MyReply1.xml
里面的<![CDATA[$content]]>,改成了$content 这样就行 。
擦,原来没有解决问题,是因为用户如果输入的是英文,回复那个带中文没有问题,如果用户的消息本身是中文的
那么才会出现那个错误。还得再找解决办法
$def with (toUser, fromUser, createTime, content) <xml> <ToUserName><![CDATA[$toUser]]></ToUserName> <FromUserName><![CDATA[$fromUser]]></FromUserName> <CreateTime>$createTime</CreateTime> <MsgType><![CDATA[text]]></MsgType> <Content>$content</Content> </xml>
真的解决了:这下是真的解决了,把那个接收到的消息转在UTF-8就好了,是这样操作。
if msgType == 'text': Content = xml.find('Content').text content = Content.encode('UTF-8') if content == '.': return self.render.MyReplyAsk(fromUser, toUser, int(time.time()), 'You Say What ?') elif content == '。': return self.render.MyReplyAsk(fromUser, toUser, int(time.time()), '你想说啥 ?') else: return self.render.MyReply1(fromUser, toUser, int(time.time()), '鹦鹉:' + content)
主要就是那个content = Content.encode('UTF-8'),然后再使用content就可以了。在这看的:http://www.2cto.com/kf/201403/284029.html
在这看的:http://my.oschina.net/yangyanxing/blog/196956
第三:我说一下那个__init__啊,原本在上次验证的时候是没有写这个的,但是后来我在做这块的时候写上了
但是我发现和那个index.wsgi中的内容差不多,我就想删除了这块看看,删除后发现还真不行了.于是又改了回来.
等我弄明白怎么回事.
第四:现在就要创建那个MyReply1.xml了,先创建一个目录templates
这里的结构就差不多是固定的了,这就是一条文本消息的回复了.
$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>
可以看到这个上面传了四个参数,在POST中传参数的时候,第一个传的是fromUser,第二个传的是toUser,传到这里的时候
刚好反过来的.
这样基本上就可以实现回显的功能了.
我这个公众号其实是我想好好做的一个,就这样一点一点开发完成吧,我会一直把所有开发过程都写下来记录.