Maison > Questions et réponses > le corps du texte
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 ;
}
}
}
?>
高洛峰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();
}
}