创建微信公众平台
基础内容
微信是一把利器,我们日常用它来交流,商家用它来营销.于是我们以商家的视角,来看一下微信为其提供的服务.微信公众平台的管理入口为 https://mp.weixin.qq.com ,尚不明白如此大的品牌,微信为何依然使用qq.com域名.且说公众平台的注册流程,有如下过程:
基本信息 => 邮箱激活 => 选择类型 => 信息登记 => 公众号信息
注册过程不是本文的重点. 注册结束之后,将得到如下管理界面:
微信公众平台分两种类型:订阅号,服务号. 从注册方面来说, 订阅号可以个人注册,不用缴费; 服务号一般需要以团体机构的身份去申请,并且在申请过程中需要缴纳一定费用. 从使用方面来说, 订阅号无法获取公众平台的appkey与appsecret, 因而与之相关的功能无法使用, (虽然订阅号可以申请测试的appkey与appsecret, 但测试账号与正式的账号并非一物); 而服务号具有更加强大的功能, 比如可以在程序中获取用户信息, 在手机端的聊天界面, 可以显示底部菜单等. 本文仅为创建使用订阅号,提供一定指导.
按下不表, 且回到上图界面. 订阅号的常规功能已经可在界面上操作, 比如管理用户信息, 设置用户的自动回复. 能把繁杂的功能抽丝去茧整合成简洁的操作面板, 确实显示了微信强大的产品能力(对比以前管理 虚拟主机 的那种界面). PS: 左侧导航链接文案作者一定有词语对齐的强迫症^ – ^.
使用API
当然界面的操作能力总是有限的, 我们想用代码来控制. 整体上, 使用微信公众平台的架构如下:
开发者要做的, 是在自己的服务器(公众平台服务器)上按照微信的API规范部署代码, 响应由微信服务器传递过来的用户请求. 所以你需要有一份自己的web服务器. 微信官方给出了一份php的代码范例:http://mp.weixin.qq.com/mpres/htmledition/res/wx_sample.zip.本文做了一些重命名与结构调整工作,以方便读者理解. Show the code:
<?php define("TOKEN", "Weixin"); ////web response //wechat response $wechatResponse = new wechatResponseClass(); //创建响应微信请求的类 $wechatResponse->valid(); //验证请求消息是否来源 微信 $wechatResponse->receiveRequest(); // 接受由微信传送过来的用户请求(比如用户发送的文本消息) $wechatResponse->sendResponse(); //反馈给用户消息 class wechatResponseClass { private $openIdUser; //用户的openId private $openIdServer; //公众账号的openId private $requestMsgType; //消息类型,如果为空,则不需要回复此条消息 private $requestMsgContent; //文本消息内容 /**! * @brief 验证微信访问是否合法 */ public function valid() { $echoStr = $_GET["echostr"]; //valid signature , option if($this->checkSignature()){ echo $echoStr; exit; } } /**! * @brief 接受用户的请求信息,并将其解析 */ public function receiveRequest() { //get post data, May be due to the different environments $requestString = $GLOBALS["HTTP_RAW_POST_DATA"]; //extract post data if (!empty($requestString)) { $requestXmlObj = simplexml_load_string($requestString, 'SimpleXMLElement', LIBXML_NOCDATA); $this->openIdUser = $requestXmlObj->FromUserName; //来源openId $this->openIdServer = $requestXmlObj->ToUserName; //公共账号openId $this->requestMsgType = $requestXmlObj->MsgType; //消息类型 switch ($this->requestMsgType) { case 'text': //文本类型消息 $this->requestMsgContent = trim($requestXmlObj->Content); //内容 break; default: $this->requestMsgType = ""; //无法适配的消息类型 break; } } else { $this->requestMsgType = ""; } } /**! * @brief 给用户发送的提示, 此处调 */ public function sendResponse() { $this->sendMsgText(); //发送文本回复 } /**! * @brief 用微信定义的文本消息结构, 给用户发送文本消息 */ private function sendMsgText(){ //发送文本消息 // $userInfo = new userInfoClass(); if ($this->requestMsgType != "") { // $textContent = "Welcome to wechat world!".$userInfo->get_user_info($this->openIdUser); $textContent = "亲爱的你好,本公共账号还在开发中...\n你可以访问我的博客 https://blog.exbye.com\n也可以通过邮件给我留言: nirvana@exbye.com."; } else{ $textContent = ""; } $msgType = "text"; $time = time(); $textMsg = sprintf($this->tplText, $this->openIdUser, $this->openIdServer, $time, $msgType, $textContent); echo $textMsg; } /**! * @brief 在将此接口提供给微信调用时,微信会发送一个get请求,请求内容包括签名时间戳等信息. * 本web页面将token、timestamp、nonce三个参数进行排序,使用sha1加密并将加密后的字符串与signature对比. * 如果一致,那么认为这是一次合法的微信请求. 此举, 我想应该防止第三方伪造 微信 的请求. */ 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; } } /**! * @brief 文本回复模板, 同样也可以创建图片回复模板,音频回复模板等. * 但由于涉及二进制回复内容(音频\视频\图片)的回复,都需要使用使用appkey,即需要进行开发者认证. * 故此处不再演示. */ private $tplText="<xml> <ToUserName><![CDATA[%s]]></ToUserName> <FromUserName><![CDATA[%s]]></FromUserName> <CreateTime>%s</CreateTime> <MsgType><![CDATA[%s]]></MsgType> <Content><![CDATA[%s]]></Content> <FuncFlag>0</FuncFlag> </xml>"; } ?>
注释都在代码里了. 读者可将此代码保存到index.php文件中, 并将文件放到支持php的web服务器上, 不过在此之前,需要修改一些内容,看图:
至此, 部署就基本完成了. 然后在微信公众账号控制面板中:
设置 => 公众账号设置 => 二维码
你就可以生成一个二维码,供 其他人扫码添加了.比如我的Nirvana公众账号二维码(快快扫码关注吧^ – ^):
参考资料: 微信官方文档. PS: 文档也很容易阅读.
发表评论