概述
这是一个简单的微信开发示例,当用户的输入不为空的时候,公众号将会向用户显示当前的时间。
源码
<?php
define("ToKEN", "weixin"); //定义一个常量
$wechatObj = new wechatCallbackapiTest();
//标准模版
if (isset($_GET['echostr'])) {
//echo $_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; //微信token
$tmpArr = array($token, $timestamp, $nonce);
sort($tmpArr); //对数组进行排序
$tmpStr = implode($tmpArr); //将一个一维数组的值转化为字符串
$tmpStr = sha1($tmpStr); //计算字符串的 sha1 散列值
if ($tmpStr == $signature) {
return true;
} else {
return false;
}
}
//发送信息
public function responseMsg()
{
/**
* 基本上$GLOBALS['HTTP_RAW_POST_DATA'] 和 $_POST是一样的。但是如果post过来的数据不是PHP能够识别的,
* 你可以用 $GLOBALS['HTTP_RAW_POST_DATA']来接收,比如 text/xml 或者 soap 等等
*/
$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
if (!empty($postStr)) { //检查一个变量是否为空
$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
/**
* 用户的OpenID,不是惟一的,相同的用户关注不同的公众账号后,
* 获取的OpenID是不同的。
*/
$fromUsername = $postObj->FromUserName; //发送方微信号(openid)
$toUsername = $postObj->ToUserName; //开发者微信公共账号
$keyword = trim($postObj->Content);
$time = time(); //返回当前的 Unix 时间戳
//返回给微信服务器的模版
$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 = "当前时间: " . date("Y-m-d H:i:s", time());
$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr); //格式化字符串
echo $resultStr;
}
} else {
echo "获取的信息为空";
exit;
}
}
}
?>
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。