Rumah > php教程 > php手册 > 微信公众号开发之语音消息识别

微信公众号开发之语音消息识别

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Lepaskan: 2016-08-08 08:49:46
asal
972 orang telah melayarinya

1.开通语音识别(默认关闭)

2.语音识别

请注意,开通语音识别后,用户每次发送语音给公众号时,微信会在推送的语音消息XML数据包中,增加一个Recognition字段(注:由于客户端缓存,开发者开启或者关闭语音识别功能,对新关注者立刻生效,对已关注用户需要24小时生效。开发者可以重新关注此帐号进行测试)。开启语音识别后的语音XML数据包如下:

 

<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>
<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>
</xml></span><span style="color: #008080;"> 43</span> <span style="color: #000000;">                            <tousername></tousername>
</span><span style="color: #008080;"> 44</span> <span style="color: #000000;">                            <fromusername></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></msgtype>
</span><span style="color: #008080;"> 47</span> <span style="color: #000000;">                            <content></content>
</span><span style="color: #008080;"> 48</span> <span style="color: #000000;">                            <funcflag>0</funcflag>
</span><span style="color: #008080;"> 49</span>                             "<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> ?>
Salin selepas log masuk
语音识别

 

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
Cadangan popular
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan