微信公众平台搭建与开发
“再小的个体,也有自己的品牌”,这是微信公众平台的官方广告,微信公众平台为每个人提供了创建自己品牌的机会。通过微信公众平台,明星公众账号加强了与粉丝的互动,媒体公众账号扩大了传播,企业公众账号带来了客户,校园公众账号为学生带来了便利。
微信公众平台与微信公众帐号的关系?
微信公众平台是腾讯为了让用户申请和管理微信公众账号而退出的一个Web平台,而微信公众账号的操作管理在这个平台下进行。
微信公众帐号与微信的区别?
微信公众账号的服务对象就是微信,以微信为载体;微信公众帐号基于一对多的关系,而微信基于点对点的关系;微信公众账号利用微信公众平台来开发,可能需要服务器,而微信只需下载App;微信公众账号操作大部分需要电脑端操作或自动应答,微信大多数时间用手机来操作,需要手工回复;微信公众账号没有地理位置信息,微信有地理位置信息。
搭建微信公众平台需要有以下步骤:
1.在微信平台(https://mp.weixin.qq.com/)上申请一个帐号,帐号类型可以是订阅号、服务号或企业号,帐号类型不同决定了可以进行的操作不同,具体可见创建帐号时的提示
2.有一个可以从公网访问的接口,如果自己没有公网服务器,可以通过SAE(http://sae.sina.com.cn/)或BAE(http://bce.baidu.com/product/bae.html)搭建,几乎不需要费用
3.开发公网接口代码,响应微信公众平台发来的请求,做出响应即可
总的来说,微信公众平台运行的流程如下图
- 用户向订阅号、服务号或企业号(以下简称订阅号)发送消息
- 微信平台将消息经过处理以XML的形式发送到开发者接口
- 开发者接口处理XML后根据需要调用第三方接口获取服务,比如地图服务
- 第三方接口返回数据给开发者接口
- 开发者接口将需要返回的类型和数据,通常有文本、图片、语音、视频、音乐、图文这几种类型的消息拼装成XML返回给订阅号
- 微信平台将结果处理后发回给微信号
微信公众平台提供了开发者接口的示例代码,以下是PHP示例,代码比较简单,自己看一下就可以操作了
<?php /** * wechat php test */ //define your token // 这里要替换成你自己的TOKEN,在微信公众平台的开发者中心输入的TOKEN define("TOKEN", "weixin"); $wechatObj = new wechatCallbackapiTest(); // 这句代码要注释掉,否则验证会不通过 // $wechatObj->valid(); // 这句代码要新增,否则不会有消息返回 $wechatObj->responseMsg() 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)){ /* libxml_disable_entity_loader is to prevent XML eXternal Entity Injection, the best way is to check the validity of xml by yourself */ libxml_disable_entity_loader(true); $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() { // you must define TOKEN by yourself if (!defined("TOKEN")) { throw new Exception('TOKEN is not defined!'); } $signature = $_GET["signature"]; $timestamp = $_GET["timestamp"]; $nonce = $_GET["nonce"]; $token = TOKEN; $tmpArr = array($token, $timestamp, $nonce); // use SORT_STRING rule sort($tmpArr, SORT_STRING); $tmpStr = implode( $tmpArr ); $tmpStr = sha1( $tmpStr ); if( $tmpStr == $signature ){ return true; }else{ return false; } } } ?>