`

微信公共账号开发模式PHP接口实现

    博客分类:
  • PHP
阅读更多
<?php
define("TOKEN","你的TOKEN");
class wechatCallBackApi{
    //public $signature;    //加密签名
    //public $timestamp;    //时间戳
    //public $nonce;        //随机数
    //public $echostr;    //随机字符串,返回标志
    public $fromUserName;    //发信人ID
    public $toUserName;        //收信人ID(本公共号)
    public $keyWords;        //文本信息
    public $msgId;        //消息ID
    public $welcomeMsg; //欢迎消息
    public $msgType;    //消息类型
    public $event;        //事件名
    public $mediaId;    //语音消息媒体id,可以调用多媒体文件下载接口拉取该媒体
    public $format;        //语音格式:amr
    public $recognition;    //语音识别结果


    public function __construct(){

        $this->welcomeMsg="HELLO,欢迎订阅!";
            //$this->main();    //*****************第一次验证的时候打开,随后可关闭***************
    }

    //首次TOKEN验证
    public function main(){
        $echoStr=$_GET['echostr'];
        if($this->checkRes()){
            echo $echoStr;
        }else{
            exit();
        }

    }
    
    //验证权限
    private function checkRes(){

        $signature=$_GET['signature'];    //获取微信服务发送过来的参数
        $timestamp=$_GET['timestamp'];
        $nonce=$_GET['nonce'];

        $token = TOKEN;
        $tmpArr = array($token,$timestamp,$nonce);
        sort($tmpArr);    //进行字典排序
        $strWaitCheck = implode($tmpArr);    //进行字符串组合
        $strWaitCheck = sha1($strWaitCheck);    //对字符串进行sha1加密

        if($strWaitCheck==$signature){
            return true;
        }else{
            return false;
        }
    }


    public function getWhatWeChatServerPost(){

            $huntPostContent = $GLOBALS["HTTP_RAW_POST_DATA"];    //获取微信服务post过来的内容

            $newXmlObj =simplexml_load_string($huntPostContent,'SimpleXMLElement', LIBXML_NOCDATA);    //把post过的字符串载入对象

            $this->fromUserName = $newXmlObj->FromUserName;    //向公共账号发信息的用户名

            $this->toUserName = $newXmlObj->ToUserName;    //公共账号名

            $this->keyWords = trim($newXmlObj->Content);    //消息内容

            $this->msgId = trim($newXmlObj->MsgId);        //读取当前消息msgId

            $this->msgType = trim($newXmlObj->MsgType);        //读取当前消息类型

            $this->event = trim($newXmlObj->Event);        //读取当前事件名
            
            $this->format = trim($newXmlObj->Format);    //语音格式:amr
            
            $this->mediaId = trim($newXmlObj->MediaID);    //语音消息媒体id,可以调用多媒体文件下载接口拉取该媒体
            
            $this->recognition = trim($newXmlObj->Recognition);    //语音识别结果,UTF8编码
        }
    //消息响应
    public function responseMsg(){

            $this->getWhatWeChatServerPost();    //执行接收微信服务器POST过来的东西
            
                    //当消息类型为text的时候处理
                    if(!empty($this->keyWords)&& $this->msgType == "text"){
                            $para = $this->keyWords;
                            switch($para){
                                    case "1":
                                    $tmp_item = $this->textPicMaxTmp(
                                    "this is a test!!",
                                    "各位大叔大妈别太大较真,这就一测试滴",
                                    "http://www.baidu.com/img/bdlogo.gif",
                                    "http://www.baidu.com/");
                                    $re_global = $this->resTextPicMax($this->fromUserName,$this->toUserName,1,$tmp_item);
                                    echo $re_global;
                                    break;

                                case "2":
                                    $contentResText = "Hello,buddy,you send me a \"2\"[玫瑰]";
                                    $re_global = $this->resTextMsg($this->fromUserName,$this->toUserName,$contentResText);
                                    echo $re_global;
                                    break;
                                    
                                case "000":    
                                    $contentResText = "你想返回的字符串";
                                    $this->longStrHandleExtendfunc($contentResText);
                                    break;                  

                                default:
                                    //调用功能判断函数处理
                                    $this->longStrHandle($para);
                                       break;
                                }
                        }else if($this->msgType == "event" && !empty($this->event)){        //获取事件类型
                                    if($this->event=='subscribe'){
                                            $contentResText = $this->welcomeMsg;    //初次关注的时候推送欢迎消息
                                            $re_global = $this->resTextMsg($this->fromUserName,$this->toUserName,$contentResText);
                                        }else if($this->event == "unsubscribe"){///这个地方好像没有作用!!!
                                            $contentResText = "我擦,你咋跑了";
                                            $re_global = $this->resTextMsg($this->fromUserName,$this->toUserName,$contentResText);
                                            }
                            }else if($this->msgType == "voice"){
                                        if($this->recognition == ""){
                                                $contentResText ="亲,你说的火星文么,听不懂,建议您还是文字查询吧..[呲牙]";//语音无返回结果的时候给用记返回一条错误
                                                $re_global = $this->resTextMsg($this->fromUserName,$this->toUserName,$contentResText);
                                            }else{
                                                $contentResText =$this->recognition; //其它情况下返回欢迎语
                                                $re_global = $this->resTextMsg($this->fromUserName,$this->toUserName,$contentResText);
                                                    
                                                }
                                    
                                }else{
                            //如果在text情况意外得到一条空消息的处理
                            echo "";
                            exit();
                            }
                    echo $re_global;    //返回值给微信服务器
        }
            
            //多次用到的几句话就定义了一个小方法
            public function longStrHandleExtendfunc($conText){
                    $re_global = $this->resTextMsg($this->fromUserName,$this->toUserName,$conText);
                    echo $re_global;
                }
                
            //收到除特定字符外的其它字符的处理方法,这个要根据你需要的具体逻辑处理    
            public function longStrHandle($waitHandleStr){

                    /*
                        your code
                    */
                            }


        //回复文本信息方法
        public function resTextMsg($tu,$fu,$textContent){

                //文本消息模板
                    $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>";
                    $msgType = "text";    //消息类型
                    $time = time();        //时间戳
                    $resServerStr = sprintf($textTpl,$tu,$fu,$time,$msgType,$textContent);    //替换模板里的内容
                    return $resServerStr;

            }


        //回复图文
        public function resTextPicMax($tu,$fu,$itemNum,$totalItemStr){
                //图片模板
                    $picTpl = "<xml>
                                     <ToUserName><![CDATA[%s]]></ToUserName>
                                     <FromUserName><![CDATA[%s]]></FromUserName>
                                     <CreateTime>%s</CreateTime>
                                     <MsgType><![CDATA[%s]]></MsgType>
                                     <ArticleCount>%s</ArticleCount>
                                     <Articles>"
                                    .$totalItemStr.
                                     "</Articles>
                                 </xml>";

                    $msgType = "news";    //消息类型
                    $time = time();        //时间戳
                    $resServerStr = sprintf($picTpl,$this->fromUserName,$this->toUserName,$time,$msgType,$itemNum);    //替换模板里的内容
                    return $resServerStr;
            }


            //图文模板处理
            public function textPicMaxTmp($title,$des,$picUrl,$jumpUrl){
                    //图文消息条目模板
                $itemTpl="
                         <item>
                                     <Title><![CDATA[%s]]></Title>
                                     <Description><![CDATA[%s]]></Description>
                                     <PicUrl><![CDATA[%s]]></PicUrl>
                                     <Url><![CDATA[%s]]></Url>
                                     </item>
                ";
                $resItemStr = sprintf($itemTpl,$title,$des,$picUrl,$jumpUrl);    //替换模板里的内容
                return $resItemStr;
                }


            //接下来就是你自己定义的各种方法
            
      
}

 

分享到:
评论

相关推荐

    微信公众账号大全微信导航源码

    微信联盟微信公众账号大全导航源码PHP运营版,本源码采用鱼福核心,修改版微信公众平台导航源码,适合商业运营、可后台充值,发布微信活动,关联微信公众账号,首页广告后台一键推荐,用户自主发布微信公众账号!...

    微信公众账号大全导航源码(微信导航宽屏版)

    微信联盟微信公众账号大全导航源码PHP运营版,本源码采用鱼福核心,修改版微信公众平台导航源码,适合商业运营、可后台充值,发布微信活动,关联微信公众账号,首页广告后台一键推荐,用户自主发布微信公众账号!...

    微信公众账号大全微信导航源码 v1.31

    微信联盟微信公众账号大全导航采用PHP5+MYSQL做为技术基础进行开发。框架结构清晰,代码易于维护。微信,超过三亿人使用的手机应用,那么微信导航也是三亿人需要的导航,微信导航CMS,内容覆盖资讯,IT软硬件,通信...

    微信公众平台开发最佳实践 源代码

    5.4.1 客服接口实现 62 5.4.2 消息接口与客服接口相结合 70 5.4.3 客服接口的意义 71 5.5 OAuth2.0网页授权 72 5.5.1 OAuth2.0 72 5.5.2 授权过程 72 5.5.3 详细步骤 73 5.5.4 效果展示 79 5.6 生成带参数...

    微信公众平台开发最佳实践 源码及书箱

    5.4.1 客服接口实现 62 5.4.2 消息接口与客服接口相结合 70 5.4.3 客服接口的意义 71 5.5 OAuth2.0网页授权 72 5.5.1 OAuth2.0 72 5.5.2 授权过程 72 5.5.3 详细步骤 73 5.5.4 效果展示 79 5.6 生成带参数...

    微信公众账号导航源码(Weixin宽屏版) v1.3.zip

    微信联盟微信公众账号大全导航采用PHP5 MYSQL做为技术基础进行开发。框架结构清晰,代码易于维护。 微信,超过三亿人使用的手机应用,那么微信导航也是三亿人需要的导航,微信导航CMS,内容覆盖资讯,IT软硬件,...

    微信公众平台搭建与开发揭秘

    此外,本书对于腾讯微生活和第三方微信接口也作了初步介绍,最后以一个具体实例介绍了微信公众账号的开发流程。 《微信公众平台搭建与开发揭秘》在编写过程中,既重视内容的全面性,又注重实际应用,采用微信公众...

    2022-php-服务商支付demo-jsapi-微信支付

    综上所述,这个项目提供了完整的PHP微信服务商支付JSAPI的实现,对开发者学习和使用微信支付接口具有很高的参考价值。通过深入研究和实践,开发者能够掌握微信支付的整个流程,并将其应用到实际的电商或服务类网站中...

    微信服务商分账功能开发(PHP).docx

    // 公众账号ID $inputObj-&gt;SetMch_id(WxPayConfig::MCHID); // 商户号 $inputObj-&gt;SetNonce_str(self::getNonceStr()); // 随机字符串 // 签名 $inputObj-&gt;SetSignHash(); $xml = $inputObj-&gt;ToXml(); $...

    微信公众平台开发入门教程(SAE方倍工作室)

    创建新浪云计算平台应用启用微信公众平台开发模式基础接口消息及事件微信公众平台PHP SDK微信公众平台开发模式原理开发天气预报功能第一章 申请服务器资源 创建新浪云计算应用 申请账号 我们使用SAE新浪云计算平台...

    基于微信服务号的商城应用开发.docx

    此外,微信提供的公众平台开发接口是构建该商城应用的基础,它允许开发者调用微信的各种功能,如消息推送、支付接口等,使得商城应用能深度整合到微信生态系统中,提供无缝的购物体验。用户可以通过微信账号直接登录...

    PHPMPS微信公众平台插件 v1.0 1.2~2.3通用.zip

    4、将“编辑模式”关闭,才能开启“开发模式”,进入“开发模式” 接口配置信息里: URL:http://您的网址/plus/weixin.php Token:weixin 5、配置信息验证通过后将weixin.php改回utf-8无BOM格式 备注: Token...

    基于PHP的微信三级分销商城企业版源码 php版.zip

    【标题】"基于PHP的微信三级分销商城企业版源码 php版.zip" 涉及的知识点主要集中在PHP编程语言、微信开发以及电子商务系统的设计与实现。PHP是一种广泛用于Web开发的开源脚本语言,其特点是语法简洁,易于学习,且...

    PHPMPS微信公众平台插件 v1.0 1.2~2.3通用

    4、将“编辑模式”关闭,才能开启“开发模式”,进入“开发模式” 接口配置信息里: URL:http://您的网址/plus/weixin.php Token:weixin 5、配置信息验证通过后将weixin.php改回utf-8无BOM格式 备注: Token...

    PHPMPS微信公众**台插件 v1.0 1.2~2.3通用.rar

    4、将“编辑模式”关闭,才能开启“开发模式”,进入“开发模式” 接口配置信息里: URL:http://您的网址/plus/weixin.php Token:weixin 5、配置信息验证通过后将weixin.php改回utf-8无BOM格式 备注: Token:可在...

    Wechat.zip_TP5连接微信

    2. **配置微信开发者账号**:在微信公共平台上注册并获取AppID和AppSecret,这两个参数是连接微信的关键,需要在你的项目中进行配置。在ThinkPHP5中,通常会将这些敏感信息放在`config`目录下的一个配置文件中,例如...

    基于thinkphp3.2.3微信扫码登录

    综上所述,基于ThinkPHP 3.2.3实现微信扫码登录涉及到了PHP框架的使用、OAuth 2.0授权协议的理解以及微信开放平台的接口调用。这个过程虽然涉及多个步骤,但得益于ThinkPHP的便利性,实际操作并不复杂。通过学习和...

Global site tag (gtag.js) - Google Analytics