微信公众账号接入指南地址:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421135319&token=&lang=zh_CN
有关页面如下:
基于该接入指南,填写有关微信公众账号的设置,在相关位置下载测试文档wx_sample.php,并上传到服务器进行接入测试,详细操作可以查看开发文档中的接入指南。
以下是对wx_sample.php的解析:
<?php
/**
* 微信对接测试文档
* wechat php test
*/
//define your token
//定义Token密钥
define("TOKEN", "weixin");
//创建对象
$wechatObj = new wechatCallbackapiTest();
//验证,成功则返回验证字符串,并退出,注释掉
// $wechatObj->valid();
// 开启自动回复功能
$wechatObj->responseMsg();
//定义类文件
class wechatCallbackapiTest
{
//实现valid验证方法:实现对接微信公众平台
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
//接受用户端发送过来的XML数据
$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
//extract post data
//判断XML数据是否为空
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);
//通过simplexml进行xml解析
$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>";
//判断XML数据是否为空
if(!empty( $keyword ))
{
//回复类型,如果是"text",代表文本类型
$msgType = "text";
//回复内容
$contentStr = "Welcome to wechat world!";
//格式化字符串
$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
//返回XML数据给手机端
echo $resultStr;
}else{
echo "Input something...";
}
}else {
echo "";
exit;
}
}
//定义checkSignature
private function checkSignature()
{
// you must define TOKEN by yourself
// 验证是否定义Token密钥
if (!defined("TOKEN")) {
throw new Exception('TOKEN is not defined!');
}
//接受微信加密签名
$signature = $_GET["signature"];
//接受时间戳信息
$timestamp = $_GET["timestamp"];
//接受随机数
$nonce = $_GET["nonce"];
//把TOKEN常量,赋值给$token变量
$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;
}
}
}
?>