微信小程序Python开发 客服消息乱码

前言

记录一下微信小程序开发过程中关于编码的坑。

客服消息乱码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
customerMessageUrl = 'https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token={}'

def send_customer_message(app_id, to_user):
access_token = get_access_token(app_id)['access_token']

txt_msg = {
"touser": to_user,
"msgtype": "text",
"text": {
"content": "你好"
}
}

try:
result = requests.post(customerMessageUrl.format(access_token), json=txt_msg)
except:
pass
else:
return result.json()

# 上面程序客户端收到的文本内容是ascii码,没有正常显示中文

# 解决
data = json.dumps(txt_msg, ensure_ascii=False).encode('utf-8') # 不使用ascii编码, 再重新用utf-8编码
result = requests.post(customerMessageUrl.format(access_token), data=data)

获取用户详细信息解密失败

1
2
3
4
5
6
7
8
9
小程序前端调用wx.getUserInfo()获取用户信息
前端把对称加密的加密内容传给后端, 后端解密, 获取用户的详细信息

decrypted = json.loads(self._unpad(cipher.decrypt(encryptedData))
官方SDK的这行代码有几率出现如下错误
UnicodeEncodeError: 'latin-1' codec can't encode character u'\u2022' in position 0

解决
decrypted = json.loads(self._unpad(cipher.decrypt(encryptedData)).decode('utf-8', "ignore")) 重新utf-8编码, 忽略编码异常的部分
----------本文完,感谢您的阅读----------