微信公众号开发-服务器配置、关注后收到欢迎消息
2017-05-21 15:05
651 查看
公众号注册
微信公众号开发首先需要注册一个公众号,公众号分为订阅号、服务号和企业号。订阅号是最基础的公众账号,用于开发的话API接口会受到一些限制;公众号的开发大都是基于服务号进行的,服务号的开通和认证需要填写一些企业名称和营业执照注册号;企业号主要为公司内部通讯。由于不具备服务号和企业号的注册条件,暂且注册一个订阅号开始基础研究。配置服务器
登录公众号,开启开发者模式后,就需要配置自己的服务器了。要配置自己的服务器首先得先有一台服务器,服务器我最开始申请的是百度BAE,发现对于上传下载代码不太会用。又申请了腾讯云,申请的是Ubuntu16.04的服务器,这下子熟悉了,需要什么环境自己可以自由配置。但是照着网上好多博客的配置,发现在微信公众平台上服务器的配置提交是能通过的,但是一直不能与关注者(用户)进行互动,比如用户关注了不能回复欢迎消息。服务器配置如下这里我域名直接用的IP地址,我怀疑不能直接用IP地址作为域名,腾讯云注册时也没分配域名,没找到配置域名的地方。
我又注册了个新浪云,新浪云给分配域名了,服务器配置如下:
这次提交成功了,用户关注后能回复欢迎消息了。当然服务器配置要想提交成功,得提前在自己的web服务器上建立用于验证的文件,我建立的是微信提供的wx_sample.php
<?php /** * wechat php test */ //define your token define("TOKEN", "******");//与服务器配置时的token需一致 $wechatObj = new wechatCallbackapiTest(); $wechatObj->valid(); class wechatCallbackapiTest { public function valid() { $echoStr = $_GET["echostr"]; //valid signature , option if($this->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)){ $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA); $fromUsername = $postObj->FromUserName; $toUsername = $postObj->ToUserName; $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"; $contentStr = "Welcome to wechat world!"; $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr); echo $resultStr; }else{ echo "Input something..."; } }else { echo ""; exit; } } private function checkSignature() { $signature = $_GET["signature"]; $timestamp = $_GET["timestamp"]; $nonce = $_GET["nonce"]; $token = TOKEN; $tmpArr = array($token, $timestamp, $nonce); sort($tmpArr); $tmpStr = implode( $tmpArr ); $tmpStr = sha1( $tmpStr ); if( $tmpStr == $signature ){ return true; }else{ return false; } } } ?>
自己搭建的服务器与微信公众平台服务器验证成功后,接下来就可以实现自己想实现的功能了。在这里实现的是用户关注后,回复欢迎消息,用户回复任何不为空的消息,回复“谢谢您的回复!”
修改wx_sample.php为以下内容
<?php /** * wechat php test */ //define your token define("TOKEN", "******");//与服务器配置时的token需一致 $wechatObj = new wechatCallbackapiTest(); if (!isset($_GET['echostr'])) { $wechatObj->responseMsg(); }else{ $wechatObj->valid(); } class wechatCallbackapiTest { public function valid() { $echoStr = $_GET["echostr"]; //valid signature , option if($this->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)){ //解析数据 $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA); //发送消息方ID $fromUsername = $postObj->FromUserName; //接收消息方ID $toUsername = $postObj->ToUserName; //消息类型 $form_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>"; $newsTpl = "<xml> <ToUserName><![CDATA[%s]]></ToUserName> <FromUserName><![CDATA[%s]]></FromUserName> <CreateTime>%s</CreateTime> <MsgType><![CDATA[%s]]></MsgType> <ArticleCount>%s</ArticleCount> <Articles> <item> <Title><![CDATA[%s]]></Title> <Description><![CDATA[%s]]></Description> <PicUrl><![CDATA[%s]]></PicUrl> <Url><![CDATA[%s]]></Url> </item> </Articles> <FuncFlag>1</FuncFlag> </xml> "; $musicTpl = "<xml> <ToUserName><![CDATA[%s]]></ToUserName> <FromUserName><![CDATA[%s]]></FromUserName> <CreateTime>%s</CreateTime> <MsgType><![CDATA[%s]]></MsgType> <Music> <Title><![CDATA[%s]]></Title> <Description><![CDATA[%s]]></Description> <MusicUrl><![CDATA[%s]]></MusicUrl> <HQMusicUrl><![CDATA[%s]]></HQMusicUrl> </Music> <FuncFlag>0</FuncFlag> </xml>"; //事件消息 if($form_MsgType=="event") { //获取事件类型 $form_Event = $postObj->Event; //订阅事件 if($form_Event=="subscribe") { //回复欢迎文字消息 $msgType = "text"; $contentStr = "感谢您关注Super King的微信公众号[玫瑰]"; $resultStr = sprintf($textTpl, $fromUsername, $toUsername, time(), $msgType, $contentStr); echo $resultStr; exit; } } //如果用户发送内容不为空,回复“谢谢您的回复!” if(!empty( $keyword )) { $msgType = "text"; $contentStr = "谢谢您的回复!"; $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr); echo $resultStr; }else{ echo "Input something..."; } }else { echo ""; exit; } } private function checkSignature() { $signature = $_GET["signature"]; $timestamp = $_GET["timestamp"]; $nonce = $_GET["nonce"]; $token = TOKEN; $tmpArr = array($token, $timestamp, $nonce); sort($tmpArr); $tmpStr = implode( $tmpArr ); $tmpStr = sha1( $tmpStr ); if( $tmpStr == $signature ){ return true; }else{ return false; } } } ?>
用个人微信扫描公众号二维码,关注后进行测试
相关文章推荐
- 百度虚拟主机微信公众号开发接口配置成功但个服务器发送消息提示“公众号提供的服务出现故障”
- 关于ThinkPHP框架开发微信公众号在微信后台配置服务器URL提示Token验证失败的解决方案
- 【微信公众号开发】自我学习第一章:服务器配置的提交
- Python开发微信公众号之阿里云服务器配置
- 微信公众号开发之服务器配置
- 微信公众号开发笔记(一)服务器配置和验证
- php微信公众号开发,入门篇(实现了关注公众号发送欢迎信息,发关键词自回复)
- 微信公众号开发之文本消息自动回复,以及系统关注自动回复,php代码
- 微信公众号开发(一)服务器及接口的配置
- 微信公众号开发 配置服务器URL,验证Token
- 微信公众号开发之配置和绑定自己的服务器
- 使用C# .net开发微信公众号之服务器URL配置
- 开发企业微信之接收消息服务器配置
- Java企业微信开发_01_接收消息服务器配置
- 纯纯纯小白(菜鸡不懂代码)手搭腾讯云服务器apache24+php7+mysql5.6 顺带还有个微擎安装配置 学习开发微信公众号
- Java企业微信开发_01_接收消息服务器配置
- 微信公众号开发(一)服务器配置
- 阿里云服务器开发微信公众号,配置的时候总是TOKEN验证失败
- 微信公众号关注一次回复多条消息java开发
- 欢迎关注“测试开发进阶”微信公众号