Inhaltsverzeichnis
微信订阅号开发之token验证后,自动回复消息功能做好,发送消息没有返回,token自动回复
Heim Backend-Entwicklung PHP-Tutorial 微信订阅号开发之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> ?>
Nach dem Login kopieren

 

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/1082307.htmlTechArticle微信订阅号开发之token验证后,自动回复消息功能做好,发送消息没有返回,token自动回复 相信很多人会跟我一样,token验证之后,发送消息...
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Upgrade des Tmall Elf Cloud-Zugriffsdienstes: kostenlose Entwicklergebühren Upgrade des Tmall Elf Cloud-Zugriffsdienstes: kostenlose Entwicklergebühren Jan 09, 2024 pm 10:06 PM

Laut Nachrichten dieser Website vom 9. Januar hat Tmall Elf kürzlich die Aktualisierung des Yunyun-Zugangsdienstes angekündigt. Der aktualisierte Yunyun-Zugangsdienst wird ab dem 1. Januar vom kostenlosen Modus in den kostenpflichtigen Modus wechseln. Diese Website verfügt über neue Funktionen und Optimierungen: Optimierung des Cloud-Protokolls zur Verbesserung der Stabilität von Geräteverbindungen; Optimierung der Sprachsteuerung für wichtige Kontoautorisierungs-Upgrades: Hinzufügen der Anzeigefunktion von Entwickler-Drittanbieter-Apps in Tmall Genie, um Benutzern zu helfen, schneller zu aktualisieren Es ist praktisch für die Kontobindung. Gleichzeitig wurde die Drittanbieter-App-Kontoautorisierung hinzugefügt, um zusätzlich zur Sprachinteraktion die Ein-Klick-Bindung von Tmall Elf-Konten zu unterstützen Benutzer können Geräte steuern und Informationen über die App und den Gerätestatus erhalten; neue intelligente Szenenverknüpfungsfunktionen, neue Produktattribute und Ereignisse, die als Status oder Ereignisse gemeldet werden können, um Tmall zu definieren

Um Kindheitserinnerungen zu bewahren, entschied sich der Entwickler für die Verwendung einer alten Programmierung: ein hochauflösendes Remake eines Spiels in Flash Um Kindheitserinnerungen zu bewahren, entschied sich der Entwickler für die Verwendung einer alten Programmierung: ein hochauflösendes Remake eines Spiels in Flash Apr 11, 2023 pm 10:16 PM

Vor mehr als zwei Jahren kündigte Adobe mit der aufsehenerregenden Ankündigung an, den Support für Flash zum 31. Dezember 2020 einzustellen und kündigte damit das Ende einer Ära an. Zwei Jahre später hat Adobe bereits alle Archive früher Versionen des Flash Players von seiner offiziellen Website entfernt und die Ausführung von Flash-basierten Inhalten blockiert. Microsoft hat außerdem die Unterstützung für Adobe Flash Player eingestellt und die Ausführung in allen Microsoft-Browsern verboten. Die Adobe Flash Player-Komponente wurde im Juli 2021 über Windows Update endgültig entfernt. Wenn Flash

Welches Tool ist PyCharm? Für welche Entwickler ist es geeignet? Welches Tool ist PyCharm? Für welche Entwickler ist es geeignet? Feb 20, 2024 am 08:29 AM

PyCharm ist eine von JetBrains entwickelte integrierte Python-Entwicklungsumgebung (IDE). Es bietet Python-Entwicklern umfangreiche Funktionen und Tools, die ihnen helfen, Python-Code effizienter zu schreiben, zu debuggen und bereitzustellen. PyCharm verfügt über viele leistungsstarke Funktionen, darunter intelligente Code-Vervollständigung, Syntaxhervorhebung, Debugger, Unit-Test-Tools, Integration der Versionskontrolle, Code-Refactoring usw. Diese Funktionen ermöglichen es Entwicklern, Codeprobleme schnell zu lokalisieren, die Codequalität zu verbessern und Entwicklungszyklen zu beschleunigen.

Webman: Der perfekte Begleiter eines Entwicklers Webman: Der perfekte Begleiter eines Entwicklers Aug 13, 2023 pm 02:25 PM

Webman: Der perfekte Partner für Entwickler Mit der Entwicklung des Internets ist die Webentwicklung zu einem sehr wichtigen Bereich geworden. In diesem Bereich müssen Entwickler eine Vielzahl von Technologien und Tools beherrschen, um effiziente und zuverlässige Webanwendungen zu erstellen. Als perfekter Partner eines Entwicklers bietet Webman viele nützliche Funktionen und Tools, die den Entwicklungsprozess erheblich vereinfachen und die Effizienz verbessern. Webman ist ein Webentwicklungs-Framework, das auf der Python-Sprache basiert. Es kombiniert viele häufig verwendete Tools und Bibliotheken, die Entwicklern zur Verfügung stehen

PHP 8.3: Wichtige Updates, die Entwickler kennen müssen PHP 8.3: Wichtige Updates, die Entwickler kennen müssen Nov 27, 2023 am 10:19 AM

PHP ist eine serverseitige Open-Source-Programmiersprache und eine der beliebtesten Sprachen für die Entwicklung von Webanwendungen. Da sich die Technologie weiterentwickelt, wird PHP ständig aktualisiert und verbessert. Die neueste PHP-Version ist 8.3. Diese Version bringt einige wichtige Updates und Verbesserungen. In diesem Artikel werden einige wichtige Updates vorgestellt, die Entwickler kennen müssen. Verbesserungen bei Typen und Eigenschaften PHP 8.3 führt eine Reihe von Verbesserungen an Typen und Eigenschaften ein. Die beliebteste davon ist die Einführung des neuen Union-Typs in Typdeklarationen. Der Union-Typ ermöglicht Parameter für Funktionen

Golang: die erste Wahl für KI-Entwickler Golang: die erste Wahl für KI-Entwickler Sep 09, 2023 pm 12:10 PM

Golang: die erste Wahl für KI-Entwickler Zusammenfassung: Künstliche Intelligenz (KI) wird nach und nach zu einem unverzichtbaren Bestandteil unseres täglichen Lebens. Die rasante Entwicklung der KI-Technologie hat dazu geführt, dass immer mehr Entwickler erforschen, wie KI zur Lösung verschiedener Probleme eingesetzt werden kann. Bei der KI-Entwicklung ist die Wahl der richtigen Programmiersprache besonders wichtig. Unter vielen Programmiersprachen ist Golang (auch bekannt als Go) aufgrund seiner einzigartigen Vorteile für immer mehr KI-Entwickler die erste Wahl.

Welche Vorteile und Möglichkeiten bietet die plattformübergreifende Fähigkeit der Go-Sprache für Entwickler? Welche Vorteile und Möglichkeiten bietet die plattformübergreifende Fähigkeit der Go-Sprache für Entwickler? Jul 04, 2023 pm 11:45 PM

Welche Vorteile und Möglichkeiten bietet die plattformübergreifende Fähigkeit der Go-Sprache für Entwickler? Mit dem Aufkommen verschiedener Betriebssysteme und Plattformen müssen Entwickler bei der Auswahl einer Programmiersprache die plattformübergreifenden Fähigkeiten berücksichtigen. Als moderne Programmiersprache wird die Go-Sprache von Entwicklern wegen ihrer hervorragenden plattformübergreifenden Fähigkeiten bevorzugt. In diesem Artikel werden die Vorteile und Möglichkeiten untersucht, die sich aus den plattformübergreifenden Funktionen der Go-Sprache ergeben. Vorteile der plattformübergreifenden Entwicklung Die plattformübergreifenden Fähigkeiten der Go-Sprache bedeuten, dass Entwickler einen Codesatz verwenden können, um ihn gleichzeitig auf verschiedenen Betriebssystemen und Plattformen auszuführen, was die Entwicklungs- und Wartungskosten erheblich senkt.

Grundlegende Fähigkeiten für PHP-Entwickler – lernen Sie, wie Sie externe API-Schnittstellen aufrufen und verwenden. Grundlegende Fähigkeiten für PHP-Entwickler – lernen Sie, wie Sie externe API-Schnittstellen aufrufen und verwenden. Sep 05, 2023 pm 06:22 PM

Grundlegende Fähigkeiten für PHP-Entwickler – lernen Sie, wie man externe API-Schnittstellen aufruft und verwendet. Mit der Entwicklung des Internets müssen immer mehr Anwendungen und Websites mit externen API-Schnittstellen interagieren, um mehr Daten und Funktionen zu erhalten. Als PHP-Entwickler ist das Erlernen des Aufrufs und der Verwendung externer API-Schnittstellen eine wesentliche Fähigkeit. In diesem Artikel werden einige Grundkenntnisse und Codebeispiele vorgestellt, um PHP-Entwicklern zu helfen, API-Schnittstellen besser zu verstehen und anzuwenden. Was ist eine API-Schnittstelle? API(ApplicationPr

See all articles