欢迎关注我的微信公众账号“APP每日推荐”
推荐一些精彩手机应用,互联网行业资讯~
<!--题外话 :做这样一个系列的原因在于,这个微信公众平台算的上是我解除编程一来开发的第一个有实际用途的东西,在这之中有很多体会,不敢说讲给大家听,只是同大家分享一下,作为学计算机的,因为专科学的是网络,所以编程解除的并不深,现在开始从新开始学习编程。这里面的代码可能写的不是很规范,还请您指出,我会继续修改的。-->
最终制作效果请见:http://blog.csdn.net/c123853648/article/details/11095043
之前我们做了一系列的准备工作,这期开始我们正式进入编码工作。
首先我们需要在代码中修改一个地方,上次在验证的时候我们添加了这样一行代码
$wechatObj = new wechatCallbackapiTest();
$wechatObj->valid();
现在验证已经完成我们需要这样修改一下,修改为
$wechatObj = new wechatCallbackapiTest();
//$wechatObj->valid();
$wechatObj->responseMsg();
下面是官方提供的demo
<?php
/**
* wechat php test
*/
//define your token
define("TOKEN", "test_02");
$wechatObj = new wechatCallbackapiTest();
$wechatObj->valid();
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)){
$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()
{
$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;
}
}
}
?>
前23行和61行之后的开发时并没有太多关注,这里我就不做分析了,日后研究了再写吧。
我们从responseMsg()这个方法开始说吧。
$postStr变量接受用户提交的信息(xml格式),之后通过调用simplexml_load_string() 函数把 XML 字符串载入对象中。
在得到了$postObj这个变量后,通过
<span style="white-space:pre"> </span>$fromUsername = $postObj->FromUserName;
$toUsername = $postObj->ToUserName;
$keyword = trim($postObj->Content);
这种方式获取到用户传来的各种数据,并存储在相应的变量中相应的信息格式参照消息接口指南:
http://mp.weixin.qq.com/wiki/index.php?title=%E6%B6%88%E6%81%AF%E6%8E%A5%E5%8F%A3%E6%8C%87%E5%8D%97
$textTpl这个变量用于存储各种回复信息类型的结构,可以在消息接口指南中查到,这里可以根据自己的需求添加不同的信息类型结构的变量
$contentStr这个变量对应着回复文本信息的文本内容
sprintf函数的作用可以说是将需要回复的信息,添加到$textTpl定义的“结构”中,springf函数使用方法如下:
$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
在后面的开发过程中,基本上是根据【获取用户发送的内容】->【对内容的处理】->【通过编写相关方法,将内容在数据库中做相关操作】->【返回数据库操作的结果】->【填充$textTpl“结构”中的变量】->【输出结果】