Table des matières
微信订阅号开发之token验证后,自动回复消息功能做好,发送消息没有返回,token自动回复
Maison développement back-end tutoriel php 微信订阅号开发之token验证后,自动回复消息功能做好,发送消息没有返回,token自动回复_PHP教程

微信订阅号开发之token验证后,自动回复消息功能做好,发送消息没有返回,token自动回复_PHP教程

Jul 12, 2016 am 09:03 AM
开发者

微信订阅号开发之token验证后,自动回复消息功能做好,发送消息没有返回,token自动回复

相信很多人会跟我一样,token验证之后,发送消息给订阅号,没有消息返回。

以下,说一下我辛苦调试得到的解决办法:

首先,token验证:

自己写的token一直验证失败,找了好久,没有发现bug。实在没办法,就用了官方的示例代码。并且通过示例代码调试,发现了一个让我吐血的bug(也不算bug):

token验证貌似要求字符编码格式!!!!

官方的示例代码,直接上传到服务器,token直接过!

把官方示例代码改为UTF-8格式,再上传覆盖,token失败失败!失败!

后来,把自己写的修改为ANSI格式还是token失败!醉了醉了!那只好用官方示例代码。在此,说下,token是一次握手验证,验证过一次就不用了。

 

下面,言归正传,貌似偏题了...orz

token验证之后,直接用官方示例代码,赶紧测试自己的订阅号,结果....发出去的消息就跟泼出去的水一样,什么鬼都没有返回...orz

又各种找bug,各种群问,各种搜索....历经本博主九九八十一的努力,终于找出了问题所在(这里是指我自己开发的,并不包括全部,如果你有不同的bug,欢迎交流):

1、最容易被忽视的一个bug,官方给的示例代码,压根就没调用写好的那个responseMsg()函数!

2、把之前的token代码注释,也就是$wechatObj->valid();这行代码。因为toke验证那段代码会有一个echo $echostr,会把responseMsg()函数里的echo $resultStr;(56行)xml格式混乱,输回给微信服务器就无法识别了(貌似只能识别xml格式,还有json格式)。(token验证是一次握手验证,验证开发者之后,就可以不用了,赶紧让它消失在我们整洁的代码orz...)

3、最恶心的一个bug,还是字符编码问题!orz...xml要求UTF-8编码,所以,把示例代码改回UTF-8编码!这个bug找的让我崩溃!!!

 

下面是我修改后的代码,能正常运行,无bug,需要的可以参考一下

<span> 1</span> <?<span>php
</span><span> 2</span> <span>/*</span><span>*
</span><span> 3</span> <span>  * wechat php test
</span><span> 4</span>   <span>*/</span>
<span> 5</span> 
<span> 6</span> <span>//</span><span>define your token</span>
<span> 7</span> <span>define</span>("TOKEN", "codcodog"<span>);
</span><span> 8</span> 
<span> 9</span> <span>$wechatObj</span> = <span>new</span><span> wechatCallbackapiTest();
</span><span>10</span> <span>//</span><span>$wechatObj->valid();</span>
<span>11</span> <span>$wechatObj</span>-><span>responseMsg();
</span><span>12</span> 
<span>13</span> <span>class</span><span> wechatCallbackapiTest
</span><span>14</span> <span>{
</span><span>15</span>     <span>public</span> <span>function</span><span> valid()
</span><span>16</span> <span>    {
</span><span>17</span>         <span>$echoStr</span> = <span>$_GET</span>["echostr"<span>];
</span><span>18</span> 
<span>19</span>         <span>//</span><span>valid signature , option</span>
<span>20</span>         <span>if</span>(<span>$this</span>-><span>checkSignature()){
</span><span>21</span>         <span>header</span>('content-type:text'<span>);
</span><span>22</span>             <span>echo</span> <span>$echoStr</span><span>;
</span><span>23</span>             <span>exit</span><span>;
</span><span>24</span> <span>        }
</span><span>25</span> <span>    }
</span><span>26</span> 
<span>27</span>     <span>public</span> <span>function</span><span> responseMsg()
</span><span>28</span> <span>    {
</span><span>29</span>         <span>//</span><span>get post data, May be due to the different environments</span>
<span>30</span>         <span>$postStr</span> = <span>$GLOBALS</span>["HTTP_RAW_POST_DATA"<span>];
</span><span>31</span>         <span>//</span><span>$postStr = file_get_contents("php://input");</span>
<span>32</span>         <span>file_put_contents</span>("log.txt",<span>$postStr</span>,<span>FILE_APPEND );
</span><span>33</span>           <span>//</span><span>extract post data</span>
<span>34</span>         <span>if</span> (!<span>empty</span>(<span>$postStr</span><span>)){
</span><span>35</span>                 <span>/*</span><span> libxml_disable_entity_loader is to prevent XML eXternal Entity Injection,
</span><span>36</span> <span>                   the best way is to check the validity of xml by yourself </span><span>*/</span>
<span>37</span>                 libxml_disable_entity_loader(<span>true</span><span>);
</span><span>38</span>                   <span>$postObj</span> = <span>simplexml_load_string</span>(<span>$postStr</span>, 'SimpleXMLElement',<span> LIBXML_NOCDATA);
</span><span>39</span>                 <span>$fromUsername</span> = <span>$postObj</span>->FromUserName; <span>//</span><span>用户</span>
<span>40</span>                 <span>$toUsername</span> = <span>$postObj</span>->ToUserName;     <span>//</span><span>公众平台</span>
<span>41</span>                 <span>$keyword</span> = <span>trim</span>(<span>$postObj</span>-><span>Content);
</span><span>42</span>                 <span>$time</span> = <span>time</span><span>();
</span><span>43</span>                 <span>$textTpl</span> = "<span><xml>
</span><span>44</span> <span>                            <ToUserName><![CDATA[%s]]></ToUserName>
</span><span>45</span> <span>                            <FromUserName><![CDATA[%s]]></FromUserName>
</span><span>46</span> <span>                            <CreateTime>%s</CreateTime>
</span><span>47</span> <span>                            <MsgType><![CDATA[%s]]></MsgType>
</span><span>48</span> <span>                            <Content><![CDATA[%s]]></Content>
</span><span>49</span> <span>                            <FuncFlag>0</FuncFlag>
</span><span>50</span>                             </xml>"<span>;             
</span><span>51</span>                 <span>if</span>(!<span>empty</span>( <span>$keyword</span><span> ))
</span><span>52</span> <span>                {
</span><span>53</span>                       <span>$msgType</span> = "text"<span>;
</span><span>54</span>                     <span>$contentStr</span> = "Welcome to wechat world!"<span>;
</span><span>55</span>                     <span>$resultStr</span> = <span>sprintf</span>(<span>$textTpl</span>, <span>$fromUsername</span>, <span>$toUsername</span>, <span>$time</span>, <span>$msgType</span>, <span>$contentStr</span><span>);
</span><span>56</span>                     <span>echo</span> <span>$resultStr</span><span>;
</span><span>57</span>                 }<span>else</span><span>{
</span><span>58</span>                     <span>echo</span> "Input something..."<span>;
</span><span>59</span> <span>                }
</span><span>60</span> 
<span>61</span>         }<span>else</span><span> {
</span><span>62</span>             <span>echo</span> ""<span>;
</span><span>63</span>             <span>exit</span><span>;
</span><span>64</span> <span>        }
</span><span>65</span> <span>    }
</span><span>66</span>         
<span>67</span>     <span>private</span> <span>function</span><span> checkSignature()
</span><span>68</span> <span>    {
</span><span>69</span>         <span>//</span><span> you must define TOKEN by yourself</span>
<span>70</span>         <span>if</span> (!<span>defined</span>("TOKEN"<span>)) {
</span><span>71</span>             <span>throw</span> <span>new</span> <span>Exception</span>('TOKEN is not defined!'<span>);
</span><span>72</span> <span>        }
</span><span>73</span>         
<span>74</span>         <span>$signature</span> = <span>$_GET</span>["signature"<span>];
</span><span>75</span>         <span>$timestamp</span> = <span>$_GET</span>["timestamp"<span>];
</span><span>76</span>         <span>$nonce</span> = <span>$_GET</span>["nonce"<span>];
</span><span>77</span>                 
<span>78</span>         <span>$token</span> =<span> TOKEN;
</span><span>79</span>         <span>$tmpArr</span> = <span>array</span>(<span>$token</span>, <span>$timestamp</span>, <span>$nonce</span><span>);
</span><span>80</span>         <span>//</span><span> use SORT_STRING rule</span>
<span>81</span>         <span>sort</span>(<span>$tmpArr</span>,<span> SORT_STRING);
</span><span>82</span>         <span>$tmpStr</span> = <span>implode</span>( <span>$tmpArr</span><span> );
</span><span>83</span>         <span>$tmpStr</span> = <span>sha1</span>( <span>$tmpStr</span><span> );
</span><span>84</span>         
<span>85</span>         <span>if</span>( <span>$tmpStr</span> == <span>$signature</span><span> ){
</span><span>86</span>             <span>return</span> <span>true</span><span>;
</span><span>87</span>         }<span>else</span><span>{
</span><span>88</span>             <span>return</span> <span>false</span><span>;
</span><span>89</span> <span>        }
</span><span>90</span> <span>    }
</span><span>91</span> <span>}
</span><span>92</span> 
<span>93</span> 
<span>94</span> ?>
Copier après la connexion

 

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/1082307.htmlTechArticle微信订阅号开发之token验证后,自动回复消息功能做好,发送消息没有返回,token自动回复 相信很多人会跟我一样,token验证之后,发送消息...
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
Will R.E.P.O. Vous avez un jeu croisé?
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Mise à niveau du service d'accès Tmall Elf Cloud : frais de développement gratuits Mise à niveau du service d'accès Tmall Elf Cloud : frais de développement gratuits Jan 09, 2024 pm 10:06 PM

Selon les informations de ce site du 9 janvier, Tmall Elf a récemment annoncé la mise à niveau du service d'accès Yunyun. Le service d'accès Yunyun mis à niveau passera du mode gratuit au mode payant à partir du 1er janvier. Ce site est doté de nouvelles fonctionnalités et optimisations : optimisation du protocole cloud pour améliorer la stabilité des connexions des appareils ; optimisation du contrôle vocal pour les catégories clés de mise à niveau des autorisations de compte : ajout de la fonction d'affichage des applications tierces des développeurs dans Tmall Genie pour aider les utilisateurs à mettre à jour plus rapidement ; C'est pratique pour la liaison de compte. Dans le même temps, l'autorisation de compte d'application tierce pour les développeurs a été ajoutée pour prendre en charge la liaison en un clic des comptes Tmall Elf ; , les utilisateurs peuvent contrôler les appareils et obtenir des informations via l'application et les haut-parleurs de l'écran. L'état de l'équipement ; de nouvelles capacités de liaison de scène intelligentes, de nouveaux attributs et événements de produit, qui peuvent être signalés comme état ou événements pour définir Tmall.

Afin de sauvegarder les souvenirs d'enfance, le développeur a décidé d'utiliser une programmation ancienne : un remake haute définition d'un jeu en Flash Afin de sauvegarder les souvenirs d'enfance, le développeur a décidé d'utiliser une programmation ancienne : un remake haute définition d'un jeu en Flash Apr 11, 2023 pm 10:16 PM

Il y a plus de deux ans, Adobe a annoncé de manière captivante qu'il mettrait fin au support de Flash le 31 décembre 2020, annonçant ainsi la fin d'une époque. Deux ans plus tard, Adobe a déjà supprimé toutes les archives des premières versions de Flash Player de son site officiel et bloqué l'exécution du contenu Flash. Microsoft a également mis fin à la prise en charge d'Adobe Flash Player et a interdit son exécution sur n'importe quel navigateur Microsoft. Le composant Adobe Flash Player a été définitivement supprimé via Windows Update en juillet 2021. Quand Flash

Quel outil est PyCharm ? À quels développeurs convient-il ? Quel outil est PyCharm ? À quels développeurs convient-il ? Feb 20, 2024 am 08:29 AM

PyCharm est un environnement de développement intégré (IDE) Python développé par JetBrains. Il fournit aux développeurs Python des fonctionnalités et des outils riches pour les aider à écrire, déboguer et déployer du code Python plus efficacement. PyCharm possède de nombreuses fonctionnalités puissantes, notamment la complétion intelligente de code, la coloration syntaxique, le débogueur, les outils de tests unitaires, l'intégration du contrôle de version, la refactorisation du code, etc. Ces fonctionnalités permettent aux développeurs de localiser rapidement les problèmes de code, d'améliorer la qualité du code et d'accélérer les cycles de développement.

Webman : le compagnon idéal du développeur Webman : le compagnon idéal du développeur Aug 13, 2023 pm 02:25 PM

Webman : le partenaire idéal du développeur Avec le développement d'Internet, le développement Web est devenu un domaine très important. Dans ce domaine, les développeurs doivent maîtriser une variété de technologies et d'outils pour créer des applications Web efficaces et fiables. En tant que partenaire idéal du développeur, Webman fournit de nombreuses fonctionnalités et outils utiles qui simplifient considérablement le processus de développement et améliorent l'efficacité. Webman est un framework de développement Web basé sur le langage Python. Il combine de nombreux outils et bibliothèques couramment utilisés pour fournir aux développeurs.

PHP 8.3 : mises à jour importantes que les développeurs doivent connaître PHP 8.3 : mises à jour importantes que les développeurs doivent connaître Nov 27, 2023 am 10:19 AM

PHP est un langage de programmation open source côté serveur et l'un des langages les plus populaires pour le développement d'applications Web. À mesure que la technologie continue de se développer, PHP est constamment mis à jour et amélioré. La dernière version de PHP est la 8.3. Cette version apporte des mises à jour et améliorations importantes. Cet article présentera quelques mises à jour importantes que les développeurs doivent connaître. Améliorations des types et des propriétés PHP 8.3 introduit un certain nombre d'améliorations aux types et aux propriétés, la plus populaire étant l'introduction du nouveau type union dans les déclarations de type. Le type Union permet des paramètres pour les fonctions

Golang : le premier choix des développeurs d'IA Golang : le premier choix des développeurs d'IA Sep 09, 2023 pm 12:10 PM

Golang : le premier choix des développeurs d'IA Résumé : L'intelligence artificielle (IA) devient progressivement un élément indispensable de notre vie quotidienne. Le développement rapide de la technologie de l’IA a conduit de plus en plus de développeurs à explorer comment utiliser l’IA pour résoudre divers problèmes. Dans le développement de l’IA, le choix du bon langage de programmation est particulièrement important. Parmi les nombreux langages de programmation, Golang (également connu sous le nom de Go) est devenu le choix de plus en plus de développeurs d'IA en raison de ses avantages uniques.

Quels avantages et opportunités la capacité multiplateforme du langage Go apporte-t-elle aux développeurs ? Quels avantages et opportunités la capacité multiplateforme du langage Go apporte-t-elle aux développeurs ? Jul 04, 2023 pm 11:45 PM

Quels avantages et opportunités la capacité multiplateforme du langage Go apporte-t-elle aux développeurs ? Avec l'émergence de divers systèmes d'exploitation et plates-formes, les développeurs doivent prendre en compte les capacités multiplateformes lors du choix d'un langage de programmation. En tant que langage de programmation moderne, le langage Go est privilégié par les développeurs pour ses excellentes capacités multiplateformes. Cet article explorera les avantages et les opportunités apportés par les capacités multiplateformes du langage Go. Avantages du développement multiplateforme Les capacités multiplateformes du langage Go signifient que les développeurs peuvent utiliser un ensemble de code pour s'exécuter sur différents systèmes d'exploitation et plates-formes en même temps, ce qui réduit considérablement les coûts de développement et de maintenance.

Compétences essentielles pour les développeurs PHP - apprenez à appeler et à utiliser des interfaces API externes. Compétences essentielles pour les développeurs PHP - apprenez à appeler et à utiliser des interfaces API externes. Sep 05, 2023 pm 06:22 PM

Compétences essentielles pour les développeurs PHP - apprenez à appeler et à utiliser des interfaces API externes Avec le développement d'Internet, de plus en plus d'applications et de sites Web doivent interagir avec des interfaces API externes pour obtenir plus de données et de fonctions. En tant que développeur PHP, apprendre à appeler et à utiliser des interfaces API externes est une compétence essentielle. Cet article présentera quelques connaissances de base et des exemples de code pour aider les développeurs PHP à mieux comprendre et appliquer les interfaces API. Qu'est-ce qu'une interface API ? API(ApplicationPr

See all articles