微信卡券创建礼品卡接口报错 - data format error, do NOT use json unicode encode

更新日期: 2018-11-22 阅读次数: 3450 分类: 微信小程序

同事在微信小程序服务端使用 PHP Guzzle 调用微信卡券创建礼品卡接口,当参数中包含中文时,会报错

'errcode' => 47002,
'errmsg' => 'data format error, do NOT use json unicode encode (\\uxxxx\\uxxxx), please use utf8 encoded text! hint: [apaaxa01214794]',

PHP 代码为

$client = new \GuzzleHttp\Client();
$card = [
	// some code, e.g.
	'notice' => '二维码',
];

$res = $client->request(
	'POST', 
	'https://api.weixin.qq.com/card/create?access_token='.$access_token,
	[
		'json' => ['card' => $card]
	]
);

$result = (string) $res->getBody();

解决方法

将 json 那行替换成

'body' => json_encode(['card' => $card], JSON_UNESCAPED_UNICODE)

JSON_UNESCAPED_UNICODE 背后的故事

在 artisan tinker 中做个测试

>>> $a = ['name' => '中国']
=> [
     "name" => "中国",
   ]

>>> json_encode($a);
=> "{"name":"\u4e2d\u56fd"}"

>>> json_encode($a, JSON_UNESCAPED_UNICODE);
=> "{"name":"中国"}"

可以看到,json_encode 之后,中文默认变成了 unicode.

而,加上 JSON_UNESCAPED_UNICODE 参数之后,就正常显示了,我们知道 linux console 下默认是支持 utf8 字符显示的。

JSON_UNESCAPED_UNICODE, 故名思议, 就是说, JSON 不要编码 Unicode.

领取阿里云/腾讯云服务器优惠券

关于作者

我是来自山东烟台的一名开发者,喜欢瞎折腾,顺便记记笔记。有敢兴趣的话题,欢迎加微信 zhongwei 聊聊, 查看更多联系方式。 白天写程序,晚上哄熊孩子,可能回复有点慢,见谅。同时也欢迎关注我的微信公众号“大象工具”: 大象工具微信公众号

相关文章

爱评论不评论

近期节日

2020年10月31日 世界勤俭日
2020年11月01日 万圣节
2020年11月07日 立冬
2020年11月08日 中国记者日
2020年11月10日 世界青年节
2020年11月11日 光棍节
2020年11月14日 世界糖尿病日
2020年11月17日 国际大学生节
2020年11月20日 国际儿童日
2020年11月21日 世界问候日
2020年11月22日 小雪
2020年11月26日 感恩节
查看更多节日