Jadual Kandungan
微信订阅号开发之token验证后,自动回复消息功能做好,发送消息没有返回,token自动回复
Rumah pembangunan bahagian belakang tutorial php 微信订阅号开发之token验证后,自动回复消息功能做好,发送消息没有返回,token自动回复_PHP教程

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

Jul 12, 2016 am 09:03 AM
pemaju

微信订阅号开发之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> ?>
Salin selepas log masuk

 

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/1082307.htmlTechArticle微信订阅号开发之token验证后,自动回复消息功能做好,发送消息没有返回,token自动回复 相信很多人会跟我一样,token验证之后,发送消息...
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Naik taraf perkhidmatan akses Tmall Elf Cloud: caj pembangun percuma Naik taraf perkhidmatan akses Tmall Elf Cloud: caj pembangun percuma Jan 09, 2024 pm 10:06 PM

Menurut berita dari laman web ini pada 9 Januari, Tmall Elf baru-baru ini mengumumkan peningkatan perkhidmatan akses Yunyun Perkhidmatan akses Yunyun yang dinaik taraf akan bertukar daripada mod percuma kepada mod berbayar mulai 1 Januari. Tapak ini dilengkapi dengan ciri dan pengoptimuman baharu: mengoptimumkan protokol awan untuk meningkatkan kestabilan sambungan peranti; Ia mudah untuk mengikat akaun Pada masa yang sama, keizinan akaun Aplikasi pihak ketiga untuk pembangun telah ditambahkan untuk menyokong pengikatan satu klik akaun Tmall Elf telah ditambahkan sebagai tambahan kepada interaksi suara , pengguna boleh mengawal peranti dan mendapatkan maklumat melalui apl dan pembesar suara skrin, keupayaan pautan adegan pintar baharu, atribut dan peristiwa produk baharu, yang boleh dilaporkan sebagai status atau peristiwa untuk menentukan Tmall.

Apakah alat PyCharm? Pemaju mana yang sesuai untuknya? Apakah alat PyCharm? Pemaju mana yang sesuai untuknya? Feb 20, 2024 am 08:29 AM

PyCharm ialah persekitaran pembangunan bersepadu (IDE) Python yang dibangunkan oleh JetBrains. Ia menyediakan pembangun Python dengan ciri dan alatan yang kaya untuk membantu mereka menulis, nyahpepijat dan menggunakan kod Python dengan lebih cekap. PyCharm mempunyai banyak ciri berkuasa, termasuk pelengkapan kod pintar, penonjolan sintaks, penyahpepijat, alat ujian unit, penyepaduan kawalan versi, pemfaktoran semula kod, dsb. Ciri-ciri ini membolehkan pembangun mencari isu kod dengan cepat, meningkatkan kualiti kod dan mempercepatkan kitaran pembangunan.

Untuk menyelamatkan kenangan zaman kanak-kanak, pembangun memutuskan untuk menggunakan pengaturcaraan kuno: pembuatan semula definisi tinggi permainan dalam Flash Untuk menyelamatkan kenangan zaman kanak-kanak, pembangun memutuskan untuk menggunakan pengaturcaraan kuno: pembuatan semula definisi tinggi permainan dalam Flash Apr 11, 2023 pm 10:16 PM

Lebih daripada dua tahun lalu, Adobe membuat pengumuman yang menarik perhatian bahawa ia akan menamatkan sokongan untuk Flash pada 31 Disember 2020, mengumumkan penghujung era. Maju pantas dua tahun, dan Adobe telah memadamkan semua arkib versi awal Flash Player daripada tapak web rasminya dan menyekat kandungan berasaskan Flash daripada berjalan. Microsoft juga telah menamatkan sokongan untuk Adobe Flash Player dan melarangnya daripada berjalan pada mana-mana pelayar Microsoft. Komponen Adobe Flash Player telah dialih keluar secara kekal melalui Kemas Kini Windows pada Julai 2021. Apabila Flash

Webman: Rakan sempurna pembangun Webman: Rakan sempurna pembangun Aug 13, 2023 pm 02:25 PM

Webman: Rakan kongsi sempurna pembangun Dengan pembangunan Internet, pembangunan Web telah menjadi bidang yang sangat penting. Dalam bidang ini, pembangun perlu menguasai pelbagai teknologi dan alatan untuk membina aplikasi web yang cekap dan boleh dipercayai. Sebagai rakan kongsi sempurna pembangun, Webman menyediakan banyak ciri dan alatan berguna yang sangat memudahkan proses pembangunan dan meningkatkan kecekapan. Webman ialah rangka kerja pembangunan Web berdasarkan bahasa Python Ia menggabungkan banyak alat dan perpustakaan yang biasa digunakan untuk menyediakan pembangun

PHP 8.3: Kemas kini penting yang mesti diketahui oleh pembangun PHP 8.3: Kemas kini penting yang mesti diketahui oleh pembangun Nov 27, 2023 am 10:19 AM

PHP ialah bahasa pengaturcaraan bahagian pelayan sumber terbuka dan salah satu bahasa yang paling popular untuk pembangunan aplikasi web. Apabila teknologi terus berkembang, PHP sentiasa dikemas kini dan dipertingkatkan. Versi PHP terkini ialah 8.3 Versi ini membawakan beberapa kemas kini dan penambahbaikan penting Artikel ini akan memperkenalkan beberapa kemas kini penting yang mesti diketahui oleh pembangun. Penambahbaikan jenis dan hartanah PHP 8.3 memperkenalkan beberapa penambahbaikan pada jenis dan sifat, yang paling popular ialah pengenalan jenis kesatuan baharu dalam pengisytiharan jenis. Jenis Kesatuan membenarkan parameter untuk fungsi

Golang: pilihan pertama untuk pembangun AI Golang: pilihan pertama untuk pembangun AI Sep 09, 2023 pm 12:10 PM

Golang: pilihan pertama untuk pembangun AI Ringkasan: Kecerdasan Buatan (AI) secara beransur-ansur menjadi bahagian yang sangat diperlukan dalam kehidupan seharian kita. Perkembangan pesat teknologi AI telah menyebabkan semakin ramai pembangun meneroka cara menggunakan AI untuk menyelesaikan pelbagai masalah. Dalam pembangunan AI, memilih bahasa pengaturcaraan yang betul adalah sangat penting. Di antara banyak bahasa pengaturcaraan, Golang (juga dikenali sebagai Go) telah menjadi pilihan lebih ramai pembangun AI kerana kelebihannya yang unik.

Apakah faedah dan peluang yang dibawa oleh keupayaan merentas platform bahasa Go kepada pembangun? Apakah faedah dan peluang yang dibawa oleh keupayaan merentas platform bahasa Go kepada pembangun? Jul 04, 2023 pm 11:45 PM

Apakah faedah dan peluang yang dibawa oleh keupayaan merentas platform bahasa Go kepada pembangun Dengan kemunculan pelbagai sistem pengendalian dan platform, pembangun perlu mempertimbangkan keupayaan merentas platform apabila memilih bahasa pengaturcaraan. Sebagai bahasa pengaturcaraan moden, bahasa Go digemari oleh pembangun kerana keupayaan merentas platformnya yang sangat baik. Artikel ini akan meneroka manfaat dan peluang yang dibawa oleh keupayaan merentas platform bahasa Go. Faedah pembangunan merentas platform Keupayaan merentas platform bahasa Go bermakna pembangun boleh menggunakan set kod untuk dijalankan pada sistem pengendalian dan platform yang berbeza pada masa yang sama, yang sangat mengurangkan kos pembangunan dan penyelenggaraan.

Atasi kesukaran pilihan: lima alat visualisasi Kafka yang mempesonakan untuk membantu pembangun membebaskan Atasi kesukaran pilihan: lima alat visualisasi Kafka yang mempesonakan untuk membantu pembangun membebaskan Jan 05, 2024 pm 07:43 PM

Bebaskan pembangun daripada kesukaran memilih: Lima alat visualisasi kafka yang akan mempesonakan anda Pengenalan: Kafka ialah platform data penstriman teragih berprestasi tinggi yang digunakan secara meluas untuk membina saluran paip data masa nyata dan aplikasi pemprosesan strim. Sebagai pembangun, mengendalikan baris gilir mesej dalam Kafka adalah tugas kritikal. Walau bagaimanapun, mengendalikan Kafka secara terus melalui baris arahan atau API mungkin menyusahkan pembangun Oleh itu, untuk memudahkan pembangun mengurus dan memantau Kafka, pelbagai alat visualisasi telah muncul. Artikel ini akan memperkenalkan lima yang menarik

See all articles