• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

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

php 搞代码 3年前 (2022-01-23) 23次浏览 已收录 0个评论
<?phpdefine("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>                                     <em style="color:transparent">本@文来源[email protected]搞@^&代*@码网(</em><q>搞代gaodaima码</q><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;                }            //接下来就是你自己定义的各种方法                  }

搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:微信公共账号开发模式PHP接口实现
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址