使用imgSecCheck, msgSecCheck这两个API的时候碰到一些雷,现在就分享下.
msgSecCheck
传输的文本不可以是Unicode编码,要进行解码后再传输, 否则返回的是 "内容正常,无违规内容"
PHP DEMO:
private function scantxt($url, $data)
{
$curl = curl_init();
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_TIMEOUT, 500);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($curl, CURLOPT_URL, $url);
$res = curl_exec($curl);
curl_close($curl);
return $res;
}
调用:
$data = ['content' => 'xxxxxxxxxxxxxxxxxxxxxxx'];
scantxt($url, json_encode($data, JSON_UNESCAPED_UNICODE));
imgSecCheck
media参数类型为form-data, 应该是指POST表单的头格式为 Content-Type: multipart/form-data
其实就是服务器端模拟文件上传功能,上传文件给微信服务器, 被上传的文件不支持URL,只能为本地图片,图片路径推荐绝对路径(只要能根据路径找到该文件即可,有的可以相对路径)
PHP 5.5以上和以下使用的API方法不同
其实微信可以考虑支持BASE64,这样更简便.
5. API文章最下方的@, 其实可加可不加, 不加的时候微信也鉴别( @意思是上传的为图片)
private function upimg($url)
{
$file = __DIR__ . '/123.jpg';
$cfile = curl_file_create($file, 'image/jpg', '@testpic'); //这里硬编码了,自己修改
$imgdata = array('media' => $cfile);
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: multipart/form-data'));
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true); // stop verifying certificate
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $imgdata);
$r = curl_exec($curl);
curl_close($curl);
return $r;
}
网友回复
public function check_img(){
$file = __DIR__ . '\640.jpg';
$cfile = curl_file_create($file, 'image/jpg', 'testpic'); //这里硬编码了,自己修改
$imgdata = array('media' => $cfile);
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL,$url);
curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: multipart/form-data'));
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true); // stop verifying certificate
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $imgdata);
$r = curl_exec($curl);
curl_close($curl);
dump($r);
}
返回的
bool(false)
传输的文本不可以是Unicode编码,要进行解码后再传输? 你好,这里需要开发者处理下把unicode转为utf-8(参考链接:https://www.jb51.net/article/70251.htm) 另外,form-data就是http协议里面的formdata哈