项目要做一个微信客服管理的功能,于是从上礼拜开始就着手开发,首先看微信公众平台开发者文档:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1451025056&token=&lang=zh_CN , 获取客服基本信息,添加客服帐号,设置客服信息,删除客服帐号,这些接口都调好,唯独上传客服头像出了问题。
调用示例(使用curl命令,用FORM表单方式上传一个多媒体文件):
curl -F media=@test.jpg "https://api.weixin.qq.com/customservice/kfaccount/uploadheadimg?access_token=ACCESS_TOKEN&kf_account=KFACCOUNT" 一直调试了好多天,都没有成功,一直是
返回"errcode":41005,"errmsg":"media data missing"
查了网上好多资料,后面试了很多才发现,原来跟php 版本是有关的(吐血)。
php5.5已经把通过@加文件路径上传文件的方式给放入到Deprecated中了。php5.6默认是不支持这种方式了,而是使用:'media' => new \CURLFile(realpath($media)) 这种方式。特殊处理:curl_setopt ( $ch, CURLOPT_SAFE_UPLOAD, false);
/** * 上传客服头像 * @param string $account * @param string $media */ public function uploadheadimg($account, $media) { $data = $this->getData('/customservice/kfaccount/uploadheadimg', [ 'access_token' => $this->getAccessToken() ], [ 'kf_account' => $account, 'media' => new \CURLFile(realpath($media)) ] ); return $data; }
附上curl方法:
protected function curl($url, $data = null) { $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE); curl_setopt( $curl, CURLOPT_SAFE_UPLOAD, FALSE); if (! empty($data)) { curl_setopt($curl, CURLOPT_POST, 1); curl_setopt($curl, CURLOPT_POSTFIELDS, $data); } curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); $output = curl_exec($curl); curl_close($curl); return $output; }
最后是接口上传成功了,但是查看客服列表,竟然客服头像图片没有显示,直接在公众号上传的就能直接显示,还在找原因当中。。。如有看到知道的烦请赐教,谢谢。