php开发个人微信公众号总结


经过两天的研究,我发现个人公众号(订阅号)也并非是高台楼阁,只有懂门道的人才能知道如何开发。 个人订阅号就是个人人可申请的东西, 微信公众平台就是这个申请的入口,申请成功后便可以每天群发一条消息,也可以定义一些自己的自动回复,这些都不需要任何代码基础做支撑的,仅需登录个人公众平台简单设置便可。 所以单纯想开通个人公众号的,每天发发群消息的,真的无需犹豫,直接开通便可。 我下面要讲的是作为一个开发者去做一个公众号,调用微信的开发接口使得我们有了更多灵活处理的方式,不仅是发出各式各样的模板消息,还有着丰富的功能菜单,甚至微信支付等等一系列的东西,这其中许多都是需要代码去实现的高级功能。 当然作为一个没认证也没法认证的个人订阅号,接口权限就有点少得可怜了,差不多就以下寥寥几项。 [1R3J4UR6M~F%EIZH_LDXXY 但是我们还是可以扯住它漏出的一根毛线,织成一件毛衣的! 实现自定义订阅号,是需要一个第三方服务器的。这里同样给不想敲代码的小伙子一条捷径!那就是去 图灵机器人的官网注册一个账号,然后新建一个用于微信公众号的机器人即可,然后在它的平台把自己的公众号添加进去,并可实现由图灵机器人代理你的消息回复功能。 以上简单也不做讨论。我做公众号的初衷其实也是想给自己一次学习的机会,再为将来的面试做一点铺垫,也能分享一些好的东西给身边的朋友。 于是这个第三方服务器我选择由自己来代理,即是自己的个人云服务器,首先它得拥有一个公网可访问的域名http://findhcq.cn。
  • 第一步,在个人网站的根目录下,新建一个hellohcq.php作为入口文件,基于thinkPHP框架新建thinkPHP文件夹放置。 [code lang="php"] <?php //基于thinkphp框架 //定义项目的名称 define('APP_NAME','Hello丶HCQ'); //定义项目的路径 define('APP_PATH','Hello丶HCQ/'); //引入tp的核心文件 require('./ThinkPHP/ThinkPHP.php'); [/code]
  • 然后在浏览器地址栏输入hellohcq.php的公网访问路径,这里我输入http://findhcq.cn/hellohcq.php
  • 接下来,修改在个人微信公众平台的开发基本配置,这里的url指向网站的入口文件,token可以理解为一个与个人网站后台沟通的暗号,加密密钥随机生成即可,加密方式我这里选择兼容模式,然后暂时不提交。 %RLS4JY%7B{​{1}}4%CQY(WL
  • 经过以上两步,这时候个人网站的根目录下会生成一个Hello丶HCQ的文件夹,进入其Home目录下的Controller文件夹,找到IndexController.class.php文件,这是我们编写关键代码的地方。简单查看目录结构会发现,这同样是一个MVC的开发模式,Controller掌管控制层,在这里我们需要拿到微信传来的token即暗号,给出反应,表示允许相关微信使用自己作为第三方服务器的意思。这里代码就一并贴出,并在关键部分做好了注释。 [code lang="php"] <?php namespace Home\Controller; use Think\Controller; use Home\Model\IndexModel; class IndexController extends Controller { public function index(){ //将三个参数按字典排序 $signature = $_GET["signature"]; $timestamp = $_GET["timestamp"]; $nonce = $_GET["nonce"]; $echostr = $_GET["echostr"]; $token = "haha";//这里指暗号 $tmpArr = array($token, $timestamp, $nonce); sort($tmpArr); //将排序好的三个参数拼接后sha1加密 $tmpStr = implode($tmpArr); $tmpStr = sha1( $tmpStr ); if( $tmpStr == $signature &&$echostr){ //第一次接入findhcq api接口的时候 echo $echostr; exit; }else{ $this->reponseMsg(); } } //接收事件推送,并回复 public function reponseMsg(){ //获取微信推送过来的xml格式数据 $postArr = $GLOBALS['HTTP_RAW_POST_DATA']; //处理消息类型,并设置回复类型和内容 $postObj = simplexml_load_string( $postArr ); //判断该数据包是否是订阅的的事件推送,即处理用户关注后的消息推送 if( strtolower( $postObj->MsgType) == 'event'){ //如果是关注 subscribe 事件 if( strtolower($postObj->Event == 'subscribe') ){ //回复用户消息(纯文本格式) $arr = array( array( 'title'=>'感谢您的关注,HCQ定会尽心尽力!', 'description'=>"专注技术分享与交流,共同学习,一起进步!", 'picUrl'=>'http://img.mukewang.com/5533b3350001bfe305800326-200-200.jpg', 'url'=>'http://findhcq.cn', ) ); $indexModel = new IndexModel; $indexModel->responseSubscribe($postObj,$arr); } } //如果用户发过来的消息是文本,并且是HCQ的话 if( strtolower($postObj->MsgType) == 'text' && trim($postObj->Content)=='HCQ' ){ $arr = array( array( 'title'=>'个人网站', 'description'=>"专注技术交流与分享!", 'picUrl'=>'http://img.mukewang.com/5533b3350001bfe305800326-200-200.jpg', 'url'=>'http://findhcq.cn', ) ); $indexModel = new IndexModel; $indexModel->responseNews($postObj,$arr); //注意:进行多图文发送时,子图文个数不能超过10个 }//if end }//reponseMsg end [/code]
  • 控制层掌握关键逻辑,而模型层主要提供消息模板支持,方便调用与管理,在Home目录下的Model目录下,新建IndexModel.class.php文件。 [code lang="php"] <?php class IndexModel extends Model{ //回复多图文类型的微信消息 public function responseNews($postObj ,$arr){ $toUser = $postObj->FromUserName; $fromUser = $postObj->ToUserName; //这里是采用微信提供的图文模板消息,以下同 $template = "<xml> <ToUserName><![CDATA[%s]]></ToUserName> <FromUserName><![CDATA[%s]]></FromUserName> <CreateTime>%s</CreateTime> <MsgType><![CDATA[%s]]></MsgType> <ArticleCount>".count($arr)."</ArticleCount> <Articles>"; foreach($arr as $k=>$v){ $template .="<item> <Title><![CDATA[".$v['title']."]]></Title> <Description><![CDATA[".$v['description']."]]></Description> <PicUrl><![CDATA[".$v['picUrl']."]]></PicUrl> <Url><![CDATA[".$v['url']."]]></Url> </item>"; } $template .="</Articles> </xml> "; //根据顺序代入参数,并返回给用户,以下同 echo sprintf($template, $toUser, $fromUser, time(), 'news'); } // 回复单文本 public function responseText($postObj,$content){ $template = "<xml> <ToUserName><![CDATA[%s]]></ToUserName> <FromUserName><![CDATA[%s]]></FromUserName> <CreateTime>%s</CreateTime> <MsgType><![CDATA[%s]]></MsgType> <Content><![CDATA[%s]]></Content> </xml>"; //注意模板中的中括号 不能少 也不能多 $fromUser = $postObj->ToUserName; $toUser = $postObj->FromUserName; $time = time(); $msgType = 'text'; echo sprintf($template, $toUser, $fromUser, $time, $msgType, $content); } //回复微信用户的关注事件 public function responseSubscribe($postObj, $arr){ $this->responseNews($postObj,$arr); } //回复纯文本 } [/code]
至此,一只简单的个人微信订阅号就实现了,他能对用户的关注事件作出相应图文反馈,并能对关键字进行相应回复,主要功能的实现差不多都这个逻辑,也只需再小修小补,在消息接收功能上再做增强。

转载于:https://my.oschina.net/u/3090863/blog/796318

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值