PHP 微信小程序客服回复图片之图片素材上传
开场捋一下逻辑:无论小程序客服还是公众号的回复,开发时你会发现当你想要它自动回复图片功能时,则需先将你要回复的图片上传到微信的后台素材库,然后拿到上传成功后给你返回的素材码,然后就需要你去拿着这个素材码去调用接口给用户发送消息了,不多BB,看代码
public $accessToken = 'xaakjajlsdjakjdajkasjdlasjdasda'; // 微信accessToken
public $wxUpload = 'http://api.weixin.qq.com/cgi-bin/media/upload'; //上传素材到微信服务器接口
$filePath = ./public/wechat_img.png'; //需要上传图片的路径
//上传图片素材
//解析图片文件名
public function wxMedia($filePath ,$mediaKey = '')
{
$accessToken = $this->getAccessToken();
$url = $this->wxUpload.'?access_token='.$accessToken.'&type=image';
if (class_exists ( '\CURLFile' )) {//关键是判断curlfile,官网推荐php5.5或更高的版本使用curlfile来实例文件
$filedata = array (
'fieldname' => new \CURLFile ( realpath ( $file_path ), 'image/jpg' )
);
} else {
$filedata = array (
'fieldname' => '@' . realpath ( $file_path )
);
}
$result = $this->upload($url,$filedata,$file_path,$mediaKey);
return $result;
}
//上传素材到微信小程序服务器
/*
* $url 上传素材接口
* $filedata 解析后图片信息
* $file_path 图片原本路径
* */
public function upload($url, $filedata, $file_path) {
$curl = curl_init ();
if (class_exists ( '/CURLFile' )) {//php5.5跟php5.6中的CURLOPT_SAFE_UPLOAD的默认值不同
curl_setopt ( $curl, CURLOPT_SAFE_UPLOAD, true );
} else {
if (defined ( 'CURLOPT_SAFE_UPLOAD' )) {
curl_setopt ( $curl, CURLOPT_SAFE_UPLOAD, false );
}
}
curl_setopt ( $curl, CURLOPT_URL, $url );
curl_setopt ( $curl, CURLOPT_SSL_VERIFYPEER, FALSE );
curl_setopt ( $curl, CURLOPT_SSL_VERIFYHOST, FALSE );
if (! empty ( $filedata )) {
curl_setopt ( $curl, CURLOPT_POST, 1 );
curl_setopt ( $curl, CURLOPT_POSTFIELDS, $filedata );
}
curl_setopt ( $curl, CURLOPT_RETURNTRANSFER, 1 );
$output = curl_exec ( $curl );
curl_close ( $curl );
$output = json_decode($output,true);
if (!isset($output['media_id'])) {
throw exception(var_export($output, true), 500);
}
unlink($file_path); //此时就已经上传图片素材成功即可删除本地图片或者不删除
return $output['media_id'];
}
### 这里贴一段组装回复素材信息的代码
$fromUsername = $postObj['FromUserName']; //发送者openid
$data=array(
"touser" => $fromUsername,
"msgtype" => "image",
"image" => array("media_id"=>$mediaid) //将刚才获取到的media_id 放入这里面就可以了
);
$json = json_encode($data,JSON_UNESCAPED_UNICODE); //php5.4+
$res = $this->requestApi($json); //回复的格式建议无需加密,推荐json格式, 在这里吐槽一下微信客服推送的文档,回复XML各种报错-.-
return $res;