微信公众号开发xml:Xml fields error, please check your response xml!

发布于 2022-09-03 13:06:17 字数 3143 浏览 15 评论 0

php代码如下 tp框架

<?php
namespace Home\Controller;
use Think\Controller;
class IndexController extends Controller {
    public function wechat(){
      define("TOKEN", "wujindong");
      //1,将timestamp,nonce,token按字典序排序
      //2,将排序后的参数sha1加密
      //3,将加密后的参数和signature对比
      $token = TOKEN;
      $signature = $_GET["signature"];
      $timestamp = $_GET["timestamp"];
      $nonce = $_GET["nonce"];
      $echoStr = $_GET["echostr"];
      $array = array($token, $timestamp, $nonce);
          sort($array, SORT_STRING);
      $tmpstr = implode($array);
      $tmpstr = sha1($tmpstr);
      if ($tmpstr==$signature && $echoStr) {
            echo $echoStr;
            exit;
      }else {
        $this->responseMsg();
      }
    }
    public function responseMsg()
    {
    //get post data, May be due to the different environments
    $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
    // $tmpstr = $postStr;
    libxml_disable_entity_loader(true);
    $postObj = simplexml_load_string($postStr,'SimpleXMLElement', LIBXML_NOCDATA);
    //extract post data
    if (strtolower( $postObj->MsgType ) == 'event'){
                /* libxml_disable_entity_loader is to prevent XML eXternal Entity Injection,
                   the best way is to check the validity of xml by yourself */
                   if (strtolower( $postObj->Event == 'subscribe')) {
                     $toUsername = $postObj->FromUserName;
                     $fromUsername = $postObj->ToUserName;
                     $time = time();
                     $MsgType = 'text';
                     $content = "欢迎访问我的公众号";
                     $textTpl = "<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[%s]]></MsgType><Event><![CDATA[%s]]></Event></xml>";
                     $info = sprintf($textTpl,$toUsername,$fromUsername,$time,$MsgType,$content);
                     echo $info;
                   }
        }
    }
}



测试结果如下:






http://120.27.115.59/wechat.php/Home/Index/wechat
成功或失败:
Decrypt Fail!  
错误原因:
Xml fields error, please check your response xml! 
状态码:
200    OK 
Headers:
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Connection: Keep-Alive
Date: Tue, 23 Aug 2016 10:23:34 GMT
X-Powered-By: PHP/5.5.9-1ubuntu4.14
Set-Cookie: PHPSESSID=4tlrj4jd7cgoo3ueaigc6753q7; path=/
Pragma: no-cache
Server: Apache/2.4.7 (Ubuntu)
Vary: Accept-Encoding
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Content-Type: text/html
Content-Length: 239
 
解密前xml:
<xml>
    <ToUserName>
        <![CDATA[wujindong1120]]>
    </ToUserName>
    <FromUserName>
        <![CDATA[wujindong1120]]>
    </FromUserName>
    <CreateTime>1471947814</CreateTime>
    <MsgType>
        <![CDATA[text]]>
    </MsgType>
    <Event>
        <![CDATA[欢迎访问我的公众号]]>
    </Event>
</xml>
 
解密后xml:
 

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

一片旧的回忆 2022-09-10 13:06:17

解决了。。貌似是tp的问题

〆凄凉。 2022-09-10 13:06:17

我也遇到了,不是用tp写的,用的原生。怎么搞呢

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文