Text message automatic reply for WeChat public account development
Aug 08, 2016 am 08:49 AM1.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> ?>
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();//接口驗(yàn)證 <span style="color: #008080;">10</span> <span style="color: #800080;">$wechatObj</span>->responseMsg();<span style="color: #008000;">//</span><span style="color: #008000;">調(diào)用回復(fù)消息方法</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> ?>
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();//接口驗(yàn)證 <span style="color: #008080;"> 10</span> <span style="color: #800080;">$wechatObj</span>->responseMsg();<span style="color: #008000;">//</span><span style="color: #008000;">調(diào)用回復(fù)消息方法</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;">時(shí)間類型,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,歡迎關(guān)注海仙日用百貨!"."\n"."回復(fù)數(shù)字'1',了解店鋪地址."."\n"."回復(fù)數(shù)字'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號(hào)新東升市場(chǎng)地下室第一排."<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> = "對(duì)不起,你的內(nèi)容我會(huì)稍后回復(fù)"<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> ?>

Hot AI Tools

Undress AI Tool
Undress images for free

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)