吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 7355|回复: 22
上一主题 下一主题
收起左侧

[其他原创] PHP对接微信公众号实现简单自动回复

[复制链接]
跳转到指定楼层
楼主
寒心烟雨情 发表于 2019-12-15 15:09 回帖奖励
今天早上花了点时间去网上抄了点代码,功能比较简单,当用户在公众号下留言,将留言的关键词带到数据库查询并返回查询结果。


反正是以比较简单的代码做的,代码运行环境随便可以运行PHP就行。


[PHP] 纯文本查看 复制代码
<!DOCTYPE html>
<html>
<body>
	<head>
    <meta charset="utf-8">
    </head>

<?php
require_once "defs.php";
function index()
        {


                $timestamp = $_GET['timestamp'];
                $nonce = $_GET['nonce'];
                $token = 'hongming';                          //公众号里面配置的token
                $signature = $_GET['signature'];
                $echostr = $_GET['echostr'];                //每一次都要验证, 只有第一次验证才会有 echostr
                $array = array( $timestamp, $nonce, $token);
                sort( $array );
                
                //2.将排序后的三个参数拼接之后用sha1加密
                $tempstr = implode('', $array);
                $tempstr = sha1( $tempstr );
                
                //3.将加密后的字符串与signature进行对比,判断该请求是否来自微信
                if( $tempstr == $signature && $echostr){       //启动服务器配置 会进入到这里
                        echo $_GET['echostr'];
                        exit();
                }else{
                        reponseMsg();                               //这里是   启用成功后, 接受事件用的
                }


}

function reponseMsg(){
           
                $postStr = file_get_contents("php://input");
               //根据事件,进行自己的逻辑代码吧    请开始你的表演
                if (!empty($postStr)){

            $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);

            $fromUsername = $postObj->FromUserName;

            $toUsername = $postObj->ToUserName;
           
            $msgtype = $postObj->MsgType;

            $keyword = trim($postObj->Content);

            $time = time();

            $textTpl = "<xml>

            <ToUserName><![CDATA[%s]]></ToUserName>

            <FromUserName><![CDATA[%s]]></FromUserName>

            <CreateTime>%s</CreateTime>

            <MsgType><![CDATA[%s]]></MsgType>

            <Content><![CDATA[%s]]></Content>

            <FuncFlag>0<FuncFlag>

            </xml>";
            

            if(!empty( $keyword ) & $msgtype == "text")      //文本判断

            {

                $msgType = "text";

                $contentStr = sousuo($keyword);

                $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);

                echo $resultStr;

            }
            if($msgtype=='event'){                         // 关注判断
            	$msgType = "text";

                $contentStr = "感谢您的关注!";

                $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);

                echo $resultStr;
            }
            else                     // 其他类型消息判断
            {
            	
            	$msgType = "text";

                $contentStr = "回复关键词可以查询影视资源哦!";

                $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);

                echo $resultStr;
            }

        }
               
               
       }

     

index();


         
?>

</body
</html>



其他的可以去看看官方的开发文档。


免费评分

参与人数 3吾爱币 +3 热心值 +3 收起 理由
Rclear + 1 + 1 谢谢@Thanks!
金牛牌小苏打 + 1 + 1 谢谢@Thanks!
hsx778899 + 1 + 1 回复提示故障,可以附上说明吗

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

推荐
loveni 发表于 2020-3-18 10:45
<?php  

//  -----可配置区域开始-------------  

//微信令牌,请与微信公众号后台同步
define("TOKEN", "weixin");
//解析地址
define("API", "你的解析地址");
//显示数量
define("NUM", "5");
//公众号名称         
define("TITLE", "橙子影视");
//默认图片   
define("PIC", "默认图片地址");
//留言本地址
define("BOOK", "留言本地址");

//  -----可配置区域结束-------------  

$wechatObj = new wechatCallbackapiTest();
$wechatObj->valid();
class wechatCallbackapiTest
{   
    public function CheckUrl($url)
    {        
    return preg_match('/(http|https|ftp):\/\/[\w.]+[\w\/]*[\w.]*\??[\w=&\+\%]*/is',$url);   
    }
    public function valid()
    {
        $echoStr = $_GET["echostr"];
        if($echoStr==""){        
            $this->responseMsg();
         }elseif($this->checkSignature()){
            echo $echoStr;
            exit;
           }
    }
   
    public function responseMsg(){  
           $postStr = addslashes(file_get_contents('php://input'));     if (empty($postStr)){exit("你好!请关注【".TITLE."】微信公众号获取服务");}      
           $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
           $fromUsername = $postObj->FromUserName;
           $toUsername = $postObj->ToUserName;
           $time=$postObj->CreateTime;
           $keyword = trim($postObj->Content);
           $event = $postObj->Event;            
                     
          $textTpl = "<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[%s]]></MsgType><Content><![CDATA[%s]]></Content></xml>";
          $newsTpl = "<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime> <MsgType><![CDATA[news]]></MsgType> <ArticleCount>1</ArticleCount><Articles><item><Title><![CDATA[%s]]></Title> <Description><![CDATA[%s]]></Description><PicUrl><![CDATA[%s]]></PicUrl><Url><![CDATA[%s]]></Url></item></Articles></xml>";   
   
         switch($postObj->MsgType){
               case 'event':
                 if($event == 'subscribe'){
                  
                        //关注后的回复
                            $contentStr = "欢迎关注".TITLE."\r\n本公众号提供在线影视观看,免广告看VIP视频,持续关注,精彩多多。\r\n输入格式:\r\n    1.输入电影名,如: 西游记 即可在线观看!\r\n2.输入视频网址,支持爱奇艺,优酷,腾讯等主流视频网站免VIP播放。\r\n3.回复数字:\r\n 【0】 显示帮助\r\n 【1】打开留言板";
                            $msgType = 'text';
                            $textTpl = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
                            echo $textTpl;
                            break;

                 }
            
             case 'text':
                      //输入文字
                       if(preg_match('/[\x{4e00}-\x{9fa5}]+/u',$keyword))
                      {   

                           $result = file_get_contents(API."/api.php?tp=json&wd=".$keyword);
                           $result= json_decode($result,true);                                                                           
                           if($result &&  $result["success"]){
                           
                             $txt .="恭喜,成功找到视频,请点击播放:\r\n\n";               
                             $i=1;                           
                             foreach( $result["info"] as $row){
                                    
                                      $title = $row['title'];
                                    
                                      $url=API."/?wd=".urlencode($title)."&id=".$row['id']."&flag=".$row['flag']."&type=".$row['type'];                           
                                      $url=self::getContentLink($url);                              
                                      $pic= $row['pic'];
                                      $txt .= "<a href='".$url."'>·".urldecode($title)."</a>\r\n\n";
                                      $i++;
                                      if($i>NUM){break;}
                                    }
                           
                                     $contentStr = $txt.'<a href="'.API."/?wd=".$keyword.'">【更多】...</a>';
                                     $msgType = 'text';
                                     $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
                                     echo $resultStr;     
                           
                           } else{

                                //没有查找到的时候的回复
                                        $title = "资源未找到,点击图片留言反馈! ";
                                        $des1 ="";
                                        //图片地址
                                        $picUrl1 =PIC;
                                        //跳转链接                                
                                        $url=self::getContentLink(BOOK);
                                        $resultStr= sprintf($newsTpl, $fromUsername, $toUsername, $time, $title, $des1, $picUrl1, $url) ;                                    
                                       echo $resultStr;                                    
                            }  
                       
                       //其他
                     
                       }else if($this->CheckUrl($keyword)){
                                        $title = '点击开始播放';
                                        $des1 ="";
                                        //图片地址
                                        $picUrl1 =PIC;
                                        //跳转链接
                                        $url=API."/?url=".$keyword."";
                                        $url=self::getContentLink($url);
                                        $resultStr= sprintf($newsTpl, $fromUsername, $toUsername, $time, $title, $des1, $picUrl1, $url) ;                                    
                                       echo $resultStr;

                        }else if($keyword=="0"){     
                                     $contentStr = "欢迎关注".TITLE."\r\n本公众号提供在线影视观看,免广告看VIP视频,持续关注,精彩多多。\r\n输入格式:\r\n    1.输入电影名,如: 西游记 即可在线观看!\r\n2.输入视频网址,支持爱奇艺,优酷,腾讯等主流视频网站免VIP播放。\r\n3.回复数字:\r\n 【0】 显示帮助\r\n 【1】打开留言板";
                                     $msgType = 'text';
                                     $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
                                     echo $resultStr;   
                        
                         }else if($keyword=="1" ){     
                                    $title = '点击打开留言板';
                                        $des1 ="";
                                        //图片地址
                                        $picUrl1 =PIC;
                                        //跳转链接
                                        $url=self::getContentLink(BOOK);
                                        $resultStr= sprintf($newsTpl, $fromUsername, $toUsername, $time, $title, $des1, $picUrl1, $url) ;                                    
                                       echo $resultStr;
                       
                       
                       }else{
                        
                                    $contentStr = "输入格式:\r\n    1.输入电影名,如: 西游记 即可在线观看!\r\n2.输入视频网址,支持爱奇艺,优酷,腾讯等主流视频网站免VIP播放。\r\n 3.回复数字:\r\n 【0】 显示帮助\r\n 【1】打开留言板  ";
                                     $msgType = 'text';
                                     $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
                                     echo $resultStr;  

                       };
   
                       break;
               
             default:
                      break;
               
           }// switch end
}

    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;
        }
    }
  
  private function getContentLink($url){
   
     $api="http://api.t.sina.com.cn/short_url/shorten.json?source=2815391962&url_long=";
     $result = file_get_contents($api.$url);
     $result= json_decode($result,true);      
     return $result[0]["url_short"];
   
  }
   
}

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
情空明月 + 1 + 1 谢谢@Thanks!

查看全部评分

推荐
 楼主| 寒心烟雨情 发表于 2020-3-3 01:45 |楼主
hlwdsg 发表于 2020-3-2 23:58
请教楼主,我把他复制到新浪云index.php了,为什么一直都说token验证失败呢?token也改的一样,require_onc ...

这个验证好像我当时写出问题了,你可以去看看微信官方那里是这么验证的
沙发
ldzzdl 发表于 2019-12-15 15:18
3#
qingjie2010 发表于 2019-12-15 15:21
谢谢分享哈
4#
ajal 发表于 2019-12-15 15:43
没有defs.php 可以跑起来?
5#
hsx778899 发表于 2019-12-15 15:51
公众号本身不是有设置自动回复的吗
6#
蜜柚吃吧 发表于 2019-12-15 15:52
感谢分享!
7#
 楼主| 寒心烟雨情 发表于 2019-12-15 15:55 |楼主
hsx778899 发表于 2019-12-15 15:51
公众号本身不是有设置自动回复的吗

我数据库里有一万条数据,我们总不能一个个设置回复吧
8#
 楼主| 寒心烟雨情 发表于 2019-12-15 15:55 |楼主
ajal 发表于 2019-12-15 15:43
没有defs.php 可以跑起来?

那是文件是我放数据库查询函数的,可以删了
9#
A1one7 发表于 2019-12-15 16:10
楼主,请问有简易的教程吗? 像使用下
10#
众益科技 发表于 2019-12-15 17:01
小白表示不懂怎么用
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-16 23:55

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表