微信企业号开发之中文编码 40006

2014年为了尝鲜自己为单位做了微信服务号,受到同事们的一致好评,然而大boss对此毫无所知,小boss们也是可有可无。平时的工作也是实在平淡,2015年上半年又加入些许实用功能。(不要我问我怎么能拿到数据,我知回答他们的数据库都托管到我们部门,每次维护都是我配合集成商工程师调试,所以搞好各部门的关系也是十分必要的)。

9月单位换了新的大boss,对微信十分感兴趣,特别是喜欢微信每天推送的新闻格式。于是大boos问中boss,中boss又讯问小boss,小boss又询问跑腿的。也是boss们才知晓原来已经有了微信服务号。于是在初秋的一个上午,俺就是接到了部门boss询问电话。我回答目前的服务号已无法满足需求,企业号才是最佳解决方案呢。也是近期俺的工作就立刻被切换到企业号了。

废话已不少,其实企业号与服务号api大体相同。只不过appid换成了corpid,然后在消息内增加了AgentID。不过在开发过程还是遇到了不少坑。

第一个坑,也是开发软件过程中遇到了通用坑。编码问题,特别中文编码问题。腾讯为了提高信息安全性,服务器消息都是通过严格加密的。不过还好,腾讯也给出了响应的样例。下载地址如下:http://qydev.weixin.qq.com/wiki/index.php?title=%E5%8A%A0%E8%A7%A3%E5%AF%86%E5%BA%93%E4%B8%8B%E8%BD%BD%E4%B8%8E%E8%BF%94%E5%9B%9E%E7%A0%81

一切按照Sample.py里面的demo进行都挺顺利,解密加密也都很方便。不过当返回消息出现中文时,一切就不那么和谐了。只要加密中文就出现下面的错误
Input strings must be a multiple of 16 in length
ERR: EncryptMsg ret: -40006 
其实也很简单,主要是str和unicode问题。sha1加密支持str,而unicode就好出现这个问题。

解决方案

sRespData=sRespData.encode('utf8')
ret,sEncryptMsg=wxcpt.EncryptMsg(sRespData, sReqNonce, sReqTimeStamp)

问题解决了。俺又要去迁移其他功能了

你可能感兴趣的:(微信企业号开发之中文编码 40006)