在做微信接口调用的时候,需求是这样的 用户回复“666”-----》给用户发送一段文字,再给用户发送一张图片,,,,因为微信模板消息发送只能给用户发送一条消息,所以只用模板消息发送不行了,看大家用的是 客服消息发送,,所以果断用起,把过程记录一下,中间不少坑

1、用 客服消息发送 接口 第一步要先启用 客服消息 接口 ,不启用的话调不通,位置看图片

2、里面的具体接口调用就不说了,我是用 php ,curl 走起一般没啥问题 ,坑在后面
当用户 回复 666 的时候,当时想 先用模板消息发送,再调用微信客服接口发图片,结果发现不行,只发图片不发文字,而且微信那边没收到回复,会一直请求三次,结果给用户发了三次图片,这个不行,那只用客服消息,先发文字,再发图片,结果还是因为微信那边没收到消息,给用户发了三次文字,三次图片,这条路也不行,,,,,,,,,然后在网上找,看大家都用 ob 函数,我们也用起,结果发现不行,不起作用(怀疑微信那边改版了),期间也试了给微信那边回复 echo " " , echo “null” , echo “success”,等,都不行,,这可难为死我了
最后实在没办法就给数据库加了个字段,用来记录微信请求了几次,当用户第一次请求后,改变字段状态(0改为1),微信再次请求时判断转态,为1,直接exit(); 即使微信那边请求了三次,但就只给用户发一次,不说了,上代码![这里写图片描述]

补充,为什么微信那边一直收不到信息,因为上传图片这里太耗时了,加上这句话就可以解决了,红色箭头出,我上源码吧在这里插入代码片<?php
date_default_timezone_set(“Asia/Shanghai”);
header(‘content-type:text/html;charset=utf-8’);

define(“xxx”, “xxxx”); //define your token

$wx = new wechatCallbackapiTest();
//增加自定义菜单
wx−&gt;createmenu();//第一步是接收微信后台发送的验证消息,微信后台会发送一个GET请求到上面的URL,并附带以下参数://signature,timestamp,nonce,echostr//我们的服务器在接收到上述参数后,需要验证signature是否正确,验证方法是先对timestamp、nonce和token先排序,再拼接成一个字符串,计算出sha1,并和signature对比:if(wx-&gt;createmenu(); // 第一步是接收微信后台发送的验证消息,微信后台会发送一个GET请求到上面的URL,并附带以下参数: // signature,timestamp,nonce,echostr // 我们的服务器在接收到上述参数后,需要验证signature是否正确,验证方法是先对timestamp、nonce和token先排序,再拼接成一个字符串,计算出sha1,并和signature对比: if(wx−>createmenu();//第一步是接收微信后台发送的验证消息,微信后台会发送一个GET请求到上面的URL,并附带以下参数://signature,timestamp,nonce,echostr//我们的服务器在接收到上述参数后,需要验证signature是否正确,验证方法是先对timestamp、nonce和token先排序,再拼接成一个字符串,计算出sha1,并和signature对比:if(_GET[‘echostr’]){

$wx->valid(); //如果发来了echostr则进行验证

}else{

$wx->responseMsg(); //如果没有echostr,则返回消息

}

class wechatCallbackapiTest{
private $_cache=array(‘uid’ => 0);

 public function valid(){ //valid signature , option$echoStr = $_GET["echostr"];if($this->checkSignature()){ //调用验证字段echo $echoStr;exit;}}public function responseMsg(){//get post data, May be due to the different environments$postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; //接收微信发来的XML数据//extract post dataif(!empty($postStr)){  //解析post来的XML为一个对象$postObj//把 XML 字符串载入对象中,返回类 SimpleXMLElement 的一个对象,该对象的属性包含 XML 文档中的数据$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);$fromUsername = $postObj->FromUserName; //请求消息的用户$toUsername = $postObj->ToUserName; //"我"的公众号id$keyword = trim($postObj->Content); //消息内容$eventKey = trim($postObj->EventKey);//获取微信返回信息的类型$time = time(); //时间戳$msgtype = 'text'; //消息类型:文本$textTpl = "<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[%s]]></MsgType><Content><![CDATA[%s]]></Content></xml>";$textImgTpl = "<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[%s]]></MsgType><Image><MediaId><![CDATA[%s]]></MediaId></Image><FuncFlag>0</FuncFlag></xml>";//在新用户关注你的公众号时,自动返回信息:(把这段代码加在判断$keyword之前)。if($postObj->MsgType == 'event'){ //如果XML信息里消息类型为eventif($postObj->Event == 'subscribe'){ //如果是订阅事件$contentStr = "欢迎进入5xxx";$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgtype, $contentStr);echo $resultStr;if (empty($eventKey)) {$userPic = $this->getUserInfos($fromUsername);$pdo= new PDO('mysql:host=localhost;dbname=weixin','root','*oscent#51testing');$sql1 = 'select openId from `sharerecord` where openId="'.$fromUsername.'"';$stmt=$pdo->prepare($sql1);$stmt->execute();$data = $stmt->fetchAll(PDO::FETCH_ASSOC);if (empty($data[0])) {$sql = 'insert into `sharerecord` (openId,nickname,picture,city,country,attenTime) values ("'.$fromUsername.'","'.$userPic['nickname'].'","'.$userPic['headimgurl'].'","'.$userPic['city'].'","'.$userPic['country'].'","'.time().'")';$stmt=$pdo->prepare($sql);$stmt->execute();}}$keyArray = explode('_',$eventKey);//截取判断是否是已关注还是未关注用户if (!empty($keyArray['1']) && is_numeric($keyArray['1'])) {//判断该用户之前是否已关注过本公众号,还是取消后再关注过的$pdo= new PDO('mysql:host=localhost;dbname=weixin','root','*oscent#51testing');$sql = 'select openId from `sharerecord` where openId="'.$fromUsername.'"';$stmt=$pdo->prepare($sql);$stmt->execute();$data = $stmt->fetchAll(PDO::FETCH_ASSOC);if (empty($data['0']['openId'])) {//同时处理数据库,拿到scene_id  将分享者分享次数加一,并发送消息给分享者// $pdo= new PDO('mysql:host=localhost;dbname=weixin','root','*oscent#51testing');$sql1 = 'update `sharerecord` set `shareNum`= shareNum+1 where num="'.$keyArray['1'].'"';//获取数据,执行语句$stmt=$pdo->prepare($sql1);$stmt->execute();//给分享者发送模板消息$this->sendTplToShare($keyArray['1']);file_put_contents('num3.txt', $keyArray['1']);//将用户保存在数据库$userPic = $this->getUserInfos($fromUsername);$sql = 'insert into `sharerecord` (openId,nickname,picture,city,country,attenTime) values ("'.$fromUsername.'","'.$userPic['nickname'].'","'.$userPic['headimgurl'].'","'.$userPic['city'].'","'.$userPic['city'].'","'.time().'")';$stmt=$pdo->prepare($sql);$stmt->execute();}}}exit();  }if($keyword == '666'){$pdo= new PDO('mysql:host=localhost;dbname=weixin','root','*oscent#51testing');$sql = 'select isAdd,imageId from `sharerecord` where openId="'.$fromUsername.'"';$stmt=$pdo->prepare($sql);$stmt->execute();$data = $stmt->fetchAll(PDO::FETCH_ASSOC);if (!$data) {$userPic = $this->getUserInfos($fromUsername);$sql2 = 'insert into `sharerecord` (openId,nickname,picture,city,country,attenTime) values ("'.$fromUsername.'","'.$userPic['nickname'].'","'.$userPic['headimgurl'].'","'.$userPic['city'].'","'.$userPic['city'].'","'.time().'")';$stmt=$pdo->prepare($sql2);$stmt->execute();}if ( $data[0]['isAdd']) {if (!empty($data[0]['imageId'])) {$msgtype = 'image';$contentStr = $data[0]['imageId'];$resultStr = sprintf($textImgTpl, $fromUsername, $toUsername, $time, $msgtype, $contentStr);echo $resultStr;}exit();}//将isAdd 字段加1$sql1 = 'update `sharerecord` set `isAdd`=1 where openId="'.$fromUsername.'"';//获取数据,执行语句$stmt1=$pdo->prepare($sql1);$stmt1->execute();ignore_user_abort(true);ob_start();header('Connection: close');header('Content-Length: ' . ob_get_length());ob_end_flush();ob_flush();flush();echo '';$accessToken = $this->getAccessToken();//发送文本$this->getSeverice($fromUsername,$accessToken);//发送图片前先检查用户之前是否生成过,生成过则直接发送// if ($data[0]['imageId']) {//   $msgtype = 'image';//   $contentStr = $data[0]['imageId'];//   $resultStr = sprintf($textImgTpl, $fromUsername, $toUsername, $time, $msgtype, $contentStr);//   echo $resultStr;//   exit();// }//发送图片$this->backImg($fromUsername,$accessToken);           }else{$contentStr = '输入666试试';$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgtype, $contentStr);echo $resultStr;exit();}}else {echo "";exit;}}//验证字段private function checkSignature(){$signature = $_GET["signature"];$timestamp = $_GET["timestamp"];$nonce = $_GET["nonce"]; $token = TOKEN;$tmpArr = array($token, $timestamp, $nonce);//排序sort($tmpArr);//字符串$tmpStr = implode( $tmpArr );//SHA-1 散列$tmpStr = sha1( $tmpStr );if( $tmpStr == $signature ){return true;}else{return false;}}//获取access_tokenpublic function getAccessToken(){//先从缓存中拿token,过期再更新token$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=xxxx";$ch = curl_init();curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);$output = curl_exec($ch);curl_close($ch);$jsoninfo = json_decode($output, true);return $jsoninfo["access_token"];}//通过token获得ticketpublic function getTicketByToken($token,$openId){    //通过openId查询数据库判断用户之前有没有生成过分享图片$pdo= new PDO('mysql:host=localhost;dbname=weixin','root','*oscent#51testing');$sql = 'select ticket from `sharerecord` where openId="'.$openId.'"';$stmt = $pdo->prepare($sql);$stmt->execute();//获取数据$data=$stmt->fetchAll(PDO::FETCH_ASSOC);if (!empty($data['0']['ticket'])) {return $data['0']['ticket'];}//scene_id 为32位整数$num = file_get_contents('num.txt');$num = $num+1;file_put_contents('num.txt', $num); $url = "https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=".$token;$data = '{"expire_seconds": 2592000, "action_name": "QR_SCENE", "action_info": {"scene": {"scene_id":'.$num.'}}}';$ch = curl_init();curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);// curl_setopt($ch, CURLOPT_HTTPHEADER, $header);curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)');curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);curl_setopt($ch, CURLOPT_AUTOREFERER, 1);curl_setopt($ch, CURLOPT_POSTFIELDS, $data);curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);$tmpInfo = curl_exec($ch);if (curl_errno($ch)) {curl_close( $ch );return $ch;}else{curl_close( $ch );$tmpInfo = json_decode($tmpInfo,true);if (!empty($tmpInfo)) {//将数据存到数据库$pdo= new PDO('mysql:host=localhost;dbname=weixin','root','*oscent#51testing');$sql = 'update `sharerecord` set `num`="'.$num.'",`ticket`="'.$tmpInfo['ticket'].'",`createTime`="'.time().'" where openId="'.$openId.'"';//获取数据,执行语句$stmt=$pdo->prepare($sql);$stmt->execute();return $tmpInfo['ticket'];  }}}public function getImageByTicket($ticket,$openId){  $ticurl = "https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=".$ticket;$file = file_get_contents($ticurl);$filename = $openId.".jpg";file_put_contents("./qrcode/".$filename,$file);$dst_path = 'http://test.51testing.org/weixin/qrcode/big.jpg';//水印图片$src_path = 'http://test.51testing.org/weixin/qrcode/'.$openId.'.jpg';//将图片缩小list($width, $height)=getimagesize($src_path);//缩放比例$per=round(90/$width,3);$n_w=$width*$per;$n_h=$height*$per;$new=imagecreatetruecolor($n_w, $n_h);$img=imagecreatefromjpeg($src_path);//copy部分图像并调整imagecopyresized($new, $img,0, 0,0, 0,$n_w, $n_h, $width, $height);//图像输出新图片、另存为imagejpeg($new, "./qrcode/".$openId.".jpg");//水印图片地址$src_path1 = 'http://test.51testing.org/weixin/qrcode/'.$openId.'.jpg';$dst = imagecreatefromstring(file_get_contents($dst_path));$src1 = imagecreatefromstring(file_get_contents($src_path1));//获取水印图片的宽高list($src_w, $src_h) = getimagesize($src_path1);//将水印图片复制到目标图片上,最后个参数50是设置透明度,这里实现半透明效果,两个20是控制水印坐标位置imagecopymerge($dst, $src1, 350, 845, 0, 0, $src_w, $src_h, 80);//创建图片的实例imagejpeg($dst, './qrcode/'.$openId.'.jpg');//水印图片2$userPic = $this->getUserInfos($openId);$src_path2 = $userPic['headimgurl'];
ini_set('default_socket_timeout', 1);$src2 = imagecreatefromstring(file_get_contents($src_path2));//获取水印图片的宽高// list($src_w, $src_h) = getimagesize($src_path);//将水印图片复制到目标图片上,最后个参数50是设置透明度,这里实现半透明效果,两个20是控制水印坐标位置imagecopymerge($dst, $src2, 180, 845, 0, 0, 132, 132, 80);//创建图片的实例imagejpeg($dst, './qrcode/'.$openId.'.jpg');imagedestroy($dst);imagedestroy($new);imagedestroy($img);}//上传图片public function uploadImage($accessToken,$fromUsername){$file_info=array('filename'=>'/weixin/qrcode/'.$fromUsername.'.jpg',  //图片相对于网站根目录的路径);$type = "image";$real_path="{$_SERVER['DOCUMENT_ROOT']}{$file_info['filename']}";$filedata= array("media"=>"@{$real_path}",'form-data'=>$file_info);$url = "https://api.weixin.qq.com/cgi-bin/material/add_material?access_token=".$accessToken."&type=".$type;$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_POST, 1);curl_setopt($curl, CURLOPT_POSTFIELDS, $filedata);    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);$output = curl_exec($curl);$output = json_decode($output,true);curl_close($curl);return $output;}//自定义菜单public function createmenu(){$data='{"button":[{    "type":"view","name":"发现","url":"http://quan.51testing.com/pcQuan/index.html"},{"type":"view","name":"问答","url" :"http://quan.51testing.com/original/pages/chat.html?footIndex=1"}       ]}'; $access_token=$this->getAccessToken();$url="https://api.weixin.qq.com/cgi-bin/menu/create?access_token=".$access_token;  // $result=postcurl($url,$data); $ch = curl_init();curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);curl_setopt($ch, CURLOPT_POST, TRUE);curl_setopt($ch, CURLOPT_POSTFIELDS, $data);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);$output = curl_exec($ch);curl_close($ch);}public function sendTplToShare($num){$pdo= new PDO('mysql:host=localhost;dbname=weixin','root','*oscent#51testing');$sql = 'select shareNum,openId from `sharerecord` where num="'.$num.'"';$stmt = $pdo->prepare($sql);$stmt->execute();$data = $stmt->fetchAll(PDO::FETCH_ASSOC);$shareNum = $data['0']['shareNum'];$openId = $data['0']['openId'];$accessToken = $this->getAccessToken();$url = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=".$accessToken;if (!empty($shareNum) && $shareNum<2) {$data = array('touser'          => $openId,'template_id'     => 'Fb6osCvyLG21LLf9oUyZtGH0BexQqXGqnjlLh4QQ2nM','data' => array('first' => array('value' => '你好,重要通知!','color' => '#173177'),'keyword1'  => array( // 活动名称'value' => '有一位小伙伴帮你提升了人气!','color' => '#173177'),'keyword2'  => array( // 报名状态'value' => '你离目标还需'.(2-$shareNum).'人!','color' => '#173177'),'remark'    => array('value' => '继续努力,将海报分享给您的朋友,马上就可以免费领取《测试工程师第五项修炼》课程','color' => '#173177')));}elseif ($shareNum>1) {$data = array('touser'        => $openId, 'template_id'   => 'd9hMW7f46o2i8vMe5f_KI6vkP4303qS8oK-xdFUl3vY','url'           => 'xxx','data' => array('first' => array('value' => '恭喜您已完成任务,获得《测试工程师第五项修炼》课程学习资格','color' => '#173177'),'keyword1' => array( // 活动名称'value' => '点击左下角【详情】,马上免费领取《测试工程师第五项修炼》课程','color' => '#173177'),'keyword2' => array( // 完成时间'value' => date('Y-m-d H:i:s',time()) ,'color' => '#173177'),'remark' => array('value' => '','color' => '#173177')));}$data = json_encode($data);$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_CONNECTTIMEOUT, 10);curl_setopt($ch, CURLOPT_POST, 1);curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);curl_setopt($ch, CURLOPT_POSTFIELDS, $data);curl_setopt($ch, CURLOPT_HTTPHEADER,array('Content-Type: application/json'));curl_exec($ch);curl_close($ch);}//客服接口,回复文本内容public function getSeverice($fromUsername,$accessToken){//调用客服接口$url = "https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=".$accessToken;$data = '{"touser":"'.$fromUsername.'","msgtype":"text","text":{"content":"免费领取<<测试工程师第五项修炼》课程权限

在下方获取任务海报,分享到微信朋友圈

只要好友扫码二维码关注公众号,即可提升人气值

人气值>=2(有2个同学扫码)
即可完成任务,活动免费领取链接

活动有效期至:2018-08-31"
}
}’;
ch=curlinit();curlsetopt(ch = curl_init(); curl_setopt(ch=curli​nit();curls​etopt(ch, CURLOPT_URL, url);curlsetopt(url); curl_setopt(url);curls​etopt(ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt(ch,CURLOPTSSLVERIFYHOST,FALSE);curlsetopt(ch, CURLOPT_SSL_VERIFYHOST, FALSE); curl_setopt(ch,CURLOPTS​SLV​ERIFYHOST,FALSE);curls​etopt(ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, data);curlsetopt(data); curl_setopt(data);curls​etopt(ch, CURLOPT_RETURNTRANSFER, 1);
output=curlexec(output = curl_exec(output=curle​xec(ch);
curl_close(KaTeX parse error: Expected 'EOF', got '}' at position 12: ch); }̲ public f…fromUsername,$accessToken)
{
$ticket = this−&gt;getTicketByToken(this-&gt;getTicketByToken(this−>getTicketByToken(accessToken,$fromUsername);
//通过ticket 获取 二维码图片
$qrcodeUrl = this−&gt;getImageByTicket(this-&gt;getImageByTicket(this−>getImageByTicket(ticket,$fromUsername);
//将图片上传到微信公众平台作为素材 将 imageId存到数据库
$imageInfo = this−&gt;uploadImage(this-&gt;uploadImage(this−>uploadImage(accessToken,$fromUsername);
$imageId = $imageInfo[‘media_id’];
$pdo= new PDO(‘mysql:host=localhost;dbname=weixin’,‘xx’,‘xxx’);
sql=′update‘sharerecord‘set‘imageId‘=&quot;′.sql = 'update `sharerecord` set `imageId`= &quot;'.sql=′update‘sharerecord‘set‘imageId‘="′.imageId.’" where openId="’.$fromUsername.’"’;
//获取数据,执行语句
stmt=stmt=stmt=pdo->prepare($sql);
$stmt->execute();
KaTeX parse error: Expected '}', got 'EOF' at end of input: … "touser":"'.fromUsername.’",
“msgtype”:“image”,
“image”:
{
“media_id”:"’.$imageId.’"
}
}’;
url=&quot;https://api.weixin.qq.com/cgi−bin/message/custom/send?accesstoken=&quot;.url = &quot;https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=&quot;.url="https://api.weixin.qq.com/cgi−bin/message/custom/send?accesst​oken=".accessToken;
ch=curlinit();curlsetopt(ch = curl_init(); curl_setopt(ch=curli​nit();curls​etopt(ch, CURLOPT_URL, url);curlsetopt(url); curl_setopt(url);curls​etopt(ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt(ch,CURLOPTSSLVERIFYHOST,FALSE);curlsetopt(ch, CURLOPT_SSL_VERIFYHOST, FALSE); curl_setopt(ch,CURLOPTS​SLV​ERIFYHOST,FALSE);curls​etopt(ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, data);curlsetopt(data); curl_setopt(data);curls​etopt(ch, CURLOPT_RETURNTRANSFER, 1);
output=curlexec(output = curl_exec(output=curle​xec(ch);
curl_close(KaTeX parse error: Expected 'EOF', got '}' at position 12: ch); }̲ public fun…accessToken)
{
url=′https://api.weixin.qq.com/customservice/kfaccount/add?accesstoken=′.url = 'https://api.weixin.qq.com/customservice/kfaccount/add?access_token='.url=′https://api.weixin.qq.com/customservice/kfaccount/add?accesst​oken=′.accessToken;
$data = ‘{
“kf_account” : “xx”,
“nickname” : “客服1”,
“password” : “systemsystem”,
}’;
ch=curlinit();curlsetopt(ch = curl_init(); curl_setopt(ch=curli​nit();curls​etopt(ch, CURLOPT_URL, url);curlsetopt(url); curl_setopt(url);curls​etopt(ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt(ch,CURLOPTSSLVERIFYHOST,FALSE);curlsetopt(ch, CURLOPT_SSL_VERIFYHOST, FALSE); curl_setopt(ch,CURLOPTS​SLV​ERIFYHOST,FALSE);curls​etopt(ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, data);curlsetopt(data); curl_setopt(data);curls​etopt(ch, CURLOPT_RETURNTRANSFER, 1);
output=curlexec(output = curl_exec(output=curle​xec(ch);
curl_close(KaTeX parse error: Expected 'EOF', got '}' at position 10: ch); }̲ public funct…openId)
{
$accessToken = $this->getAccessToken();
url=′https://api.weixin.qq.com/cgi−bin/user/info?accesstoken=′.url = 'https://api.weixin.qq.com/cgi-bin/user/info?access_token='.url=′https://api.weixin.qq.com/cgi−bin/user/info?accesst​oken=′.accessToken.’&openid=’.$openId.’&lang=zh_CN’;
curl=curlinit();//启动一个CURL会话curlsetopt(curl = curl_init(); // 启动一个CURL会话 curl_setopt(curl=curli​nit();//启动一个CURL会话curls​etopt(curl, CURLOPT_URL, url);curlsetopt(url); curl_setopt(url);curls​etopt(curl, CURLOPT_HEADER, 0);
curl_setopt(curl,CURLOPTRETURNTRANSFER,1);curlsetopt(curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt(curl,CURLOPTR​ETURNTRANSFER,1);curls​etopt(curl, CURLOPT_SSL_VERIFYPEER, false); // 跳过证书检查
//curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, true); // 从证书中检查SSL加密算法是否存在
tmpInfo=curlexec(tmpInfo = curl_exec(tmpInfo=curle​xec(curl); //返回api的json对象
//关闭URL请求
curl_close($curl);
userInfo=jsondecode(userInfo = json_decode(userInfo=jsond​ecode(tmpInfo,true);
return $userInfo;
}

}

微信 客服消息 发送 微信会回调三次的问题相关推荐

  1. java 微信客服消息_微信公众号客服消息提醒

    微信客服消息提醒: public static void Test(String openid) throws Exception{ String token = getWeiXinAccessTok ...

  2. php公众号客服消息图文,微信公众号开发系列-发送客服消息(示例代码)

    下面是做微信公众号开发用到最多的两个客服消息发送类型,文本信息和图文信息. 1.发送文本消息{ "touser":"OPENID", "msgtype ...

  3. 微信客服为什么不能人工服务器,微信客服消息格式限制及功能

    微信客服消息格式限制及功能,不知小伙伴们有没有关注过微信客服,有没有接触过微信客服.下面小编就来为大家讲解一下微信客服消息格式限制及功能. 微信客服消息格式有什么限制? 文字:长度不得超过600字. ...

  4. java 发送客服消息,Java调用微信客服消息实现发货通知的方法详解

    本文实例讲述了java调用微信客服消息实现发货通知的方法.分享给大家供大家参考,具体如下: 个人说明:这是一个样例,微信客户消息有很多种,我现在用的是公众号发送消息.样子如下图. 说明:下面开始代码部 ...

  5. 微信客服消息跳转h5,回复关键字,跳转小程序方式全集

    微信客服消息点击跳转H5: <a href="https://www.baidu.com">打开百度</a> 微信客服消息点击跳转小程序: 文本内容< ...

  6. 小程序统一服务消息_小程序客服消息接入微信教程

    很多商家在咨询小程序,都会咨询手机上能不能接待客户,当然可以,但需要开通客服助手小程序,下面就和大家分享一下小程序客服消息接入微信教程? 基本流程:客服入口-添加绑定客服微信号-用绑定客服微信号扫码- ...

  7. 微信客服消息html链接,微信公众号利用客服消息和模板消息实现微信群发

    1.关于群发接口和消息接口 关于群发接口 1.订阅号每天可以群发消息一条,服务号每月(自然月)四条的群发权限.开发者模式下,可以通过高级群发接口,实现更灵活的群发能力. 2.注意 ● 对于认证订阅号, ...

  8. 微信客服消息开发,报45047,44004错误码

    中途接手的项目,需求是为微信小程序接入智能客服功能,我在实现后台功能代码后,测试发现自定义的客服回复消息没有发送过来,后台返回45047错误码: 45047错误码 小程序发送客服消息 返回:{&quo ...

  9. 关于微信客服消息 40001和45015 模板消息 errcode:40037 遇到的自己挖的坑

    2019独角兽企业重金招聘Python工程师标准>>> 40001官方给的是token超时,每天都有几千个40001,开始超时刷新时间设定的7200秒,一直提示40001然后就给改成 ...

  10. 小程序,公众号微信客服消息开发

    背景:第三方公司已经开发好微信的客服消息对话框.要求我们公司开发的小程序和公众号增加一个按钮,点击后会跳转到第三方公司开发好的客服消息对话框里. 首先,小程序的要去小程序管理后台,绑定对应的企业ID和 ...

最新文章

  1. [转载]eclipse的远程调试功能配置
  2. 基于软件开发对嵌入式开发的思考
  3. HNU 2015暑期新队员训练赛2 H Blanket
  4. 数据库 | 菜鸟成长记之MySQL数据库
  5. NYOJ516(优化)
  6. mybatis一级缓存二级缓存
  7. 基于meanshift的手势跟踪与电脑鼠标控制(手势交互系统)
  8. 离职交接文档_离职程序员交接工作被同事怒怼:每一行代码都讲清楚,不然投诉你...
  9. 【回归损失函数】L1(MAE)、L2(MSE)、Smooth L1 Loss详解
  10. excel匹配_Excel常用的关联匹配函数
  11. 语音识别相关书籍抖音十大先看哪一本最好
  12. 极通EWEBS远程接入v4.2 XP专版
  13. 电信中兴f452光猫路由改桥接最简单的方式,亲自体验成功。
  14. SPSS--Friedman检验步骤
  15. 设计一个对象池(Anno.XObjectPool)
  16. Aqara绿米董事长游延筠专访:以用户体验为出发点,打造更懂你的家
  17. AriaNG保存服务器信息,安装Aria2+AriaNg
  18. 最新云智推任务提交版拉新任务分销系统源码+功能强大
  19. execute(),executeQuery(),executeUpdate()和executeBatch()的使用与区别
  20. 计算机如何用蓝牙实现文件传输,Win10系统电脑通过蓝牙进行传输文件操作步骤...

热门文章

  1. 010 《你不理财,财不理你》读书笔记
  2. 1209 实验三同学评论
  3. 微信邮箱怎么弄怎么写?手机可以移动办公吗?
  4. 5G技术在广播电视中的应用方式
  5. SAP 采购信息记录
  6. ZYB's Biology
  7. 编写程序,创建类Mymath,计算圆的周长和面积以及球的表面积和体积,并编写测试代码,结果均保留两位小数。
  8. css3复习知识点概括1(根据W3S顺序)
  9. 系统设计面试题之 怎么设计一个打分系统
  10. 抑郁症自测量表测试软件,科学网-抑郁症自测量表(SDS)-李侠的博文