Home  >  Article  >  php教程  >  Text message automatic reply for WeChat public account development

Text message automatic reply for WeChat public account development

WBOY
WBOYOriginal
2016-08-08 08:49:47821browse

1.PHP sample code download

Download address 1: http://pan.baidu.com/s/1nvlhbnV,

Download address 2: https://mp.weixin.qq.com/wiki/home/index.html (Start development - "Access Guide -" PHP sample code download)

2.wx_sample.php initial code

<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: #800080;">$wechatObj</span>-><span style="color: #000000;">valid();
</span><span style="color: #008080;">10</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;">$textTpl</span> = "<span style="color: #000000;"><xml>
</span><span style="color: #008080;">40</span> <span style="color: #000000;">                            <ToUserName><![CDATA[%s]]></ToUserName>
</span><span style="color: #008080;">41</span> <span style="color: #000000;">                            <FromUserName><![CDATA[%s]]></FromUserName>
</span><span style="color: #008080;">42</span> <span style="color: #000000;">                            <CreateTime>%s</CreateTime>
</span><span style="color: #008080;">43</span> <span style="color: #000000;">                            <MsgType><![CDATA[%s]]></MsgType>
</span><span style="color: #008080;">44</span> <span style="color: #000000;">                            <Content><![CDATA[%s]]></Content>
</span><span style="color: #008080;">45</span> <span style="color: #000000;">                            <FuncFlag>0</FuncFlag>
</span><span style="color: #008080;">46</span>                             </xml>"<span style="color: #000000;">;             
</span><span style="color: #008080;">47</span>                 <span style="color: #0000ff;">if</span>(!<span style="color: #0000ff;">empty</span>( <span style="color: #800080;">$keyword</span><span style="color: #000000;"> ))
</span><span style="color: #008080;">48</span> <span style="color: #000000;">                {
</span><span style="color: #008080;">49</span>                       <span style="color: #800080;">$msgType</span> = "text"<span style="color: #000000;">;
</span><span style="color: #008080;">50</span>                     <span style="color: #800080;">$contentStr</span> = "Welcome to wechat world!"<span style="color: #000000;">;
</span><span style="color: #008080;">51</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;">52</span>                     <span style="color: #0000ff;">echo</span> <span style="color: #800080;">$resultStr</span><span style="color: #000000;">;
</span><span style="color: #008080;">53</span>                 }<span style="color: #0000ff;">else</span><span style="color: #000000;">{
</span><span style="color: #008080;">54</span>                     <span style="color: #0000ff;">echo</span> "Input something..."<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: #008080;">57</span>         }<span style="color: #0000ff;">else</span><span style="color: #000000;"> {
</span><span style="color: #008080;">58</span>             <span style="color: #0000ff;">echo</span> ""<span style="color: #000000;">;
</span><span style="color: #008080;">59</span>             <span style="color: #0000ff;">exit</span><span style="color: #000000;">;
</span><span style="color: #008080;">60</span> <span style="color: #000000;">        }
</span><span style="color: #008080;">61</span> <span style="color: #000000;">    }
</span><span style="color: #008080;">62</span>         
<span style="color: #008080;">63</span>     <span style="color: #0000ff;">private</span> <span style="color: #0000ff;">function</span><span style="color: #000000;"> checkSignature()
</span><span style="color: #008080;">64</span> <span style="color: #000000;">    {
</span><span style="color: #008080;">65</span>         <span style="color: #008000;">//</span><span style="color: #008000;"> you must define TOKEN by yourself</span>
<span style="color: #008080;">66</span>         <span style="color: #0000ff;">if</span> (!<span style="color: #008080;">defined</span>("TOKEN"<span style="color: #000000;">)) {
</span><span style="color: #008080;">67</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;">68</span> <span style="color: #000000;">        }
</span><span style="color: #008080;">69</span>         
<span style="color: #008080;">70</span>         <span style="color: #800080;">$signature</span> = <span style="color: #800080;">$_GET</span>["signature"<span style="color: #000000;">];
</span><span style="color: #008080;">71</span>         <span style="color: #800080;">$timestamp</span> = <span style="color: #800080;">$_GET</span>["timestamp"<span style="color: #000000;">];
</span><span style="color: #008080;">72</span>         <span style="color: #800080;">$nonce</span> = <span style="color: #800080;">$_GET</span>["nonce"<span style="color: #000000;">];
</span><span style="color: #008080;">73</span>                 
<span style="color: #008080;">74</span>         <span style="color: #800080;">$token</span> =<span style="color: #000000;"> TOKEN;
</span><span style="color: #008080;">75</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;">76</span>         <span style="color: #008000;">//</span><span style="color: #008000;"> use SORT_STRING rule</span>
<span style="color: #008080;">77</span>         <span style="color: #008080;">sort</span>(<span style="color: #800080;">$tmpArr</span>,<span style="color: #000000;"> SORT_STRING);
</span><span style="color: #008080;">78</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;">79</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;">80</span>         
<span style="color: #008080;">81</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;">82</span>             <span style="color: #0000ff;">return</span> <span style="color: #0000ff;">true</span><span style="color: #000000;">;
</span><span style="color: #008080;">83</span>         }<span style="color: #0000ff;">else</span><span style="color: #000000;">{
</span><span style="color: #008080;">84</span>             <span style="color: #0000ff;">return</span> <span style="color: #0000ff;">false</span><span style="color: #000000;">;
</span><span style="color: #008080;">85</span> <span style="color: #000000;">        }
</span><span style="color: #008080;">86</span> <span style="color: #000000;">    }
</span><span style="color: #008080;">87</span> <span style="color: #000000;">}
</span><span style="color: #008080;">88</span> 
<span style="color: #008080;">89</span> ?>
wx_sample.php

3. Call the reply message method

Comment out $wechatObj->valid(); in the wx_sample.php file and add "$wechatObj->responseMsg();" under it.

<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;">$textTpl</span> = "<span style="color: #000000;"><xml>
</span><span style="color: #008080;">40</span> <span style="color: #000000;">                            <ToUserName><![CDATA[%s]]></ToUserName>
</span><span style="color: #008080;">41</span> <span style="color: #000000;">                            <FromUserName><![CDATA[%s]]></FromUserName>
</span><span style="color: #008080;">42</span> <span style="color: #000000;">                            <CreateTime>%s</CreateTime>
</span><span style="color: #008080;">43</span> <span style="color: #000000;">                            <MsgType><![CDATA[%s]]></MsgType>
</span><span style="color: #008080;">44</span> <span style="color: #000000;">                            <Content><![CDATA[%s]]></Content>
</span><span style="color: #008080;">45</span> <span style="color: #000000;">                            <FuncFlag>0</FuncFlag>
</span><span style="color: #008080;">46</span>                             </xml>"<span style="color: #000000;">;             
</span><span style="color: #008080;">47</span>                 <span style="color: #0000ff;">if</span>(!<span style="color: #0000ff;">empty</span>( <span style="color: #800080;">$keyword</span><span style="color: #000000;"> ))
</span><span style="color: #008080;">48</span> <span style="color: #000000;">                {
</span><span style="color: #008080;">49</span>                       <span style="color: #800080;">$msgType</span> = "text"<span style="color: #000000;">;
</span><span style="color: #008080;">50</span>                     <span style="color: #800080;">$contentStr</span> = "Welcome to wechat world!"<span style="color: #000000;">;
</span><span style="color: #008080;">51</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;">52</span>                     <span style="color: #0000ff;">echo</span> <span style="color: #800080;">$resultStr</span><span style="color: #000000;">;
</span><span style="color: #008080;">53</span>                 }<span style="color: #0000ff;">else</span><span style="color: #000000;">{
</span><span style="color: #008080;">54</span>                     <span style="color: #0000ff;">echo</span> "Input something..."<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: #008080;">57</span>         }<span style="color: #0000ff;">else</span><span style="color: #000000;"> {
</span><span style="color: #008080;">58</span>             <span style="color: #0000ff;">echo</span> ""<span style="color: #000000;">;
</span><span style="color: #008080;">59</span>             <span style="color: #0000ff;">exit</span><span style="color: #000000;">;
</span><span style="color: #008080;">60</span> <span style="color: #000000;">        }
</span><span style="color: #008080;">61</span> <span style="color: #000000;">    }
</span><span style="color: #008080;">62</span>         
<span style="color: #008080;">63</span>     <span style="color: #0000ff;">private</span> <span style="color: #0000ff;">function</span><span style="color: #000000;"> checkSignature()
</span><span style="color: #008080;">64</span> <span style="color: #000000;">    {
</span><span style="color: #008080;">65</span>         <span style="color: #008000;">//</span><span style="color: #008000;"> you must define TOKEN by yourself</span>
<span style="color: #008080;">66</span>         <span style="color: #0000ff;">if</span> (!<span style="color: #008080;">defined</span>("TOKEN"<span style="color: #000000;">)) {
</span><span style="color: #008080;">67</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;">68</span> <span style="color: #000000;">        }
</span><span style="color: #008080;">69</span>         
<span style="color: #008080;">70</span>         <span style="color: #800080;">$signature</span> = <span style="color: #800080;">$_GET</span>["signature"<span style="color: #000000;">];
</span><span style="color: #008080;">71</span>         <span style="color: #800080;">$timestamp</span> = <span style="color: #800080;">$_GET</span>["timestamp"<span style="color: #000000;">];
</span><span style="color: #008080;">72</span>         <span style="color: #800080;">$nonce</span> = <span style="color: #800080;">$_GET</span>["nonce"<span style="color: #000000;">];
</span><span style="color: #008080;">73</span>                 
<span style="color: #008080;">74</span>         <span style="color: #800080;">$token</span> =<span style="color: #000000;"> TOKEN;
</span><span style="color: #008080;">75</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;">76</span>         <span style="color: #008000;">//</span><span style="color: #008000;"> use SORT_STRING rule</span>
<span style="color: #008080;">77</span>         <span style="color: #008080;">sort</span>(<span style="color: #800080;">$tmpArr</span>,<span style="color: #000000;"> SORT_STRING);
</span><span style="color: #008080;">78</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;">79</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;">80</span>         
<span style="color: #008080;">81</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;">82</span>             <span style="color: #0000ff;">return</span> <span style="color: #0000ff;">true</span><span style="color: #000000;">;
</span><span style="color: #008080;">83</span>         }<span style="color: #0000ff;">else</span><span style="color: #000000;">{
</span><span style="color: #008080;">84</span>             <span style="color: #0000ff;">return</span> <span style="color: #0000ff;">false</span><span style="color: #000000;">;
</span><span style="color: #008080;">85</span> <span style="color: #000000;">        }
</span><span style="color: #008080;">86</span> <span style="color: #000000;">    }
</span><span style="color: #008080;">87</span> <span style="color: #000000;">}
</span><span style="color: #008080;">88</span> 
<span style="color: #008080;">89</span> ?>
Call the reply message method

4. Keyword automatic reply and follow reply

$keyword saves text messages sent by users on WeChat.

Official developer documentation: https://mp.weixin.qq.com/wiki/home/index.html (Message Management -> Receive Messages - Receive Event Push -> 1. Follow/Unfollow Events)

There are two differences between attention events and general text messages. One is that the MsgType value is event, and the other is that the added Event value is subscribe. Since the official document (original wx_sample.php) does not extract this parameter, we need to extract it ourselves. Add two variables $msgType and $event to the program.

<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: #800080;">$textTpl</span> = "<span style="color: #000000;"><xml>
</span><span style="color: #008080;"> 42</span> <span style="color: #000000;">                            <ToUserName><![CDATA[%s]]></ToUserName>
</span><span style="color: #008080;"> 43</span> <span style="color: #000000;">                            <FromUserName><![CDATA[%s]]></FromUserName>
</span><span style="color: #008080;"> 44</span> <span style="color: #000000;">                            <CreateTime>%s</CreateTime>
</span><span style="color: #008080;"> 45</span> <span style="color: #000000;">                            <MsgType><![CDATA[%s]]></MsgType>
</span><span style="color: #008080;"> 46</span> <span style="color: #000000;">                            <Content><![CDATA[%s]]></Content>
</span><span style="color: #008080;"> 47</span> <span style="color: #000000;">                            <FuncFlag>0</FuncFlag>
</span><span style="color: #008080;"> 48</span>                             </xml>"<span style="color: #000000;">; 
</span><span style="color: #008080;"> 49</span>                            
<span style="color: #008080;"> 50</span>                 <span style="color: #0000ff;">switch</span>(<span style="color: #800080;">$msgType</span><span style="color: #000000;">){
</span><span style="color: #008080;"> 51</span>                     <span style="color: #0000ff;">case</span> "event":
<span style="color: #008080;"> 52</span>                     <span style="color: #0000ff;">if</span>(<span style="color: #800080;">$event</span>=="subscribe"<span style="color: #000000;">){
</span><span style="color: #008080;"> 53</span>                         <span style="color: #800080;">$contentStr</span> = "Hi,欢迎关注海仙日用百货!"."\n"."回复数字'1',了解店铺地址."."\n"."回复数字'2',了解商品种类."<span style="color: #000000;">;
</span><span style="color: #008080;"> 54</span> <span style="color: #000000;">                    } 
</span><span style="color: #008080;"> 55</span>                     <span style="color: #0000ff;">break</span><span style="color: #000000;">;
</span><span style="color: #008080;"> 56</span>                     <span style="color: #0000ff;">case</span> "text":
<span style="color: #008080;"> 57</span>                         <span style="color: #0000ff;">switch</span>(<span style="color: #800080;">$keyword</span><span style="color: #000000;">){
</span><span style="color: #008080;"> 58</span>                             <span style="color: #0000ff;">case</span> "1":
<span style="color: #008080;"> 59</span>                             <span style="color: #800080;">$contentStr</span> = "店铺地址:"."\n"."杭州市江干艮山西路233号新东升市场地下室第一排."<span style="color: #000000;">;    
</span><span style="color: #008080;"> 60</span>                             <span style="color: #0000ff;">break</span><span style="color: #000000;">;
</span><span style="color: #008080;"> 61</span>                             <span style="color: #0000ff;">case</span> "2":
<span style="color: #008080;"> 62</span>                             <span style="color: #800080;">$contentStr</span> = "商品种类:"."\n"."杯子、碗、棉签、水桶、垃圾桶、洗碗巾(刷)、拖把、扫把、"
<span style="color: #008080;"> 63</span>                                          ."衣架、粘钩、牙签、垃圾袋、保鲜袋(膜)、剪刀、水果刀、饭盒等."<span style="color: #000000;">;
</span><span style="color: #008080;"> 64</span>                             <span style="color: #0000ff;">break</span><span style="color: #000000;">;
</span><span style="color: #008080;"> 65</span>                             <span style="color: #0000ff;">default</span>:
<span style="color: #008080;"> 66</span>                             <span style="color: #800080;">$contentStr</span> = "对不起,你的内容我会稍后回复"<span style="color: #000000;">;
</span><span style="color: #008080;"> 67</span> <span style="color: #000000;">                        }
</span><span style="color: #008080;"> 68</span>                     <span style="color: #0000ff;">break</span><span style="color: #000000;">;
</span><span style="color: #008080;"> 69</span> <span style="color: #000000;">                }
</span><span style="color: #008080;"> 70</span>                 <span style="color: #800080;">$msgType</span> = "text"<span style="color: #000000;">;
</span><span style="color: #008080;"> 71</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;"> 72</span>                 <span style="color: #0000ff;">echo</span> <span style="color: #800080;">$resultStr</span><span style="color: #000000;">;
</span><span style="color: #008080;"> 73</span>         }<span style="color: #0000ff;">else</span><span style="color: #000000;"> {
</span><span style="color: #008080;"> 74</span>             <span style="color: #0000ff;">echo</span> ""<span style="color: #000000;">;
</span><span style="color: #008080;"> 75</span>             <span style="color: #0000ff;">exit</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: #000000;">    }
</span><span style="color: #008080;"> 78</span>         
<span style="color: #008080;"> 79</span>     <span style="color: #0000ff;">private</span> <span style="color: #0000ff;">function</span><span style="color: #000000;"> checkSignature()
</span><span style="color: #008080;"> 80</span> <span style="color: #000000;">    {
</span><span style="color: #008080;"> 81</span>         <span style="color: #008000;">//</span><span style="color: #008000;"> you must define TOKEN by yourself</span>
<span style="color: #008080;"> 82</span>         <span style="color: #0000ff;">if</span> (!<span style="color: #008080;">defined</span>("TOKEN"<span style="color: #000000;">)) {
</span><span style="color: #008080;"> 83</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;"> 84</span> <span style="color: #000000;">        }
</span><span style="color: #008080;"> 85</span>         
<span style="color: #008080;"> 86</span>         <span style="color: #800080;">$signature</span> = <span style="color: #800080;">$_GET</span>["signature"<span style="color: #000000;">];
</span><span style="color: #008080;"> 87</span>         <span style="color: #800080;">$timestamp</span> = <span style="color: #800080;">$_GET</span>["timestamp"<span style="color: #000000;">];
</span><span style="color: #008080;"> 88</span>         <span style="color: #800080;">$nonce</span> = <span style="color: #800080;">$_GET</span>["nonce"<span style="color: #000000;">];
</span><span style="color: #008080;"> 89</span>                 
<span style="color: #008080;"> 90</span>         <span style="color: #800080;">$token</span> =<span style="color: #000000;"> TOKEN;
</span><span style="color: #008080;"> 91</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;"> 92</span>         <span style="color: #008000;">//</span><span style="color: #008000;"> use SORT_STRING rule</span>
<span style="color: #008080;"> 93</span>         <span style="color: #008080;">sort</span>(<span style="color: #800080;">$tmpArr</span>,<span style="color: #000000;"> SORT_STRING);
</span><span style="color: #008080;"> 94</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;"> 95</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;"> 96</span>         
<span style="color: #008080;"> 97</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;"> 98</span>             <span style="color: #0000ff;">return</span> <span style="color: #0000ff;">true</span><span style="color: #000000;">;
</span><span style="color: #008080;"> 99</span>         }<span style="color: #0000ff;">else</span><span style="color: #000000;">{
</span><span style="color: #008080;">100</span>             <span style="color: #0000ff;">return</span> <span style="color: #0000ff;">false</span><span style="color: #000000;">;
</span><span style="color: #008080;">101</span> <span style="color: #000000;">        }
</span><span style="color: #008080;">102</span> <span style="color: #000000;">    }
</span><span style="color: #008080;">103</span> <span style="color: #000000;">}
</span><span style="color: #008080;">104</span> 
<span style="color: #008080;">105</span> 
<span style="color: #008080;">106</span> ?>
Keyword reply and follow reply

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn