微信公众平台开发实践

今天中午去图书馆还书&&借书,偶然看到一本《微信公众平台开发最佳实践》,想着竟然这也有教材了?于是就借回来看了一下,拿自己的微信公众号(硬性植入:八宝粥)当小白鼠,实践了其中一部分。

开发需要有自己的服务器,这本书上说的新浪SAE不错,于是我也就打算用SAE试试。之前就用过SAE,不过很久没用了;登录了一看,欠费了!!!我那“挺尸”了好几年的WordPress博客,竟然还在收费。为了接着用,就充了10块钱。顺便把博客删了。

服务器端的验证文件(PHP实现)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
define("TOKEN", "weixin");
$wechatObj = new wechatCallbackapiTest();
if (isset($_GET['echostr'])) {
$wechatObj->valid();
}else{
$wechatObj->responseMsg();
}

class wechatCallbackapiTest
{

//验证签名
public function valid()
{

$echoStr = $_GET["echostr"];
if($this->checkSignature()){
echo $echoStr;
exit;
}
}

private function checkSignature()
{

$signature = $_GET["signature"];
$timestamp = $_GET["timestamp"];
$nonce = $_GET["nonce"];

$token = TOKEN;
$tmpArr = array($token, $timestamp, $nonce);
sort($tmpArr, SORT_STRING);
$tmpStr = implode( $tmpArr );
$tmpStr = sha1( $tmpStr );

if( $tmpStr == $signature ){
return true;
}else{
return false;
}
}

//响应消息
public function responseMsg()
{

$postStr = $GLOBALS["HTTP_RAW_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($keyword == "?" || $keyword == "?")
{
$msgType = "text";
$contentStr = date("Y-m-d H:i:s",time());
$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
echo $resultStr;
}
}else{
echo "";
exit;
}
}
}

微信公众平台配置

20160411_1

终于走到验证服务器这一步,点击提交。可是提交了很多次,无论如何都是“Token验证失败”,尝试了很多次,也试了网上的一些解决办法,没用。

于是回到起点,老老实实的在自己的阿里云服务器上新建一个虚拟机,解析域名,ftp上传验证文件。然后就成功了……

20160411_2

不过,验证成功后,公众号原本的自动回复和自定义菜单功能就不能使用了,因为需要自己在服务器端配置。

20160411_3

20160411_4

基础接口

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
//用户发送的消息类型判断
switch ($RX_TYPE)
{
case "text": //文本消息
$result = $this->receiveText($postObj);
break;
case "image": //图片消息
$result = $this->receiveImage($postObj);
break;

case "voice": //语音消息
$result = $this->receiveVoice($postObj);
break;
case "video": //视频消息
$result = $this->receiveVideo($postObj);
break;
case "location"://位置消息
$result = $this->receiveLocation($postObj);
break;
case "link": //链接消息
$result = $this->receiveLink($postObj);
break;
case "event": //事件消息
$result = $this->receiveEvent($postObj);
break;
default:
$result = "unknow msg type: ".$RX_TYPE;
break;
}
echo $result;

后面还有很多接口,比如自定义菜单、微信支付、微信小店等,不过需要通过微信认证才能具有接口权限;而微信认证暂不支持个人类型的公众帐号申请微信认证。

20160411_5

完整代码:
微信公众平台开发实践

八宝粥 wechat
欢迎您扫一扫上面的微信公众号,订阅我的博客!