创建微信公众平台
Updated:
基础内容
微信是一把利器,我们日常用它来交流,商家用它来营销.于是我们以商家的视角,来看一下微信为其提供的服务.微信公众平台的管理入口为 https://mp.weixin.qq.com ,尚不明白如此大的品牌,微信为何依然使用qq.com域名.且说公众平台的注册流程,有如下过程:
基本信息 => 邮箱激活 => 选择类型 => 信息登记 => 公众号信息
注册过程不是本文的重点. 注册结束之后,将得到如下管理界面:
[caption id=”attachment_2847” align=”aligncenter” width=”848”] 微信公众平台控制面板[/caption]
微信公众平台分两种类型:订阅号,服务号. 从注册方面来说, 订阅号可以个人注册,不用缴费; 服务号一般需要以团体机构的身份去申请,并且在申请过程中需要缴纳一定费用. 从使用方面来说, 订阅号无法获取公众平台的appkey与appsecret, 因而与之相关的功能无法使用, (虽然订阅号可以申请测试的appkey与appsecret, 但测试账号与正式的账号并非一物); 而服务号具有更加强大的功能, 比如可以在程序中获取用户信息, 在手机端的聊天界面, 可以显示底部菜单等. 本文仅为创建使用订阅号,提供一定指导.
按下不表, 且回到上图界面. 订阅号的常规功能已经可在界面上操作, 比如管理用户信息, 设置用户的自动回复. 能把繁杂的功能抽丝去茧整合成简洁的操作面板, 确实显示了微信强大的产品能力(对比以前管理 虚拟主机 的那种界面). PS: 左侧导航链接文案作者一定有词语对齐的强迫症^ - ^.
使用API
当然界面的操作能力总是有限的, 我们想用代码来控制. 整体上, 使用微信公众平台的架构如下:
[caption id=”attachment_2853” align=”aligncenter” width=”798”] 微信公众平台架构[/caption]
开发者要做的, 是在自己的服务器(公众平台服务器)上按照微信的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你可以访问我的博客 http://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服务器上, 不过在此之前,需要修改一些内容,看图:
[caption id=”attachment_2858” align=”aligncenter” width=”814”] 修改接口配置信息[/caption]
至此, 部署就基本完成了. 然后在微信公众账号控制面板中:
设置 => 公众账号设置 => 二维码
你就可以生成一个二维码,供 其他人扫码添加了.比如我的Nirvana公众账号二维码(快快扫码关注吧^ - ^):
[caption id=”attachment_2860” align=”aligncenter” width=”430”] Nirvana订阅号二维码[/caption]
参考资料: 微信官方文档. PS: 文档也很容易阅读.