recherche

Maison  >  Questions et réponses  >  le corps du texte

php - Il n'y a pas de réponse lors de l'envoi d'un message au compte officiel WeChat

Un problème me dérange depuis longtemps. Je pense que mon code est tout à fait correct, mais il ne peut tout simplement pas répondre automatiquement. Quelqu'un pourrait-il m'aider, merci beaucoup
Le code est le suivant.
/p> <?php //définissez votre jeton définir("TOKEN", "weixin"); $wechatObj = nouveau wechatCallbackapiTest(); if (isset($_GET['echostr'])) { $wechatObj->valid(); }autre{ $wechatObj->responseMsg(); } classe wechatCallbackapiTest { fonction publique valide() { $echoStr = $_GET["echostr"]; //signature valide, option if($this->checkSignature()){ echo $echoStr; sortie; } } fonction publique réponseMsg() { //obtenir les données de publication, peut être dû aux différents environnements //$postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; $postStr = file_get_contents("php://input"); // extraire les données de publication si (!empty($postStr)){ /* libxml_disable_entity_loader sert à empêcher l'injection d'entités externes XML, le meilleur moyen est de vérifier vous-même la validité du XML */ //libxml_disable_entity_loader(true); $postObj = simplexml_load_string($postStr); $fromUserName = $postObj->FromUserName; $toUsername = $postObj->ToUserName; $keyword = trim($postObj->Content); $heure = heure(); $textTpl = "<xml> <ToUserName><![CDATA[%s]]></ToUserName> <FromUserName><![CDATA[%s]]></FromUserName> <CreateTime>%s</CreateTime> <MsgType><![CDATA[%s]]></MsgType> <Contenu><![CDATA[%s]]></Contenu> <FuncFlag>0</FuncFlag> </xml>"; si(!empty( $mot-clé )) { $msgType = "texte" ; $contentStr = "Bienvenue dans le monde WeChat !"; $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr); echo $resultStr; }autre{ echo "Saisissez quelque chose..."; } }autre { écho "" ; sortie; } } fonction privée checkSignature() { // vous devez définir TOKEN par vous-même si (!défini("TOKEN")) { throw new Exception('TOKEN n'est pas défini !'); } $signature = $_GET["signature"]; $horodatage = $_GET["horodatage"]; $nonce = $_GET["nonce"]; $jeton = JETON ; $tmpArr = array($token, $timestamp, $nonce); // utilise la règle SORT_STRING trier($tmpArr, SORT_STRING); $tmpStr = imploser( $tmpArr ); $tmpStr = sha1( $tmpStr ); si( $tmpStr == $signature ){ renvoie vrai ; }autre{ renvoie faux ; } } } ?>

PHP中文网PHP中文网2788 Il y a quelques jours373

répondre à tous(1)je répondrai

  • 高洛峰

    高洛峰2017-05-16 13:07:00

    Essayez d'utiliser simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA) pour analyser $postStr
    Essayez également d'ajouter cette réponse suivante devant $keyword

    if($postObj->MsgType == 'event'){ //如果XML信息里消息类型为event
     if($postObj->Event == 'subscribe'){ //如果是订阅事件
      $contentStr = "欢迎订阅~~~";
      $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgtype, $contentStr);
      echo $resultStr;
      exit();
     }
    }

    répondre
    0
  • Annulerrépondre