白羽
2019-01-08
来源 :网络
阅读 940
评论 0
摘要:本文将带你了解微信开发31----微信群发消息4,希望本文对大家学微信有所帮助。
本文将带你了解微信开发31----微信群发消息4,希望本文对大家学微信有所帮助。
index.php代码如下:
checkSignature()){ echo $echoStr; exit; } } public function responseMsg() { //get post data, May be due to the different environments $postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; //extract post data if (!empty($postStr)){ /* libxml_disable_entity_loader is to prevent XML eXternal Entity Injection, the best way is to check the validity of xml by yourself */ // 使用simplexml技术对xml进行解析 // libxml_disable_entity_loader(true), 是从安全性考虑,为了防止xml外部注入, //只对xml内部实体内容进行解析 libxml_disable_entity_loader(true); //加载 postStr 字符串 $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA); $fromUsername = $postObj->FromUserName; $toUsername = $postObj->ToUserName; $keyword = trim($postObj->Content); $time = time(); global $tmp_arr; //当用户公众号有互动时,我们将会动hd_time字段更新 $connect = mysql_connect('localhost','root','root') or die('数据库链接失败'); mysql_select_db('wxdb',$connect); mysql_query('set names utf8'); $sql = "update qf_users set hd_time='{$time}' where openid='{$fromUsername}'"; mysql_query($sql, $connect); //根据接收到的消息类型,来进行分支处理(switch) switch($postObj->MsgType) { case 'event': if($postObj->Event == 'subscribe') { $contentStr = "欢迎关注leigood微信测试号噢"; $resultStr = sprintf($tmp_arr['text'], $fromUsername, $toUsername, $time, $contentStr); echo $resultStr; //消息回复后,我们将该用户加入qf_users表里面 $time = time(); $sql = "insert into qf_users (id,openid,hd_time) values(NULL,'{$fromUsername}','{$time}')"; mysql_query($sql,$connect); } //如果对方取消关注了,那么我们就需要从数据库里面删除掉 if($postObj->Event == 'unsubscribe'){ $sql = "delete from qf_users where openid='{$fromUsername}'"; mysql_query($sql,$connect); } break; case 'text': //回复文本模块 //这里开始测试客服消息接口了 if($keyword == '文本'){ //获取token require 'get_token.php'; $contentStr = '这是客服接口的回复,我们可以帮助您什么?'; //对发送的内容进行urlencode编码,防止中文乱码 $contentStr = urlencode($contentStr); //到时候我们我发送的内容我们放到一个数组里面去了 $content_arr = array('content'=>"{$contentStr}"); //这里的意思是将来我要发送消息给这个用户 $reply_arr = array('touser'=>"{$fromUsername}",'msgtype'=>'text','text'=>$content_arr); //下一步就是将编码转成规定的json格式 $post = json_encode($reply_arr); //url解码,如果不解码他将会发来一段二进制代码 $post = urldecode($post); $url = "https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token={$access_token}"; //这里我们来使用类的继承机制,来简化代码 $this -> http_request($url,$post); //这里是可以回复多条消息的,只需要在执行下这个函数即可 //$this -> http_request($url,$post); }else{ $contentStr = '您输入的格式有误'; $resultStr = sprintf($tmp_arr['text'], $fromUsername, $toUsername, $time, $contentStr); echo $resultStr; } break; case 'image': //处理用户上传图片 $media_id = $postObj -> MediaId; //获取到用户上传的图片的mediaid $resultStr = sprintf($tmp_arr['image'], $fromUsername, $toUsername, $time, $media_id); echo $resultStr; //将图片保存到本地服务器的文件系统 //1.先给图片创建一个名字 $image_file_name = time().'.jpg'; //2.获取该图片的内容 $image_file = file_get_contents($postObj->PicUrl); //3.保存到本地服务器的文件系统 //提醒:一定要保证您创建的文件夹是www用户可读可写,否则无法保存该图片到文件夹下 file_put_contents("./uploadimage/".$image_file_name,$image_file); //将图片的路径和相关信息入库 //1.创建一张表 //2.链接mysql数据库,并且添加图片信息 $connect = mysql_connect('localhost','root','root'); mysql_select_db('wxdb',$connect); mysql_query('set names utf8'); $media_path = "./uploadimage/".$image_file_name; //路径 $sql = "insert into keep_image_uploads (id,openid,media_id,media_path) values(NULL,'{$fromUsername}','{$media_id}','{$media_path}')"; mysql_query($sql,$connect); break; case 'voice': //处理用户上传语言的业务逻辑 $media_id = $postObj -> MediaId; //获取media_id的id号 $resultStr = sprintf($tmp_arr['voice'], $fromUsername, $toUsername, $time, $media_id); echo $resultStr; break; case 'location': //处理用户上传的地理位置信息 $Location_X = $postObj -> Location_X; //获取上传地理位置的纬度 $Location_Y = $postObj -> Location_Y; //获取上传地地理位置经度 $contentStr = "您上报的地理位置是:\n经度是:{$Location_Y} \n纬度是: {$Location_X}"; $resultStr = sprintf($tmp_arr['text'], $fromUsername, $toUsername, $time, $contentStr); echo $resultStr; break; case 'link': //接收并回复链接信息 //获取到用户上传的链接信息 $Title = $postObj -> Title; $Url = $postObj -> Url; $contentStr = "{$Title}"; $resultStr = sprintf($tmp_arr['text'], $fromUsername, $toUsername, $time, $contentStr); echo $resultStr; break; } }else { echo ""; exit; } } private function checkSignature() { // you must define TOKEN by yourself if (!defined("TOKEN")) { throw new Exception('TOKEN is not defined!'); } $signature = $_GET["signature"]; $timestamp = $_GET["timestamp"]; $nonce = $_GET["nonce"]; $token = TOKEN; $tmpArr = array($token, $timestamp, $nonce); // use SORT_STRING rule sort($tmpArr, SORT_STRING); $tmpStr = implode( $tmpArr ); $tmpStr = sha1( $tmpStr ); if( $tmpStr == $signature ){ return true; }else{ return false; } }}//如果这段代码放在上面,那程序将会报错,因为继承的问题,会显示类没有找到$wechatObj = new wechatCallbackapiTest();//当接入成功后,请注销这句话,否则,会反复验证。//$wechatObj->valid();//添加响应请求的语句$wechatObj->responseMsg();?>
然后修改模版代码,common.php代码如下所示:
<!--{cke_protected}{C}%3C!%2D%2D%3Fphp%0A%20%20%20%20%24tmp_arr%20%3D%20array(%0A%20%20%20%20'text'%20%3D%2D%2D%3E--> <<<xml xml=""><tousername><!--{cke_protected}{C}%3C!%2D%2D%5BCDATA%5B%25s%5D%5D%2D%2D%3E--></tousername><fromusername><!--{cke_protected}{C}%3C!%2D%2D%5BCDATA%5B%25s%5D%5D%2D%2D%3E--></fromusername><createtime>%s</createtime><msgtype><!--{cke_protected}{C}%3C!%2D%2D%5BCDATA%5Btext%5D%5D%2D%2D%3E--></msgtype><content><!--{cke_protected}{C}%3C!%2D%2D%5BCDATA%5B%25s%5D%5D%2D%2D%3E--></content><funcflag>0</funcflag></xml>XML, 'image'=> <<<xml xml=""><tousername><!--{cke_protected}{C}%3C!%2D%2D%5BCDATA%5B%25s%5D%5D%2D%2D%3E--></tousername><fromusername><!--{cke_protected}{C}%3C!%2D%2D%5BCDATA%5B%25s%5D%5D%2D%2D%3E--></fromusername><createtime>%s</createtime><msgtype><!--{cke_protected}{C}%3C!%2D%2D%5BCDATA%5Bimage%5D%5D%2D%2D%3E--></msgtype><img><mediaid><!--{cke_protected}{C}%3C!%2D%2D%5BCDATA%5B%25s%5D%5D%2D%2D%3E--></mediaid></xml>XML, 'voice'=> <<<xml xml=""><tousername><!--{cke_protected}{C}%3C!%2D%2D%5BCDATA%5B%25s%5D%5D%2D%2D%3E--></tousername><fromusername><!--{cke_protected}{C}%3C!%2D%2D%5BCDATA%5B%25s%5D%5D%2D%2D%3E--></fromusername><createtime>%s</createtime><msgtype><!--{cke_protected}{C}%3C!%2D%2D%5BCDATA%5Bvoice%5D%5D%2D%2D%3E--></msgtype><voice><mediaid><!--{cke_protected}{C}%3C!%2D%2D%5BCDATA%5B%25s%5D%5D%2D%2D%3E--></mediaid></voice></xml>XML, 'music'=> <<<xml xml=""><tousername><!--{cke_protected}{C}%3C!%2D%2D%5BCDATA%5B%25s%5D%5D%2D%2D%3E--></tousername><fromusername><!--{cke_protected}{C}%3C!%2D%2D%5BCDATA%5B%25s%5D%5D%2D%2D%3E--></fromusername><createtime>%s</createtime><msgtype><!--{cke_protected}{C}%3C!%2D%2D%5BCDATA%5Bmusic%5D%5D%2D%2D%3E--></msgtype><music><title><!--{cke_protected}{C}%3C!%2D%2D%5BCDATA%5B%25s%5D%5D%2D%2D%3E--></title><description><!--{cke_protected}{C}%3C!%2D%2D%5BCDATA%5B%25s%5D%5D%2D%2D%3E--></description><musicurl><!--{cke_protected}{C}%3C!%2D%2D%5BCDATA%5B%25s%5D%5D%2D%2D%3E--></musicurl><hqmusicurl><!--{cke_protected}{C}%3C!%2D%2D%5BCDATA%5B%25s%5D%5D%2D%2D%3E--></hqmusicurl></music></xml>XML, 'singlenews'=> <<<xml xml=""><tousername><!--{cke_protected}{C}%3C!%2D%2D%5BCDATA%5B%25s%5D%5D%2D%2D%3E--></tousername><fromusername><!--{cke_protected}{C}%3C!%2D%2D%5BCDATA%5B%25s%5D%5D%2D%2D%3E--></fromusername><createtime>%s</createtime><msgtype><!--{cke_protected}{C}%3C!%2D%2D%5BCDATA%5Bnews%5D%5D%2D%2D%3E--></msgtype><articlecount>1</articlecount><articles><item><title><!--{cke_protected}{C}%3C!%2D%2D%5BCDATA%5B%25s%5D%5D%2D%2D%3E--></title> <description><!--{cke_protected}{C}%3C!%2D%2D%5BCDATA%5B%25s%5D%5D%2D%2D%3E--></description><picurl><!--{cke_protected}{C}%3C!%2D%2D%5BCDATA%5B%25s%5D%5D%2D%2D%3E--></picurl><url><!--{cke_protected}{C}%3C!%2D%2D%5BCDATA%5B%25s%5D%5D%2D%2D%3E--></url></item></articles></xml> XML, 'newses'=> <<<xml xml=""><tousername><!--{cke_protected}{C}%3C!%2D%2D%5BCDATA%5B%25s%5D%5D%2D%2D%3E--></tousername><fromusername><!--{cke_protected}{C}%3C!%2D%2D%5BCDATA%5B%25s%5D%5D%2D%2D%3E--></fromusername><createtime>%s</createtime><msgtype><!--{cke_protected}{C}%3C!%2D%2D%5BCDATA%5Bnews%5D%5D%2D%2D%3E--></msgtype><articlecount>4</articlecount><articles><item><title><!--{cke_protected}{C}%3C!%2D%2D%5BCDATA%5B%25s%5D%5D%2D%2D%3E--></title> <description><!--{cke_protected}{C}%3C!%2D%2D%5BCDATA%5B%25s%5D%5D%2D%2D%3E--></description><picurl><!--{cke_protected}{C}%3C!%2D%2D%5BCDATA%5B%25s%5D%5D%2D%2D%3E--></picurl><url><!--{cke_protected}{C}%3C!%2D%2D%5BCDATA%5B%25s%5D%5D%2D%2D%3E--></url></item><item><title><!--{cke_protected}{C}%3C!%2D%2D%5BCDATA%5B%25s%5D%5D%2D%2D%3E--></title> <description><!--{cke_protected}{C}%3C!%2D%2D%5BCDATA%5B%25s%5D%5D%2D%2D%3E--></description><picurl><!--{cke_protected}{C}%3C!%2D%2D%5BCDATA%5B%25s%5D%5D%2D%2D%3E--></picurl><url><!--{cke_protected}{C}%3C!%2D%2D%5BCDATA%5B%25s%5D%5D%2D%2D%3E--></url></item><item><title><!--{cke_protected}{C}%3C!%2D%2D%5BCDATA%5B%25s%5D%5D%2D%2D%3E--></title> <description><!--{cke_protected}{C}%3C!%2D%2D%5BCDATA%5B%25s%5D%5D%2D%2D%3E--></description><picurl><!--{cke_protected}{C}%3C!%2D%2D%5BCDATA%5B%25s%5D%5D%2D%2D%3E--></picurl><url><!--{cke_protected}{C}%3C!%2D%2D%5BCDATA%5B%25s%5D%5D%2D%2D%3E--></url></item><item><title><!--{cke_protected}{C}%3C!%2D%2D%5BCDATA%5B%25s%5D%5D%2D%2D%3E--></title> <description><!--{cke_protected}{C}%3C!%2D%2D%5BCDATA%5B%25s%5D%5D%2D%2D%3E--></description><picurl><!--{cke_protected}{C}%3C!%2D%2D%5BCDATA%5B%25s%5D%5D%2D%2D%3E--></picurl><url><!--{cke_protected}{C}%3C!%2D%2D%5BCDATA%5B%25s%5D%5D%2D%2D%3E--></url></item></articles></xml> XML, 'video'=> <<<xml xml=""><tousername><!--{cke_protected}{C}%3C!%2D%2D%5BCDATA%5B%25s%5D%5D%2D%2D%3E--></tousername><fromusername><!--{cke_protected}{C}%3C!%2D%2D%5BCDATA%5B%25s%5D%5D%2D%2D%3E--></fromusername><createtime>%s</createtime><msgtype><!--{cke_protected}{C}%3C!%2D%2D%5BCDATA%5Bvideo%5D%5D%2D%2D%3E--></msgtype><video><mediaid><!--{cke_protected}{C}%3C!%2D%2D%5BCDATA%5B%25s%5D%5D%2D%2D%3E--></mediaid></video><title><!--{cke_protected}{C}%3C!%2D%2D%5BCDATA%5B%25s%5D%5D%2D%2D%3E--></title><description><!--{cke_protected}{C}%3C!%2D%2D%5BCDATA%5B%25s%5D%5D%2D%2D%3E--></description> </xml>XML); function http_request($url, $data=null){ //我们使用curl函数 //初始化 $ch = curl_init(); //设置变量 curl_setopt($ch, CURLOPT_URL,$url); //这意思是,设置好发送的url地址发送到那 //curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,$url); 这样的意思是对方要不要验证,如果不用则按照下面的即可 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,FALSE); //如果不用验证,这样即可 curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,FALSE); //如果不用验证HOST主机这样即可 if(!empty($data)){ curl_setopt($ch,CURLOPT_POST,1);//启用时会发送一个常规的POST请求,就像表单提交的一样。 curl_setopt($ch,CURLOPT_POSTFIELDS,$data);//全部数据使用HTTP协议中的"POST"操作来 } curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); //将curl_exec()获取的信息以文件流的形式返回,而不是直接输出 //执行 $output = curl_exec($ch); //返回来的值是一个json格式的值 //关闭句柄 curl_close($ch); return $output; }
get_token.php代码如下所示:
<!--{cke_protected}{C}%3C!%2D%2D%3Fphp%0A%20%20%20%20%2F%2F%E5%8E%9F%E7%90%86%EF%BC%8C%E5%B0%B1%E6%98%AF%E4%BD%BF%E7%94%A8curl%E5%87%BD%E6%95%B0%EF%BC%8C%E5%8F%91%E5%87%BAhttp%E8%AF%B7%E6%B1%82%EF%BC%8C%E8%8E%B7%E5%8F%96access_token%0A%20%20%20%20%24appid%20%3D%20'wxed89d8f74fa6fc51'%3B%0A%20%20%20%20%24appsecret%20%3D%20'd4624c36b6795d1d99dcf0547af5443d'%3B%0A%20%20%20%20%24url%20%3D%20%22https%3A%2F%2Fapi.weixin.qq.com%2Fcgi-bin%2Ftoken%3Fgrant_type%3Dclient_credential%26appid%3D%7B%24appid%7D%26secret%3D%7B%24appsecret%7D%22%3B%0A%20%20%20%20%0A%20%20%20%20%2F%2F%E6%88%91%E4%BB%AC%E4%BD%BF%E7%94%A8curl%E5%87%BD%E6%95%B0%0A%20%20%20%20%2F%2F%E5%88%9D%E5%A7%8B%E5%8C%96%0A%20%20%20%20%24ch%20%3D%20curl_init()%3B%0A%20%20%20%20%2F%2F%E8%AE%BE%E7%BD%AE%E5%8F%98%E9%87%8F%0A%20%20%20%20curl_setopt(%24ch%2C%20CURLOPT_URL%2C%24url)%3B%20%2F%2F%E8%BF%99%E6%84%8F%E6%80%9D%E6%98%AF%EF%BC%8C%E8%AE%BE%E7%BD%AE%E5%A5%BD%E5%8F%91%E9%80%81%E7%9A%84url%E5%9C%B0%E5%9D%80%E5%8F%91%E9%80%81%E5%88%B0%E9%82%A3%0A%20%20%20%20%2F%2Fcurl_setopt(%24ch%2C%20CURLOPT_SSL_VERIFYPEER%2C%24url)%3B%20%E8%BF%99%E6%A0%B7%E7%9A%84%E6%84%8F%E6%80%9D%E6%98%AF%E5%AF%B9%E6%96%B9%E8%A6%81%E4%B8%8D%E8%A6%81%E9%AA%8C%E8%AF%81%EF%BC%8C%E5%A6%82%E6%9E%9C%E4%B8%8D%E7%94%A8%E5%88%99%E6%8C%89%E7%85%A7%E4%B8%8B%E9%9D%A2%E7%9A%84%E5%8D%B3%E5%8F%AF%0A%20%20%20%20curl_setopt(%24ch%2C%20CURLOPT_SSL_VERIFYPEER%2CFALSE)%3B%20%2F%2F%E5%A6%82%E6%9E%9C%E4%B8%8D%E7%94%A8%E9%AA%8C%E8%AF%81%EF%BC%8C%E8%BF%99%E6%A0%B7%E5%8D%B3%E5%8F%AF%0A%20%20%20%20curl_setopt(%24ch%2C%20CURLOPT_SSL_VERIFYHOST%2CFALSE)%3B%20%2F%2F%E5%A6%82%E6%9E%9C%E4%B8%8D%E7%94%A8%E9%AA%8C%E8%AF%81HOST%E4%B8%BB%E6%9C%BA%E8%BF%99%E6%A0%B7%E5%8D%B3%E5%8F%AF%0A%20%20%20%20curl_setopt(%24ch%2C%20CURLOPT_RETURNTRANSFER%2C1)%3B%20%2F%2F%E5%B0%86curl_exec()%E8%8E%B7%E5%8F%96%E7%9A%84%E4%BF%A1%E6%81%AF%E4%BB%A5%E6%96%87%E4%BB%B6%E6%B5%81%E7%9A%84%E5%BD%A2%E5%BC%8F%E8%BF%94%E5%9B%9E%EF%BC%8C%E8%80%8C%E4%B8%8D%E6%98%AF%E7%9B%B4%E6%8E%A5%E8%BE%93%E5%87%BA%0A%20%20%20%20%2F%2F%E6%89%A7%E8%A1%8C%0A%20%20%20%20%24output%20%3D%20curl_exec(%24ch)%3B%20%2F%2F%E8%BF%94%E5%9B%9E%E6%9D%A5%E7%9A%84%E5%80%BC%E6%98%AF%E4%B8%80%E4%B8%AAjson%E6%A0%BC%E5%BC%8F%E7%9A%84%E5%80%BC%0A%20%20%20%20%2F%2F%E5%85%B3%E9%97%AD%E5%8F%A5%E6%9F%84%0A%20%20%20%20curl_close(%24ch)%3B%0A%20%20%20%20%2F%2F%E5%AF%B9%E8%BF%94%E5%9B%9E%E7%9A%84json%E7%BB%93%E6%9E%9C%E8%A6%81%E5%B0%86%E4%BB%96%E8%BD%AC%E4%B8%BA%E4%B8%80%E4%B8%AA%E6%95%B0%E7%BB%84%0A%20%20%20%20%24jsoninfo%20%3D%20json_decode(%24output%2Ctrue)%3B%0A%20%20%20%20%2F%2F%E6%B5%8B%E8%AF%95%E4%BB%A5%E4%B8%8B%EF%BC%8C%E7%9C%8B%E4%B8%8B%E6%98%AF%E5%90%A6%E6%8B%BF%E5%88%B0%E8%BF%94%E7%9A%84%E5%9B%9E%E6%95%B0%E7%BB%84%0A%20%20%20%20%2F%2Fvar_dump(%24jsoninfo)%3B%20%0A%20%20%20%20%0A%20%20%20%20%24access_token%20%3D%20%24jsoninfo%5B'access_token'%5D%3B%3C%2Fpre%2D%2D%3E-->
qf.php代码如下:
'{$time}'"; $res = mysql_query($sql); $row = array(); //循环取出48小时用过的用户 while($row = mysql_fetch_assoc($res)){ //这里可以写得更人性化一点,通过表单post过来即可 $contentStr = "这是调试消息群发接口的"; //将openid压进$fromUsername变量里面 $fromUsername = $row['openid']; //因为可能会存在中文所以需要url编码 $contentStr = urlencode($contentStr); //到时候我们我发送的内容我们放到一个数组里面去了 $content_arr = array('content'=>"{$contentStr}"); //这里的意思是将来我要发送消息给这个用户 $reply_arr = array('touser'=>"{$fromUsername}",'msgtype'=>'text','text'=>$content_arr); //下一步就是将编码转成规定的json格式 $post = json_encode($reply_arr); //url解码,如果不解码他将会发来一段二进制代码 $post = urldecode($post); $url = "https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token={$access_token}"; //这里我们来使用类的继承机制,来简化代码 http_request($url,$post); } echo "恭喜您,您已经成功群发消息";
然后在浏览器上进行访问qf.php即可实现群发功能,每刷以下,消息即可群发一条,但注意的是公众号是和客户互动48小时内的客户才可收到消息
本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标移动开发之微信频道!
喜欢 | 0
不喜欢 | 0
您输入的评论内容中包含违禁敏感词
我知道了

请输入正确的手机号码
请输入正确的验证码
您今天的短信下发次数太多了,明天再试试吧!
我们会在第一时间安排职业规划师联系您!
您也可以联系我们的职业规划师咨询:
版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
沪公网安备 31011502005948号