微信公众号/开发/基本设置/填写服务器配置页面中
URL 填写自己服务器地址
Token 值为 respond.php 设置的值
respond.php 文件内容如下:
<?php
traceHttp();define("TOKEN", "kiking");
$wechatObj = new wechatCallbackapi();
if (isset($_GET['echostr'])) {$wechatObj->valid();
} else {$wechatObj->responseMsg();
}class wechatCallbackapi
{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;$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);$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 ($keyword == "?" || $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;}}
}function traceHttp()
{logger("nnREMOTE_ADDR:" . $_SERVER["REMOTE_ADDR"] . (strstr($_SERVER["REMOTE_ADDR"], '101.226') ? " FROM WeiXin" : "Unknown IP"));logger("QUERY_STRING:" . $_SERVER["QUERY_STRING"]);
}
function logger($log_content)
{if (isset($_SERVER['HTTP_APPNAME'])) { //SAEsae_set_display_errors(false);sae_debug($log_content);sae_set_display_errors(true);} else { //LOCAL$max_size = 500000;$log_filename = l";if (file_exists($log_filename) and (abs(filesize($log_filename)) > $max_size)) {unlink($log_filename);}file_put_contents($log_filename, date('Y-m-d H:i:s') . $log_content . "rn", FILE_APPEND);}
}
提交失败解决方案:
1、或者在地址栏直接访问你在 URL 中所填的地址。
2、或者在 valid() 方法 echo 前添加 ob_clean();
public function valid()
{$echoStr = $_GET["echostr"];if ($this->checkSignature()) {ob_clean();echo $echoStr;exit;}
}
3、或者设置 php 头部信息
header("Content-Type:text/plain; charset=utf-8");
本文发布于:2024-02-02 23:02:57,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170688617647032.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |