Le processus de création nécessite une vérification de signature, qui est décrite comme suit :
Une fois que l'utilisateur de la plateforme publique aura soumis les informations, nous les demanderons à l'URL renseignée par requête GET. , et apportez quatre paramètres :
* signature — signature cryptée WeChat
* horodatage — horodatage
* nonce — nombre aléatoire
* echostr — chaîne aléatoire
Les développeurs vérifient la légalité de l'accès à l'URL en vérifiant la signature. Si cette requête GET renvoie le contenu du paramètre echostr tel quel, l'accès prendra effet, sinon l'accès échouera. La signature de vérification sera combinée avec le paramètre token, le paramètre timestamp et le paramètre nonce renseignés par le développeur. Le processus de cryptage est le suivant :
* Trier les trois paramètres token, timestamp et nonce par ordre lexicographique
* Trier les trois paramètres Les chaînes de paramètres sont fusionnées en une seule chaîne pour le cryptage SHA1
* La chaîne cryptée obtenue par le développeur peut être comparée à la signature pour identifier que la demande provient de WeChat.
Code :
<? $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 $_GET['echostr']; }else{ return false; } ?>
Cependant, WeChat n'utilise pas json pour transmettre des données :
Simplexml_load_string doit donc être utilisé pour charger des données XML comme un objet. De plus, on constate que la méthode POST n'est pas un urlencode, donc HTTP_RAW_POST_DATA est défini, puis les données peuvent être lues
ToUserName WeChat ID du destinataire du message, généralement l'ID WeChat du public. compte de plateforme
FromUserName WeChat ID de l'expéditeur du message
Heure de création du message CreateTime
Le message texte MsgType est un texte
Contenu du message de contenu
<?php $postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; //符合微信的POST规范 if (!emptyempty($postStr)) { $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA); //XML转对象函数,可能最近这一两年入行的不太清楚XML函数 //数据从对象取出 $fromUsername = $postObj->FromUserName; $toUsername = $postObj->ToUserName; $CreateTime = $postObj->CreateTime; $MsgType = $postObj->MsgType; $Content = $postObj->Content; $keyword = trim($postObj->Content); //安全Trim $time = time(); //XML数据体 $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(!emptyempty( $keyword )) //如果发信息来了,不是空白POST,微信规定立即回复,不用推送. { $msgType = "text"; //定义类型 $contentStr = "Hello World,I am Tater!"; //回复 $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr); //记住,Tpl是要载入的 echo $resultStr; //输出,以便微信抓! } else { echo "What are you say!"; //输入信息有问题,提示输入! } } else { echo ""; exit; } ?>
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!