1. Spracherkennung aktivieren (standardmäßig deaktiviert)
2. Spracherkennung
Bitte beachten Sie, dass WeChat nach der Aktivierung der Spracherkennung jedes Mal, wenn ein Benutzer eine Sprachnachricht an ein offizielles Konto sendet, ein Erkennungsfeld zum XML-Paket der gepushten Sprachnachricht hinzufügt (Hinweis: Aufgrund des Client-Caching können Entwickler es aktivieren oder aus Die Spracherkennungsfunktion wird für neue Follower sofort wirksam und dauert 24 Stunden für bereits verfolgte Benutzer. Entwickler können diesem Konto zum Testen erneut folgen. Das Sprach-XML-Datenpaket nach der Aktivierung der Spracherkennung lautet wie folgt:
<span style="color: #008080;"> 1</span> <?<span style="color: #000000;">php </span><span style="color: #008080;"> 2</span> <span style="color: #008000;">/*</span><span style="color: #008000;">* </span><span style="color: #008080;"> 3</span> <span style="color: #008000;"> * wechat php test </span><span style="color: #008080;"> 4</span> <span style="color: #008000;">*/</span> <span style="color: #008080;"> 5</span> <span style="color: #008080;"> 6</span> <span style="color: #008000;">//</span><span style="color: #008000;">define your token</span> <span style="color: #008080;"> 7</span> <span style="color: #008080;">define</span>("TOKEN", "weixin"<span style="color: #000000;">); </span><span style="color: #008080;"> 8</span> <span style="color: #800080;">$wechatObj</span> = <span style="color: #0000ff;">new</span><span style="color: #000000;"> wechatCallbackapiTest(); </span><span style="color: #008080;"> 9</span> <span style="color: #008000;">//</span><span style="color: #008000;">$wechatObj->valid();//接口验证 <span style="color: #008080;"> 10</span> <span style="color: #800080;">$wechatObj</span>->responseMsg();<span style="color: #008000;">//</span><span style="color: #008000;">调用回复消息方法</span> <span style="color: #008080;"> 11</span> <span style="color: #0000ff;">class</span><span style="color: #000000;"> wechatCallbackapiTest </span><span style="color: #008080;"> 12</span> <span style="color: #000000;">{ </span><span style="color: #008080;"> 13</span> <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">function</span><span style="color: #000000;"> valid() </span><span style="color: #008080;"> 14</span> <span style="color: #000000;"> { </span><span style="color: #008080;"> 15</span> <span style="color: #800080;">$echoStr</span> = <span style="color: #800080;">$_GET</span>["echostr"<span style="color: #000000;">]; </span><span style="color: #008080;"> 16</span> <span style="color: #008080;"> 17</span> <span style="color: #008000;">//</span><span style="color: #008000;">valid signature , option</span> <span style="color: #008080;"> 18</span> <span style="color: #0000ff;">if</span>(<span style="color: #800080;">$this</span>-><span style="color: #000000;">checkSignature()){ </span><span style="color: #008080;"> 19</span> <span style="color: #0000ff;">echo</span> <span style="color: #800080;">$echoStr</span><span style="color: #000000;">; </span><span style="color: #008080;"> 20</span> <span style="color: #0000ff;">exit</span><span style="color: #000000;">; </span><span style="color: #008080;"> 21</span> <span style="color: #000000;"> } </span><span style="color: #008080;"> 22</span> <span style="color: #000000;"> } </span><span style="color: #008080;"> 23</span> <span style="color: #008080;"> 24</span> <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">function</span><span style="color: #000000;"> responseMsg() </span><span style="color: #008080;"> 25</span> <span style="color: #000000;"> { </span><span style="color: #008080;"> 26</span> <span style="color: #008000;">//</span><span style="color: #008000;">get post data, May be due to the different environments</span> <span style="color: #008080;"> 27</span> <span style="color: #800080;">$postStr</span> = <span style="color: #800080;">$GLOBALS</span>["HTTP_RAW_POST_DATA"<span style="color: #000000;">]; </span><span style="color: #008080;"> 28</span> <span style="color: #008080;"> 29</span> <span style="color: #008000;">//</span><span style="color: #008000;">extract post data</span> <span style="color: #008080;"> 30</span> <span style="color: #0000ff;">if</span> (!<span style="color: #0000ff;">empty</span>(<span style="color: #800080;">$postStr</span><span style="color: #000000;">)){ </span><span style="color: #008080;"> 31</span> <span style="color: #008000;">/*</span><span style="color: #008000;"> libxml_disable_entity_loader is to prevent XML eXternal Entity Injection, </span><span style="color: #008080;"> 32</span> <span style="color: #008000;"> the best way is to check the validity of xml by yourself </span><span style="color: #008000;">*/</span> <span style="color: #008080;"> 33</span> libxml_disable_entity_loader(<span style="color: #0000ff;">true</span><span style="color: #000000;">); </span><span style="color: #008080;"> 34</span> <span style="color: #800080;">$postObj</span> = <span style="color: #008080;">simplexml_load_string</span>(<span style="color: #800080;">$postStr</span>, 'SimpleXMLElement',<span style="color: #000000;"> LIBXML_NOCDATA); </span><span style="color: #008080;"> 35</span> <span style="color: #800080;">$fromUsername</span> = <span style="color: #800080;">$postObj</span>-><span style="color: #000000;">FromUserName; </span><span style="color: #008080;"> 36</span> <span style="color: #800080;">$toUsername</span> = <span style="color: #800080;">$postObj</span>-><span style="color: #000000;">ToUserName; </span><span style="color: #008080;"> 37</span> <span style="color: #800080;">$keyword</span> = <span style="color: #008080;">trim</span>(<span style="color: #800080;">$postObj</span>-><span style="color: #000000;">Content); </span><span style="color: #008080;"> 38</span> <span style="color: #800080;">$time</span> = <span style="color: #008080;">time</span><span style="color: #000000;">(); </span><span style="color: #008080;"> 39</span> <span style="color: #800080;">$msgType</span> = <span style="color: #800080;">$postObj</span>->MsgType;<span style="color: #008000;">//</span><span style="color: #008000;">消息类型</span> <span style="color: #008080;"> 40</span> <span style="color: #800080;">$event</span> = <span style="color: #800080;">$postObj</span>->Event;<span style="color: #008000;">//</span><span style="color: #008000;">时间类型,subscribe(订阅)、unsubscribe(取消订阅)</span> <span style="color: #008080;"> 41</span> <span style="color: #008080;"> 42</span> <span style="color: #800080;">$textTpl</span> = "<span style="color: #000000;"><xml> </span><span style="color: #008080;"> 43</span> <span style="color: #000000;"> <ToUserName><![CDATA[%s]]></ToUserName> </span><span style="color: #008080;"> 44</span> <span style="color: #000000;"> <FromUserName><![CDATA[%s]]></FromUserName> </span><span style="color: #008080;"> 45</span> <span style="color: #000000;"> <CreateTime>%s</CreateTime> </span><span style="color: #008080;"> 46</span> <span style="color: #000000;"> <MsgType><![CDATA[%s]]></MsgType> </span><span style="color: #008080;"> 47</span> <span style="color: #000000;"> <Content><![CDATA[%s]]></Content> </span><span style="color: #008080;"> 48</span> <span style="color: #000000;"> <FuncFlag>0</FuncFlag> </span><span style="color: #008080;"> 49</span> </xml>"<span style="color: #000000;">; </span><span style="color: #008080;"> 50</span> <span style="color: #008080;"> 51</span> <span style="color: #0000ff;">switch</span>(<span style="color: #800080;">$msgType</span><span style="color: #000000;">){ </span><span style="color: #008080;"> 52</span> <span style="color: #0000ff;">case</span> "event": <span style="color: #008080;"> 53</span> <span style="color: #0000ff;">if</span>(<span style="color: #800080;">$event</span>=="subscribe"<span style="color: #000000;">){ </span><span style="color: #008080;"> 54</span> <span style="color: #800080;">$contentStr</span> = "Hi,欢迎关注海仙日用百货!"."\n"."回复数字'1',了解店铺地址."."\n"."回复数字'2',了解商品种类."<span style="color: #000000;">; </span><span style="color: #008080;"> 55</span> <span style="color: #000000;"> } </span><span style="color: #008080;"> 56</span> <span style="color: #0000ff;">break</span><span style="color: #000000;">; </span><span style="color: #008080;"> 57</span> <span style="color: #0000ff;">case</span> "text":<span style="color: #008000;">//</span><span style="color: #008000;">文本消息</span> <span style="color: #008080;"> 58</span> <span style="color: #0000ff;">switch</span>(<span style="color: #800080;">$keyword</span><span style="color: #000000;">){ </span><span style="color: #008080;"> 59</span> <span style="color: #0000ff;">case</span> "1": <span style="color: #008080;"> 60</span> <span style="color: #800080;">$contentStr</span> = "店铺地址:"."\n"."杭州市江干区."<span style="color: #000000;">; </span><span style="color: #008080;"> 61</span> <span style="color: #0000ff;">break</span><span style="color: #000000;">; </span><span style="color: #008080;"> 62</span> <span style="color: #0000ff;">case</span> "2": <span style="color: #008080;"> 63</span> <span style="color: #800080;">$contentStr</span> = "商品种类:"."\n"."杯子、碗、棉签、水桶、垃圾桶、洗碗巾(刷)、拖把、扫把、" <span style="color: #008080;"> 64</span> ."衣架、粘钩、牙签、垃圾袋、保鲜袋(膜)、剪刀、水果刀、饭盒等."<span style="color: #000000;">; </span><span style="color: #008080;"> 65</span> <span style="color: #0000ff;">break</span><span style="color: #000000;">; </span><span style="color: #008080;"> 66</span> <span style="color: #0000ff;">default</span>: <span style="color: #008080;"> 67</span> <span style="color: #800080;">$contentStr</span> = "对不起,你的内容我会稍后回复"<span style="color: #000000;">; </span><span style="color: #008080;"> 68</span> <span style="color: #000000;"> } </span><span style="color: #008080;"> 69</span> <span style="color: #0000ff;">break</span><span style="color: #000000;">; </span><span style="color: #008080;"> 70</span> <span style="color: #0000ff;">case</span> "voice":<span style="color: #008000;">//</span><span style="color: #008000;">语音消息 </span><span style="color: #008080;"> 71</span> <span style="color: #008000;"> //语音识别</span> <span style="color: #008080;"> 72</span> <span style="color: #800080;">$recognition</span> = <span style="color: #800080;">$postObj</span>-><span style="color: #000000;">Recognition; </span><span style="color: #008080;"> 73</span> <span style="color: #800080;">$format</span> = <span style="color: #800080;">$postObj</span>-><span style="color: #000000;">Format; </span><span style="color: #008080;"> 74</span> <span style="color: #800080;">$contentStr</span> = "你发送的是语音消息"."\n"."语音格式为:"."\n".<span style="color: #800080;">$format</span>."\n"."语音内容为:"."\n".<span style="color: #800080;">$recognition</span><span style="color: #000000;">; </span><span style="color: #008080;"> 75</span> <span style="color: #0000ff;">break</span><span style="color: #000000;">; </span><span style="color: #008080;"> 76</span> <span style="color: #000000;"> } </span><span style="color: #008080;"> 77</span> <span style="color: #800080;">$msgType</span> = "text"<span style="color: #000000;">; </span><span style="color: #008080;"> 78</span> <span style="color: #800080;">$resultStr</span> = <span style="color: #008080;">sprintf</span>(<span style="color: #800080;">$textTpl</span>, <span style="color: #800080;">$fromUsername</span>, <span style="color: #800080;">$toUsername</span>, <span style="color: #800080;">$time</span>, <span style="color: #800080;">$msgType</span>, <span style="color: #800080;">$contentStr</span><span style="color: #000000;">); </span><span style="color: #008080;"> 79</span> <span style="color: #0000ff;">echo</span> <span style="color: #800080;">$resultStr</span><span style="color: #000000;">; </span><span style="color: #008080;"> 80</span> }<span style="color: #0000ff;">else</span><span style="color: #000000;"> { </span><span style="color: #008080;"> 81</span> <span style="color: #0000ff;">echo</span> ""<span style="color: #000000;">; </span><span style="color: #008080;"> 82</span> <span style="color: #0000ff;">exit</span><span style="color: #000000;">; </span><span style="color: #008080;"> 83</span> <span style="color: #000000;"> } </span><span style="color: #008080;"> 84</span> <span style="color: #000000;"> } </span><span style="color: #008080;"> 85</span> <span style="color: #008080;"> 86</span> <span style="color: #0000ff;">private</span> <span style="color: #0000ff;">function</span><span style="color: #000000;"> checkSignature() </span><span style="color: #008080;"> 87</span> <span style="color: #000000;"> { </span><span style="color: #008080;"> 88</span> <span style="color: #008000;">//</span><span style="color: #008000;"> you must define TOKEN by yourself</span> <span style="color: #008080;"> 89</span> <span style="color: #0000ff;">if</span> (!<span style="color: #008080;">defined</span>("TOKEN"<span style="color: #000000;">)) { </span><span style="color: #008080;"> 90</span> <span style="color: #0000ff;">throw</span> <span style="color: #0000ff;">new</span> <span style="color: #0000ff;">Exception</span>('TOKEN is not defined!'<span style="color: #000000;">); </span><span style="color: #008080;"> 91</span> <span style="color: #000000;"> } </span><span style="color: #008080;"> 92</span> <span style="color: #008080;"> 93</span> <span style="color: #800080;">$signature</span> = <span style="color: #800080;">$_GET</span>["signature"<span style="color: #000000;">]; </span><span style="color: #008080;"> 94</span> <span style="color: #800080;">$timestamp</span> = <span style="color: #800080;">$_GET</span>["timestamp"<span style="color: #000000;">]; </span><span style="color: #008080;"> 95</span> <span style="color: #800080;">$nonce</span> = <span style="color: #800080;">$_GET</span>["nonce"<span style="color: #000000;">]; </span><span style="color: #008080;"> 96</span> <span style="color: #008080;"> 97</span> <span style="color: #800080;">$token</span> =<span style="color: #000000;"> TOKEN; </span><span style="color: #008080;"> 98</span> <span style="color: #800080;">$tmpArr</span> = <span style="color: #0000ff;">array</span>(<span style="color: #800080;">$token</span>, <span style="color: #800080;">$timestamp</span>, <span style="color: #800080;">$nonce</span><span style="color: #000000;">); </span><span style="color: #008080;"> 99</span> <span style="color: #008000;">//</span><span style="color: #008000;"> use SORT_STRING rule</span> <span style="color: #008080;">100</span> <span style="color: #008080;">sort</span>(<span style="color: #800080;">$tmpArr</span>,<span style="color: #000000;"> SORT_STRING); </span><span style="color: #008080;">101</span> <span style="color: #800080;">$tmpStr</span> = <span style="color: #008080;">implode</span>( <span style="color: #800080;">$tmpArr</span><span style="color: #000000;"> ); </span><span style="color: #008080;">102</span> <span style="color: #800080;">$tmpStr</span> = <span style="color: #008080;">sha1</span>( <span style="color: #800080;">$tmpStr</span><span style="color: #000000;"> ); </span><span style="color: #008080;">103</span> <span style="color: #008080;">104</span> <span style="color: #0000ff;">if</span>( <span style="color: #800080;">$tmpStr</span> == <span style="color: #800080;">$signature</span><span style="color: #000000;"> ){ </span><span style="color: #008080;">105</span> <span style="color: #0000ff;">return</span> <span style="color: #0000ff;">true</span><span style="color: #000000;">; </span><span style="color: #008080;">106</span> }<span style="color: #0000ff;">else</span><span style="color: #000000;">{ </span><span style="color: #008080;">107</span> <span style="color: #0000ff;">return</span> <span style="color: #0000ff;">false</span><span style="color: #000000;">; </span><span style="color: #008080;">108</span> <span style="color: #000000;"> } </span><span style="color: #008080;">109</span> <span style="color: #000000;"> } </span><span style="color: #008080;">110</span> <span style="color: #000000;">} </span><span style="color: #008080;">111</span> <span style="color: #008080;">112</span> <span style="color: #008080;">113</span> ?>