WordPress WP_Http方式微信小程序内容安全检测 errcode:47001 data format error
2022-09-08
目前各平台小程序都要求接入内容安全检测机制,以微信小程序为例,检测文本。
官方文档:https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/sec-center/sec-check/msgSecCheck.html
本文以WordPress WP_Http方式进行访问,参考写法:
<?php
// url 参数
$token = ''; // 自行获取access_token
$url = 'https://api.weixin.qq.com/wxa/msg_sec_check'. '?access_token=' . $token;
// body 参数
$openid = ''; // 目前为必选参数了
$scene = 1;
$version = 2;
$content = 'hello world';
// 切记: 要用json_encode转为字符串!!!
$contentbody = json_encode(array('openid' => $openid, 'scene' => $scene, 'version' => $version, 'content' => $content), JSON_UNESCAPED_UNICODE);
$wp_http = new WP_Http;
$result = $wp_http->request( $url, array( 'method' => 'POST', 'body' => $contentbody ) );
$body = json_decode($result['body']);
print_r($body);
返回结果很容易出现47001错误,官方解释:解析 JSON/XML 内容错误;post 数据中参数缺失;检查修正后重试。
{
"code": 0,
"data": {
"headers": { },
"body": "{\"errcode\":47001,\"errmsg\":\"data format error rid: xxxxxx\"}",
"response": {
"code": 200,
"message": "OK"
},
"cookies": [ ],
"filename": null,
"http_response": {
"data": null,
"headers": null,
"status": null
}
}
}
列举笔者排查出的原因:
- access_token是URL参数,不能放在body,确定是不能!即使URL和body都放也不行,仅仅只能放在URL中!
- 检查post参数个数、有效性(比如token是否过期等)以及变量拼写,避免低级错误。
- post参数是json字符串格式。
注意json_encode的第二个参数JSON_UNESCAPED_UNICODE,禁止中文转码,否则检测不出敏感词。
(版权归cpury.com所有,转载请注明出处。)