对微信PHPdemo的分析
来源:互联网 发布:中兴和华为知乎 编辑:程序博客网 时间:2024/06/17 14:44
<?php
/**
* wechat php test
*/
//define your token
define("TOKEN", "weixin");//定义Token的值
$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"];//通过POST方式获得信息
//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);//将自己想发送的内容以固定的格式发给用户
//$textTpl:数据格式,如果想发送图片或其他,文档上都有格式
//$fromUsername:开发者微信号 ,$toUsername:发送方帐号(一个OpenID) $time:消息创建时间 (整型)
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;
}
}
}
?>
注意:第一次验证时,将$wechatObj->responseMsg();注释掉,
当验证成功后,将$wechatObj->valid();注释掉,将wechatObj->responseMsg()加上
/**
* wechat php test
*/
//define your token
define("TOKEN", "weixin");//定义Token的值
$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"];//通过POST方式获得信息
//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);//将自己想发送的内容以固定的格式发给用户
//$textTpl:数据格式,如果想发送图片或其他,文档上都有格式
//$fromUsername:开发者微信号 ,$toUsername:发送方帐号(一个OpenID) $time:消息创建时间 (整型)
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;
}
}
}
?>
注意:第一次验证时,将$wechatObj->responseMsg();注释掉,
当验证成功后,将$wechatObj->valid();注释掉,将wechatObj->responseMsg()加上
- 对微信PHPdemo的分析
- 利用Wireshark软件对微信协议的分析---qpic
- 对深圳学生写给香港同龄人的信的分析
- 个人对微信的评价《微信的发展》
- 对微信收费的一点看法
- 浅谈微信对运营商的冲击
- 对微信营销的看法
- Android 对微信接口的研究
- 对微信的一点研究
- js对微信的相关操作
- 个人对微信钱包的看法
- 微信对账文件的处理
- 对微信的简单介绍
- 微信、陌陌 IM 的架构分析
- 微信读书的优势分析
- 微信通信协议,用自己的程序收发微信,微信网页web版分析
- 微信盈利模式分析
- 微信数据分析
- 『Android』activity的生命周期
- AD Blocker Trial 注册算法
- imageNamed和dataWithContentsOfFile的区别
- C++接口与实现分离(转
- XE2 和D7 的对比:
- 对微信PHPdemo的分析
- 项目三 按总成绩输出
- 求整数数组中和最大的子数组的3种方法
- JVM监控工具介绍
- linux学习入门2——linux文件系統基本结构(linuxcast.net)(倒转树状结构、命名机制、查看文件类型)
- php通过xpath访问xml文件
- TM框架-MySQL版本(实现动态开发和权限管理)-附下载地址
- xml DTD验证
- C/C++中函数参数传递详解