微信token验证及回复内容
来源:互联网 发布:优化网站排名的步骤 编辑:程序博客网 时间:2024/06/05 00:32
<?php
namespace Weixin\Controller;
use Think\Controller;
use Doje\WxPay\CLogFileHandler;
use Doje\WxPay\Log;
use Doje\Util\Constant;
class IndexController extends Controller {
public function index(){
if (!isset($_GET['echostr'])){
$this->responseMsg();
}else{
$this->valid();
exit;
}
}
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 = Constant::TOKEN;
$tmpArr = array($token, $timestamp, $nonce);
sort($tmpArr);
$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);
$RX_TYPE = trim($postObj->MsgType);
switch ($RX_TYPE){
case "text":
$resultStr = $this->receiveText($postObj);
break;
case "event":
$resultStr = $this->receiveEvent($postObj);
break;
}
// $resultStr = $this->getPushOpenId($postObj);
//获取到openid
echo $resultStr;
}else {
echo "";
exit;
}
}
public function getPushOpenId($object){
$funcFlag = 0;
$resultStr = "";
$contentStr = "";
$textTpl = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[%s]]></Content>
<FuncFlag>%d</FuncFlag>
</xml>";
$resultStr = sprintf($textTpl, $object->FromUserName, $object->ToUserName, time(), $object->FromUserName, $funcFlag);
return $resultStr;
}
private function receiveText($object)
{
$funcFlag = 0;
$keyword = trim($object->Content);
$resultStr = "";
$contentStr = "";
if($keyword == "文本"){
$contentStr = "文本消息";
$resultStr = $this->transmitText($object, $contentStr, $funcFlag);
}
else if($keyword == "图文" || $keyword == "单图文"){
$dateArray = array();
$dateArray[] = array("Title"=>"单图文标题",
"Description"=>"单图文内容",
"Picurl"=>"http://XXX.jpg",
"Url" =>"http://XXX");
$resultStr = $this->transmitNews($object, $dateArray, $funcFlag);
}else if($keyword == "多图文"){
$dateArray = array();
$dateArray[] = array("Title"=>"多图文1标题", "Description"=>"", "Picurl"=>"http://XXX.jpg", "Url" =>"http://XXX");
$dateArray[] = array("Title"=>"多图文2标题", "Description"=>"", "Picurl"=>"http://XXX.jpg", "Url" =>"http://XXX");
$dateArray[] = array("Title"=>"多图文3标题", "Description"=>"", "Picurl"=>"http://XXX.jpg", "Url" =>"http://XXX");
$resultStr = $this->transmitNews($object, $dateArray, $funcFlag);
}else if($keyword == "音乐"){
$musicArray = array("Title"=>"XXX", "Description"=>"XXX", "MusicUrl"=>"http://XXX.mp3","HQMusicUrl"=>"http://XXX.mp3");
$resultStr = $this->transmitMusic($object, $musicArray, $funcFlag);
}else{
$resultStr = $keyword;
}
return $resultStr;
}
private function receiveEvent($object){
$contentStr = "";
switch ($object->Event){
case "subscribe":
$contentStr = "欢迎关注! ";
if (isset($object->EventKey)){
$contentStr = "关注二维码场景 ".$object->EventKey;
}
break;
case "SCAN":
$contentStr = "扫描 ".$object->EventKey;
//要实现统计分析,则需要扫描事件写入数据库,这里可以记录 EventKey及用户OpenID,扫描时间
break;
default:
break;
}
$resultStr = $this->transmitText($object, $contentStr);
return $resultStr;
}
private function transmitText($object, $content, $flag = 0){
$textTpl = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[%s]]></Content>
<FuncFlag>%d</FuncFlag>
</xml>";
$resultStr = sprintf($textTpl, $object->FromUserName, $object->ToUserName, time(), $content, $flag);
return $resultStr;
}
private function transmitNews($object, $arr_item, $flag = 0){
if(!is_array($arr_item))
return;
$itemTpl = "<item>
<Title><![CDATA[%s]]></Title>
<Description><![CDATA[%s]]></Description>
<PicUrl><![CDATA[%s]]></PicUrl>
<Url><![CDATA[%s]]></Url>
</item>";
$item_str = "";
foreach ($arr_item as $item)
$item_str .= sprintf($itemTpl, $item['Title'], $item['Description'], $item['Picurl'], $item['Url']);
$newsTpl = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[news]]></MsgType>
<Content><![CDATA[]]></Content>
<ArticleCount>%s</ArticleCount>
<Articles>
$item_str</Articles>
<FuncFlag>%s</FuncFlag>
</xml>";
$resultStr = sprintf($newsTpl, $object->FromUserName, $object->ToUserName, time(), count($arr_item), $flag);
return $resultStr;
}
private function transmitMusic($object, $musicArray, $flag = 0)
{
$itemTpl = "<Music>
<Title><![CDATA[%s]]></Title>
<Description><![CDATA[%s]]></Description>
<MusicUrl><![CDATA[%s]]></MusicUrl>
<HQMusicUrl><![CDATA[%s]]></HQMusicUrl>
</Music>";
$item_str = sprintf($itemTpl, $musicArray['Title'], $musicArray['Description'], $musicArray['MusicUrl'], $musicArray['HQMusicUrl']);
$textTpl = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[music]]></MsgType>
$item_str
<FuncFlag>%d</FuncFlag>
</xml>";
$resultStr = sprintf($textTpl, $object->FromUserName, $object->ToUserName, time(), $flag);
return $resultStr;
}
public function traceHttp(){
$this->logger("\n\nREMOTE_ADDR:".$_SERVER["REMOTE_ADDR"].(strstr($_SERVER["REMOTE_ADDR"],'101.226')? " FROM WeiXin": "Unknown IP"));
$this->logger("QUERY_STRING:".$_SERVER["QUERY_STRING"]);
}
public function logger($log_content){
//初始化日志,记录日志检测过程
$logHandler= new CLogFileHandler("./logs/".date('Y-m-d').".log");
Log::Init($logHandler, 15);
Log::DEBUG($log_content);
}
}
namespace Weixin\Controller;
use Think\Controller;
use Doje\WxPay\CLogFileHandler;
use Doje\WxPay\Log;
use Doje\Util\Constant;
class IndexController extends Controller {
public function index(){
if (!isset($_GET['echostr'])){
$this->responseMsg();
}else{
$this->valid();
exit;
}
}
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 = Constant::TOKEN;
$tmpArr = array($token, $timestamp, $nonce);
sort($tmpArr);
$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);
$RX_TYPE = trim($postObj->MsgType);
switch ($RX_TYPE){
case "text":
$resultStr = $this->receiveText($postObj);
break;
case "event":
$resultStr = $this->receiveEvent($postObj);
break;
}
// $resultStr = $this->getPushOpenId($postObj);
//获取到openid
echo $resultStr;
}else {
echo "";
exit;
}
}
public function getPushOpenId($object){
$funcFlag = 0;
$resultStr = "";
$contentStr = "";
$textTpl = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[%s]]></Content>
<FuncFlag>%d</FuncFlag>
</xml>";
$resultStr = sprintf($textTpl, $object->FromUserName, $object->ToUserName, time(), $object->FromUserName, $funcFlag);
return $resultStr;
}
private function receiveText($object)
{
$funcFlag = 0;
$keyword = trim($object->Content);
$resultStr = "";
$contentStr = "";
if($keyword == "文本"){
$contentStr = "文本消息";
$resultStr = $this->transmitText($object, $contentStr, $funcFlag);
}
else if($keyword == "图文" || $keyword == "单图文"){
$dateArray = array();
$dateArray[] = array("Title"=>"单图文标题",
"Description"=>"单图文内容",
"Picurl"=>"http://XXX.jpg",
"Url" =>"http://XXX");
$resultStr = $this->transmitNews($object, $dateArray, $funcFlag);
}else if($keyword == "多图文"){
$dateArray = array();
$dateArray[] = array("Title"=>"多图文1标题", "Description"=>"", "Picurl"=>"http://XXX.jpg", "Url" =>"http://XXX");
$dateArray[] = array("Title"=>"多图文2标题", "Description"=>"", "Picurl"=>"http://XXX.jpg", "Url" =>"http://XXX");
$dateArray[] = array("Title"=>"多图文3标题", "Description"=>"", "Picurl"=>"http://XXX.jpg", "Url" =>"http://XXX");
$resultStr = $this->transmitNews($object, $dateArray, $funcFlag);
}else if($keyword == "音乐"){
$musicArray = array("Title"=>"XXX", "Description"=>"XXX", "MusicUrl"=>"http://XXX.mp3","HQMusicUrl"=>"http://XXX.mp3");
$resultStr = $this->transmitMusic($object, $musicArray, $funcFlag);
}else{
$resultStr = $keyword;
}
return $resultStr;
}
private function receiveEvent($object){
$contentStr = "";
switch ($object->Event){
case "subscribe":
$contentStr = "欢迎关注! ";
if (isset($object->EventKey)){
$contentStr = "关注二维码场景 ".$object->EventKey;
}
break;
case "SCAN":
$contentStr = "扫描 ".$object->EventKey;
//要实现统计分析,则需要扫描事件写入数据库,这里可以记录 EventKey及用户OpenID,扫描时间
break;
default:
break;
}
$resultStr = $this->transmitText($object, $contentStr);
return $resultStr;
}
private function transmitText($object, $content, $flag = 0){
$textTpl = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[%s]]></Content>
<FuncFlag>%d</FuncFlag>
</xml>";
$resultStr = sprintf($textTpl, $object->FromUserName, $object->ToUserName, time(), $content, $flag);
return $resultStr;
}
private function transmitNews($object, $arr_item, $flag = 0){
if(!is_array($arr_item))
return;
$itemTpl = "<item>
<Title><![CDATA[%s]]></Title>
<Description><![CDATA[%s]]></Description>
<PicUrl><![CDATA[%s]]></PicUrl>
<Url><![CDATA[%s]]></Url>
</item>";
$item_str = "";
foreach ($arr_item as $item)
$item_str .= sprintf($itemTpl, $item['Title'], $item['Description'], $item['Picurl'], $item['Url']);
$newsTpl = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[news]]></MsgType>
<Content><![CDATA[]]></Content>
<ArticleCount>%s</ArticleCount>
<Articles>
$item_str</Articles>
<FuncFlag>%s</FuncFlag>
</xml>";
$resultStr = sprintf($newsTpl, $object->FromUserName, $object->ToUserName, time(), count($arr_item), $flag);
return $resultStr;
}
private function transmitMusic($object, $musicArray, $flag = 0)
{
$itemTpl = "<Music>
<Title><![CDATA[%s]]></Title>
<Description><![CDATA[%s]]></Description>
<MusicUrl><![CDATA[%s]]></MusicUrl>
<HQMusicUrl><![CDATA[%s]]></HQMusicUrl>
</Music>";
$item_str = sprintf($itemTpl, $musicArray['Title'], $musicArray['Description'], $musicArray['MusicUrl'], $musicArray['HQMusicUrl']);
$textTpl = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[music]]></MsgType>
$item_str
<FuncFlag>%d</FuncFlag>
</xml>";
$resultStr = sprintf($textTpl, $object->FromUserName, $object->ToUserName, time(), $flag);
return $resultStr;
}
public function traceHttp(){
$this->logger("\n\nREMOTE_ADDR:".$_SERVER["REMOTE_ADDR"].(strstr($_SERVER["REMOTE_ADDR"],'101.226')? " FROM WeiXin": "Unknown IP"));
$this->logger("QUERY_STRING:".$_SERVER["QUERY_STRING"]);
}
public function logger($log_content){
//初始化日志,记录日志检测过程
$logHandler= new CLogFileHandler("./logs/".date('Y-m-d').".log");
Log::Init($logHandler, 15);
Log::DEBUG($log_content);
}
}
0 0
- 微信token验证及回复内容
- 微信开发中验证 基本配置 的token验证 及自动回复代码(PHP)
- 微信公众号验证token+关注回复+关键字回复+单图文回复
- 微信验证及自动回复
- 微信Token验证
- 微信token验证
- 微信token验证
- 基于PHP的微信公众平台开发(TOKEN验证,消息回复)
- 微信Token验证失败原因及解决方案
- 微信token验证代码
- 微信Token验证失败
- 微信token验证失败
- 微信token验证失败
- 微信token验证失败
- 微信公众号回复内容
- jsp 微信公众平台 token验证
- 微信公众平台Token验证失败
- jsp 微信公众平台 token验证
- 搜集opencv学习过程中的问题
- mysql常用函数
- TOMCAT JDBC连接不上MYSQL的常用诊断
- 当spring 容器初始化完成后执行某个方法
- Java中的集合
- 微信token验证及回复内容
- [Android] ListView中getView的原理+如何在ListView中放置多个item
- SpringMVC知识梳理
- IOS viewcontroller中tableview不能滑动到最底部
- Unable to add window -- token null is not for an application错误的解决方法 android开发
- 性能管理之我见
- iOS运行时与method swizzling:
- 循环时间段中的月份
- Tomcat https 单项认证