微信
微信作为一款三亿人使用的APP,是目前非常火的一款应用。从最开始的简单功能,到现在逐渐加入其他功能,微信变得越来越强大。公众平台就是其中一个很好的想法,这个功能出来以后也出现了很多运营得不错的公众平台,我自己也订阅了几个互联网相关的公众平台。
微信公众平台API
引用一下官方的说明:
公众平台消息接口为开发者提供与用户进行消息交互的能力。对于成功接入消息接口的公众账号,当用户发消息给公众号,微信公众平台服务器会使用http请求对接入的网址进行消息推送,第三方服务器可通过响应包回复特定结构,从而达到回复消息的目的。
通过调用接口,可以对微信用户发送的消息进行处理,然后返回相应的消息给用户,实际就是智能回复。
其实公众平台的后台提供了自动回复的设置功能,但是这种针对特定关键字触发的功能还不够灵活,相同关键字的回复都是一样,没有考虑当前时间等因素。所以还有有必要自己进行开发。
如何进入开发模式
申请微信公众平台,把资料添加完整之后,点击高级功能,就会看到有两种模式,编辑模式和开发模式,二者只能选其一,开启其中一个前需要关闭另外一个,默认是编辑模式。
进入开发模式之后需要先申请消息接口,填写网址url和token。网址实际就是自己的服务器地址,是用来接收微信发送的消息的,微信平台会把微信用户发送给公众平台的消息post到这个网址,而token是用来验证接口的。
提交url和token后,微信服务器将发送GET请求到填写的URL上,并且带上四个参数:
-
signature
-
timestamp
-
nonce
-
echostr
接收到GET请求和,开发者需要:
-
将token、timestamp、nonce三个参数进行字典序排序
-
将三个参数字符串拼接成一个字符串进行sha1加密
-
开发者获得加密后的字符串可与signature对比
-
若对比结果一致,校验通过,返回echostr参数内容,接入生效,否则接入失败。
Python代码大致如下:
def checkSignature(request):
token = ******
signature = request.GET.get("signature", None)
timestamp = request.GET.get("timestamp", None)
nonce = request.GET.get("nonce", None)
echoStr = request.GET.get("echostr",None)
tmpList = [token,timestamp,nonce]
tmpList.sort()
tmpstr = "%s%s%s" % tuple(tmpList)
tmpstr = hashlib.sha1(tmpstr).hexdigest()
if tmpstr == signature:
return echoStr
else:
return None
通过接口认证之后,就可以处理POST信息了。当普通微信用户向公众账号发消息时,微信服务器将POST该消息到填写的URL上。
目前推送消息的类型有:
-
文本消息
-
图片消息
-
地理位置消息
-
链接消息
-
事件推送
至于回复消息的类型有:
-
文本消息
-
音乐消息
-
图文消息
消息都遵照特定的结构,详情请看消息接口指南。 当普通微信用户的消息处理完成之后,返回的消息符合要求,微信服务器就会发送回用户。