V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ipconfiger
V2EX  ›  分享发现

最近搞了一下微信的企业号接口, 遇到一些坑, 记录一下.主要是 Python 的,还有微信的强迫症

  •  
  •   ipconfiger · 2016-05-28 23:21:19 +08:00 · 3944 次点击
    这是一个创建于 3099 天前的主题,其中的信息可能已经有所发展或是发生改变。
    企业号的接口如果是用 GET 请求的都好办, 如果是 POST 请求的就坑了爹了, 首先用 requests 去 post json 格式的 body 的时候, 用 data 参数传进去字典由它自己 dumps 出来的 json, 属性用的单引号, 不知微信出于什么原因, 不识别单引号的 json 数据, 囧. 然后的问题是 Python 的, 用 json.dumps 出来的确实是双引号了, 但是只要内容里有\\u54c8\\u54c8 这样子的内容, 就会立即报错, 说不支持这样子的字符串, 但是无论是 json.dumps 还是 simplejson.dumps, 还是 ujson, 都是完全一个德性.
    比如:
    In [6]: import json
    In [7]: d=dict(key="哈哈")
    In [8]: json.dumps(d)
    Out[8]: '{"key": "\\u54c8\\u54c8"}'

    In [9]: d=dict(key=u"哈哈")
    In [10]: json.dumps(d)
    Out[10]: '{"key": "\\u54c8\\u54c8"}'

    In [11]: d=dict(key=u"哈哈".encode('utf8'))
    In [12]: json.dumps(d)
    Out[12]: '{"key": "\\u54c8\\u54c8"}'

    坊间传闻微信内部全是C++开发后台, 就这个情况看到还真是这样子的
    7 条回复    2017-06-07 11:06:52 +08:00
    just4test
        1
    just4test  
       2016-05-29 10:25:36 +08:00 via Android
    编码指定为 Unicode 可不可以解决中文转义的问题?
    jerry
        2
    jerry  
       2016-05-29 14:58:48 +08:00   ❤️ 1
    json.dumps 添加参数 ensure_ascii=False 解决中文转义, JSON 语法本身就要需求双引号吧
    dofine
        3
    dofine  
       2016-05-29 15:16:09 +08:00 via iPhone   ❤️ 1
    ensure_ascii=False 呀
    ipconfiger
        4
    ipconfiger  
    OP
       2016-05-29 18:03:45 +08:00
    @dofine
    @jerry
    后来想起这茬了, but, 单引号的问题, requests.post 里确实输出的单引号, 不知道是不是有参数可以解决
    wzxjohn
        5
    wzxjohn  
       2016-05-29 23:27:51 +08:00   ❤️ 1
    @ipconfiger Json 的规范要求的是不允许用单引号的哦。。。这个锅确实不是微信的。。。
    ipconfiger
        6
    ipconfiger  
    OP
       2016-05-30 00:21:19 +08:00   ❤️ 1
    @wzxjohn 那么就是 flask 的锅咯, 讨论谁的锅意义不大, 记录下来只是方便后面踩坑的人更容易出坑而已
    xuzequn
        7
    xuzequn  
       2017-06-07 11:06:52 +08:00
    现在使用 ensure_ascii=False 后,请求的返回会报错,'ascii' codec can't encode characters in position 22-25: ordinal not in range(128), 改成 ensure_ascii=True,就正确了能通过微信企业号发送中文消息了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1260 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 803ms · UTC 23:31 · PVG 07:31 · LAX 15:31 · JFK 18:31
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.