1、首先记录下用户在客服会话中发送文本消息时,php后台要怎么获取。直接上代码
$data = $GLOBALS['HTTP_RAW_POST_DATA']; $dataArr = json_decode($data,1); $content = $dataArr['Content'];//文本消息内容 $fromUserName = $dataArr['FromUserName'];//发送者的openid
记录下这里的坑:官方文档上说【当用户在客服会话发送消息(或进行某些特定的用户操作引发的事件推送时),微信服务器会将消息(或事件)的数据包(JSON或者XML格式)POST请求开发者填写的URL。】
既然是POST的请求数据那就用$_POST接收对吧,实际上你会发下接收不到。然后用$GLOBALS['HTTP_RAW_POST_DATA']就可以接收到微信服务器POST过来的数据。
2、获取到用户发的信息以后,再说下给用户发送客服消息。先上代码
//获取access_token $url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=你的小程序appid&secret=你的小程序密钥'; $data = $this->getHtml($url); $dataArr = json_decode($data,1); $access_token = $dataArr['access_token']; //发送给个人 $posturl = 'https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token='.$access_token; $arr = array("touser"=>"$fromUserName","msgtype"=>"text","text"=>array("content"=>$content)); $res = $this->postHtml($posturl,json_encode($arr));
(1)、发送客服消息首先需要获取access_token,这个没有什么问题。
(2)、发送给用户信息的时候,微信官网说【调用客服接口,通过POST一个JSON数据包来发送消息给普通用户】。这里一定要注意是POST一个json数据包,不要学我一直给他POST数组。如果给他POST不是JSON数据包微信服务器是解析不了的,就一直返回40003错误码,说openid不正确。所以一定要给他POST一个JSON数据包。
总结:当一直不知道错在哪了,可以用微信公众平台接口调试工具调试下。链接:https://mp.weixin.qq.com/debug
上面代码用的封装函数:
private function getHtml($url){ $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($ch, CURLOPT_TIMEOUT, 10); curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Maxthon/4.4.8.1000 Chrome/30.0.1599.101 Safari/537.36'); curl_setopt($ch, CURLOPT_AUTOREFERER,true); $content = curl_exec($ch); $code = curl_getinfo($ch,CURLINFO_HTTP_CODE); curl_close($ch); if($code == "200"){ return $content; }else{ return "错误码:".$code; } } private function postHtml($url,$post_data=array()){ $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); curl_setopt($ch, CURLOPT_TIMEOUT, 10); curl_setopt($ch, CURLOPT_AUTOREFERER,true); $content = curl_exec($ch); $info = curl_getinfo($ch,CURLINFO_EFFECTIVE_URL); $code = curl_getinfo($ch,CURLINFO_HTTP_CODE); curl_close($ch); if($code == "200"){ return $content; }else{ return "错误码:".$code; } }