微信开发自动回复_微信开发者中心处配置与微信后台自动回复冲突吗 - CSDN
  • 微信是一个高大上的东西,恩,没错 首先输入网址mp.weixin.qq.com进入微信公众平台 ...一、微信自动回复图片功能 点击接口配置信息修改中的 消息接口使用指南之后 进入公众平台开发者文档 点

    微信是一个高大上的东西,恩,没错

    首先输入网址mp.weixin.qq.com进入微信公众平台

    注册账号和密码(注意的是这里的账号和密码不是微信的账号密码

    进入之后点击左侧开发/开发者工具

    在右侧点击进入公众平台测试账号(因为测试账号的功能比较全,所以选择测试账号


    一、微信自动回复图片功能

    点击接口配置信息修改中的 消息接口使用指南之后 进入公众平台开发者文档


    点击开始开发中的 接口指南 右侧第三步之上有一个PHP实例代码(下载之后放到自己的服务器

    下面就是下载的php实例代码

    其中 要验证TOKEN中的值要和接口信息中的配置一致

    1. define("TOKEN""qweqwe");  


    回复图片需要用到media_id

    获取media_id需要获取access_token(每个access_token的生存时间是7200秒,建议把access加入缓存)


    获取media_id


    图片

    回复的时候就回复图片


    二、自定义菜单

    自定义菜单首先需要获取access_token和上边一样

    点击自定义菜单中的菜单创建接口

    1. <?php  
    2. header('content-type:text/html;charset=utf-8');  
    3. define("APPID""wx15ca9f0520bc2e4c");  
    4. define("APPSECRET""2fadf1c74655b7a47253de19b7a23d7d");  
    5. $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".APPID."&secret=".APPSECRET;  
    6. $arr = file_get_contents($url);  
    7. $arr = json_decode($arr,true);  
    8. $access_token = $arr['access_token'];  
    9. $url = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=".$access_token;  
    10. $curl = new curl();  
    11. $data = ' {  
    12.      "button":[  
    13.      {    
    14.           "type":"click",  
    15.           "name":"今日歌曲",  
    16.           "key":"V1001_TODAY_MUSIC"  
    17.       },  
    18.       {  
    19.            "name":"菜单",  
    20.            "sub_button":[  
    21.            {      
    22.                "type":"view",  
    23.                "name":"搜索",  
    24.                "url":"http://www.soso.com/"  
    25.             },  
    26.             {  
    27.                "type":"view",  
    28.                "name":"视频",  
    29.                "url":"http://v.qq.com/"  
    30.             },  
    31.             {  
    32.                "type":"click",  
    33.                "name":"赞一下我们",  
    34.                "key":"V1001_GOOD"  
    35.             }]  
    36.        }]  
    37.  }';  
    38. echo $curl->send($url,'POST',$data);  
    39.   
    40. class curl    
    41.     {    
    42.             
    43.         function send($url,$method,$data='')    
    44.         {    
    45.             $ch = curl_init();   //1.初始化      
    46.             curl_setopt($ch, CURLOPT_URL, $url); //2.请求地址      
    47.             curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $method);//3.请求方式      
    48.             //4.参数如下      
    49.             curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);//https      
    50.             curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);      
    51.             curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)');//模拟浏览器      
    52.             curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);      
    53.             curl_setopt($ch, CURLOPT_AUTOREFERER, 1);       
    54.             if($method=="POST"){//5.post方式的时候添加数据      
    55.                 curl_setopt($ch, CURLOPT_POSTFIELDS, $data);      
    56.             }      
    57.             curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);      
    58.             $tmpInfo = curl_exec($ch);//6.执行            
    59.             return $tmpInfo;        
    60.         }    
    61.     }   
    62. ?>  

    运行php文件,再重新关注即可显示菜单
    展开全文
  • 后端没什么说的,根据微信公众平台的自动回复建表,添加数据即可 需要强调的是 规则、关键词、回复内容需要建三个表 规则表中关键词和回复内容拼接id成字符串 存入表中 二、前端回复逻辑 $this->app->...

    自动回复这块是比较麻烦的

    一、后端回复管理

    后端没什么说的,根据微信公众平台的自动回复建表,添加数据即可

    需要强调的是 规则、关键词、回复内容需要建三个表

    规则表中关键词和回复内容拼接id成字符串 存入表中

    二、前端回复逻辑

    $this->app->server->push(function($message){
    
        switch ($message['MsgType']) {
            case 'event':
                //若通过扫描二维码关注
                if (isset($message['EventKey'])){
                    $class = "\\app\\common\\library\\wechat\\message\\" . ucfirst($message['MsgType']);
    
                    class_exists($class) && new $class($message);
                }
    
                //关注事件回复
                $content = db('wx_reply_receive')->where('reply_type=1')->find();
                switch ($content['content_type']){
                    case 1:
                        $contentStr = $content['content'];
                        $contentStr = $this->replace_str($contentStr);
                        $resultStr = new Text($contentStr);
                        return $resultStr;
                        break;
                    case 2:
                        $contentStr = $content['content_id'];
                        $resultStr = new Image($contentStr);
                        return $resultStr;
                        break;
                    case 3:
                        $contentStr = $content['content_id'];
                        $resultStr = new Voice($contentStr);
                        return $resultStr;
                        break;
                    case 4:
                        $contentStr = $content['content_id'];
                        $resultStr = new Video($contentStr);
                        return $resultStr;
                        break;
                    default:
                        break;
    
                }
                break;
    
            //关键词回复
            case 'text':
                $keyword = $message['Content'];
    
                if(!empty( $keyword )){
    
                    $where['keyword'] = $keyword;
    
                    $where['status'] = 1;
    
                    $content = db('wx_reply')
    
                        ->where($where)
    
                        ->whereBetweenTimeField('start_time','end_time')
    
                        ->select();
    
                    if (empty($content)){
                        $len = mb_strlen($keyword);
    
                        if ($len<=15){
                            $words = $this->split_str($keyword);
    
                            $map[] = array('status','=',1);
    
                            $map[] = array('keyword','in',$words);
    
                            $bcont = db('wx_reply')
    
                                ->where($map)
    
                                ->whereBetweenTimeField('start_time','end_time')
    
                                ->select();
                            if (!empty($bcont)){
                                foreach ($bcont as $value){
                                    if ($value['matching_mode']==0){
                                        if ($value['reply_mode']==0){   //回复方式  全部回复
                                            switch ($value['reply_type']){
                                                case 1:
                                                    $contentStr = $value['content'];
                                                    $contentStr = $this->replace_str($contentStr);
                                                    $resultStr = new Text($contentStr);
                                                    return $resultStr;
                                                    break;
                                                case 2:
                                                    $contentStr = $value['media_id'];
                                                    $resultStr = new Image($contentStr);
                                                    return $resultStr;
                                                    break;
                                                case 3:
                                                    $contentStr = $value['media_id'];
                                                    $resultStr = new Voice($contentStr);
                                                    return $resultStr;
                                                    break;
                                                case 4:
                                                    $contentStr = $value['media_id'];
                                                    $resultStr = new Video($contentStr);
                                                    return $resultStr;
                                                    break;
                                                default:
                                                    break;
                                            }
                                        }else{
                                            switch ($value['reply_type']){
                                                case 1:
                                                    $contentStr = $value['content'];
                                                    $contentStr = $this->replace_str($contentStr);
                                                    $resultStr = new Text($contentStr);
                                                    return $resultStr;
                                                    break;
                                                case 2:
                                                    $contentStr = $value['media_id'];
                                                    $resultStr = new Image($contentStr);
                                                    return $resultStr;
                                                    break;
                                                case 3:
                                                    $contentStr = $value['media_id'];
                                                    $resultStr = new Voice($contentStr);
                                                    return $resultStr;
                                                    break;
                                                case 4:
                                                    $contentStr = $value['media_id'];
                                                    $resultStr = new Video($contentStr);
                                                    return $resultStr;
                                                    break;
                                                default:
                                                    break;
                                            }
                                            break;
                                        }
                                    }
                                }
                            }else{
                                $receive = db('wx_reply_receive')->where('reply_type=0')->find();
                                switch ($receive['content_type']){
                                    case 1:
                                        $contentStr = $receive['content'];
                                        $contentStr = $this->replace_str($contentStr);
                                        $resultStr = new Text($contentStr);
                                        return $resultStr;
                                        break;
                                    case 2:
                                        $contentStr = $receive['content_id'];
                                        $resultStr = new Image($contentStr);
                                        return $resultStr;
                                        break;
                                    case 3:
                                        $contentStr = $receive['content_id'];
                                        $resultStr = new Voice($contentStr);
                                        return $resultStr;
                                        break;
                                    case 4:
                                        $contentStr = $receive['content_id'];
                                        $resultStr = new Video($contentStr);
                                        return $resultStr;
                                        break;
                                    default:
                                        break;
    
                                }
                            }
                        }
    
    
                    }
    
    
    
                }
    
                break;
            default:
                return '收到其它消息';
                break;
        }
    
    });
    
    $this->app->server->serve()->send();

     关键词分割

    //分解关键词
        public function split_str($str){
            $len = strlen($str);
    
            // $data = str_split($str);
            for($i = 1; $i<=$len;$i++){
                for($j = 0; $j < $len; $j++) {
                    $data[] = mb_substr($str,$j,$i);
                }
    
            }
    
            $data = array_unique($data);
    
            $data = array_filter($data);
    
            return $data;
        }

    处理html标签,包括<p></p>、<br>、&nbsp;等 

    //微信端显示处理
        public function replace_str($str){
    
            $str = str_replace('<p>','',$str);
            $str = str_replace('</p>',"\n",$str);
            $str = str_replace('&nbsp;',"  ",$str);
            $str = str_replace('<br>',"\n",$str);
            $str = str_replace('&amp;','&',$str);
    
            return $str;
        }

    大体步骤就是这样,业务逻辑根据需求更改即可

    展开全文
  • 基于 laravel框架的微信公众号的自动回复功能。主要是图文消息和文本类型

    最近开始做公司的微信项目,深切的感受到了微信的不同,做微信是需要从头开始好好学的,在此记录一下学习微信的过程,也希望以后能根据这些文章迅速掌握微信开发的知识。少踩坑,,(laravel框架)

    1、首先需要进入微信公众号--》基本配置--》填上你的服务器信息--》验证TOKEN,获取appId和appkey

    2、下载官方的SDK文件,参考文档:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140543

    demo下载地址:http://www.cnblogs.com/txw1958/p/tutorials-of-wechat-public-platform.html       方倍工作室 的。

    3、首先需要明确(1)验证token通过,证明你的服务器可以和微信进行交互

    (2)进入微信页面,发送消息,此时,后台应接受消息,并判断消息类型

    (3)根据消息类型,拼接不同的xml数据,返回给模板

    (4)然后就实现了微信上自动回复的功能了。

    4、


    以上为验证token之后,在控制器设置的微信入口文件:这个文件也就是demo中的reponseMsg()方法:

    主要用于获得微信发送过来的数据,然后再把tousername,fromusername等信息放到一起,提取用户发送消息的类型$event,并且请求下一个方法:

    5、

    这个方法主要是为了判断请求的类型,根据不同的类型会有不同的处理方法。在此只处理text类型的数据,并且调用text方法,获取拼接的数据。最后返回给响应方法handle_response()方法。

    6、

    在这里,我们把回复的内容都给写死了,大家到时候也完全可以从数据库读出这些数据。里面就是简单的拼接了一些图文信息,然后把这些信息返回。数组$arr是方便在模板上输出图文消息。

    7、

    该控制器主要是根据传过来的event不同,判断该调用哪个模板,该回复什么样的消息等。如果$event==text,则调用默认的模板:$xml = view(wechat.tpl_reply_text) ;如果$event为news,则需要返回图文消息,我们把数据都放到数组里面,在模板上输出即可。

    8、

    <xml>
      <ToUserName><![CDATA[{{$ToUserName}}]]></ToUserName>
      <FromUserName><![CDATA[{{$FromUserName}}]]></FromUserName>
      <CreateTime>{{$CreateTime}}</CreateTime>
      <MsgType><![CDATA[news]]></MsgType>
      <ArticleCount>{{$ArticleCount}}</ArticleCount>
      <Articles>
    @foreach ($news  as $k => $v)
      <item>
      <Title><![CDATA[{{$v['Title']}}]]></Title>
      <Description><![CDATA[{{$v['Description']}}]]></Description>
      <PicUrl><![CDATA[{{$v['PicUrl']}}]]></PicUrl>
      <Url><![CDATA[{{$v['Url']}}]]></Url>
      </item>
    @endforeach
      </Articles>
    </xml>

    这就是模板部分:直接输出即可。

    9、在此已经是完成了微信的自动回复功能。用户输入指定的内容的时候,,我们也回复指定的内容回去。

    微信官方的给的demo被拆分了,没有按照官方上那种返回xml数据,而是采用了laravel的模板来输出。


    10、总结:虽然整体来说不够简洁,但也算是实现了功能,在此做个记录。以后水平高了再完善完善。

    展开全文
  • 一、 微信公众号开发以及消息自动回复 1、第一步先注册微信公众平台进入。 2、接下来点击首页开发中基本配置。 3、点击开启第三方接口功能,点击启用后首页功能中的功能不能使用 4、然后我们可以进入开发中开发者...

    一、 微信公众号开发以及消息自动回复

    1、第一步先注册微信公众平台进入。

    2、接下来点击首页开发中基本配置。

    3、点击开启第三方接口功能,点击启用后首页功能中的功能不能使用

    4、然后我们可以进入开发中开发者工具,开发者工具中有一个公众平台测试账号,点击进入,进行手机扫码登录

    5、进入公众号测试管理,测试管理中有测试号的appIDappsecret信息,还有接口配置信息的修改,开发者文档中有接入指南,里面有个消息接口文档下载,将消息接口文档上传到线上服务器中,然后修改接口配置url写入消息接口文档的地址,还有Token要与接口文档中的token一致,这样才能与测试号连接。

    6、我们可以通过线上服务器中的文档中的修改,来进行一些消息自动回复的修改。也可以通过配置进行一些回复语音、图片功能。

    二、 自定义菜单

    1、自定义菜单需要调用接口。

    2、首先把接口连接中的appidappsecret替换成我们自己的,使用file_get_contents获取url,通过使用json_decode(),把返回的json格式内容转换成数组格式,获取页面内容调用接口首先需要获得access_token

    3、创建新页面include()引用上一步的内容,获得access_token,根据access_token使用curl调用菜单接口,配置参数,来修改菜单参数。

    三、 图片自动回复

    1、首先通过使用post请求接口获取一个图片的信息。

    2、使用开发者文档中的图片回复<xml></xml>,修改msgtype回复类型,改成image,还要修改sprintf函数中的最后一个参数,根据上一步获得图片的信息中的media_id修改成回复图片的media_id,这样就能够完成图片的自动回复啦。

    四、 oauth授权

    1、首先设置授权回调页面域名。

    2、使用网页授权获取用户进本信息的连接,修改连接参数,获取用户同意授权,获取code

    Urlencode()来解决连接中包括连接的问题。

    3、通过code参数获取用户的access_tokenopenid

    4、获取tokenopenid后,使用获取用户信息接口,修改参数,这样就能够获得用户的信息和头像信息

     

     

     

    展开全文
  • 1. 微信上调用的接口信息如下,此接口要求会给你发送一个xml格式信息,你给回复一个xml格式信息(String类型); 2. 然后你得在微信公众号上注册一个接口,用来收取发送到此公众号的所有消息,那个URL地址指向...

    1. 微信上调用的接口信息如下,此接口要求会给你发送一个xml格式信息,你给回复一个xml格式信息(String类型);


    2. 然后你得在微信公众号上注册一个接口,用来收取发送到此公众号的所有消息,那个URL地址指向你的接口程序,此配置有且只能有一个


    3.接口逻辑:

    通过request.getParameter(***)获得Http请求头的信息,然后进行“首次请求验证”、“签名验证”------>

    new SAXReader().read(request.getInputStream()),然后解析获得xml文件的消息信息------>

    根据逻辑得出信息回应的answer------>

    response.getOutputStream().write(answer)





    展开全文
  • 最近开发微信服务号,遇到了一个问题,在编写自动回复消息的时候出现乱码,最后发现问题是由于spring mvc的@ResponseBody注解返回字符串时默认返回的是“ISO-8859-1”而不是utf-8。  虽然大家的项目里面可能都有...
  • 今天跟大家分享一下微信自动回复功能开发,在这这次需要准备好自己的服务器(可以在外网上面访问的),以及在公众号上面进行服务器认证,并且开启服务器配置。 用户在给公众号发消息的时候,微信会把这些消息以xml...
  • 基于微信公众平台的,自动回复。里面有详细代码。
  • 自动回复消息,就是把自动回复的信息,组成xml文件,每一个回复都会对应着一个xml文件,并不是所有回复都使用的一个xml。下面分别是回复文本、图片、图文消息。在回复图片和图文中都需要上传图片,分别需要点用接口...
  • 一,先创建与微信端提交自动回复文本信息的html页面 如下:&lt;extend name="Common:base" /&gt; &lt;block name="body"&gt; &lt;h2&gt;回复文本&lt;/h2&gt; ...
  • 既然我们选用了开发者中心,那微信公众平台的自动回复就不得行了,那就自己开发吧。 这就要在服务器配置的URL里面处理了。 一、自动回复处理代码 @RequestMapping(value="/api",method=RequestMethod.POST) ...
  • 第二步:将你欲跳转的网址贴进长网址文本框并生成短网址,并且随手复制短网址 ...最后,将你生成的a标签代码粘贴到你的微信管理平台自动回复编辑框中所要显示的位置即可。 效果如下 ...
  • 拿使用图灵机器人设置自动回复,让机器人跟微信好友傻傻的聊天,机器人比小编还会聊天,无论是对美眉还是汉纸,上来就是爱!爱!爱!简直太辣眼睛!!!用它进行来调戏微信好友,简直6的一笔! (记住一条!千万不...
  • //回复图文 public function addNews(){ $mp=$this-&gt;mp; $keyword=I('post.keyword'); $title=I('post.title'); $description=I('post.content'); $url=I('post.url'); //相对路径-&gt;绝对...
  • 首先我们可以先新建两个数据库以方便对回复消息的管理通过这两个数据表就可以管理起来,接下来就是如何将数据存入数据库,首先是要获取到前台提交的数据,然后将数据分别写入两个数据表中,具体代码如下://添加...
  • 首先获取到前台提交的数据,然后将数据分别写入两个数据表中,并将上传的图片同时上传到公众号服务器上,这时又要用到微信上传素材的接口,具体代码如下://回复图片 public function addImage(){ $keyword=I('...
  • 作为计算机学院的学生的学生,时刻在打计算机学院官网的主意,前段时间我的一个好基友在我面前炫耀他的能够查课表的公众号(服务模拟登录返回数据),把我眼红得,所以我暗自下决心,自己一定要弄个微信公众号来玩...
  • java微信公众号自动回复文字加图片开发流程详细流程,附上代码:第一步服务器(url)接口配置服务器(url)接口配置,此步骤就是微信授权接口的过程,如果域名都不改变,微信只会校验一次。此请求微信文档中说明了是...
  • 微信关键字自动回复模块
  • QQ表情虽然呈现为一张张动态的表情图片,但在消息接口中却是属于文本消息; 用户向公众帐号发送QQ表情时,公众帐号后台程序接收到的消息类型...下面是微信公众帐号中使用的QQ表情代码对照表: 上面一共列出了10
1 2 3 4 5 ... 20
收藏数 17,506
精华内容 7,002
关键字:

微信开发自动回复