微信公众平台API


微信

微信作为一款三亿人使用的APP,是目前非常火的一款应用。从最开始的简单功能,到现在逐渐加入其他功能,微信变得越来越强大。公众平台就是其中一个很好的想法,这个功能出来以后也出现了很多运营得不错的公众平台,我自己也订阅了几个互联网相关的公众平台。

微信公众平台API

引用一下官方的说明:

公众平台消息接口为开发者提供与用户进行消息交互的能力。对于成功接入消息接口的公众账号,当用户发消息给公众号,微信公众平台服务器会使用http请求对接入的网址进行消息推送,第三方服务器可通过响应包回复特定结构,从而达到回复消息的目的。

通过调用接口,可以对微信用户发送的消息进行处理,然后返回相应的消息给用户,实际就是智能回复。
其实公众平台的后台提供了自动回复的设置功能,但是这种针对特定关键字触发的功能还不够灵活,相同关键字的回复都是一样,没有考虑当前时间等因素。所以还有有必要自己进行开发。

如何进入开发模式

申请微信公众平台,把资料添加完整之后,点击高级功能,就会看到有两种模式,编辑模式和开发模式,二者只能选其一,开启其中一个前需要关闭另外一个,默认是编辑模式。
进入开发模式之后需要先申请消息接口,填写网址url和token。网址实际就是自己的服务器地址,是用来接收微信发送的消息的,微信平台会把微信用户发送给公众平台的消息post到这个网址,而token是用来验证接口的。

提交url和token后,微信服务器将发送GET请求到填写的URL上,并且带上四个参数:

  • signature

  • timestamp

  • nonce

  • echostr

接收到GET请求和,开发者需要:

  1. 将token、timestamp、nonce三个参数进行字典序排序

  2. 将三个参数字符串拼接成一个字符串进行sha1加密

  3. 开发者获得加密后的字符串可与signature对比

  4. 若对比结果一致,校验通过,返回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上。
目前推送消息的类型有:

  • 文本消息

  • 图片消息

  • 地理位置消息

  • 链接消息

  • 事件推送

至于回复消息的类型有:

  • 文本消息

  • 音乐消息

  • 图文消息

消息都遵照特定的结构,详情请看消息接口指南。 当普通微信用户的消息处理完成之后,返回的消息符合要求,微信服务器就会发送回用户。