Rumah > php教程 > php手册 > 微信公众号开发之文本消息自动回复

微信公众号开发之文本消息自动回复

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Lepaskan: 2016-08-08 08:49:47
asal
919 orang telah melayarinya

1.PHP示例代码下载

下载地址1:http://pan.baidu.com/s/1nvlhbnV、

下载地址2:https://mp.weixin.qq.com/wiki/home/index.html(开始开发-》接入指南-》PHP示例代码下载)

2.wx_sample.php初始代码

<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>
</xml></span><span style="color: #008080;">40</span> <span style="color: #000000;">                            <tousername></tousername>
</span><span style="color: #008080;">41</span> <span style="color: #000000;">                            <fromusername></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></msgtype>
</span><span style="color: #008080;">44</span> <span style="color: #000000;">                            <content></content>
</span><span style="color: #008080;">45</span> <span style="color: #000000;">                            <funcflag>0</funcflag>
</span><span style="color: #008080;">46</span>                             "<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> ?>
Salin selepas log masuk
wx_sample.php

3.调用回复信息方法

在wx_sample.php文件中注释掉$wechatObj->valid();,在其下增加一句“$wechatObj->responseMsg();”。

<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;">$textTpl</span> = "<span style="color: #000000;"><xml>
</xml></span><span style="color: #008080;">40</span> <span style="color: #000000;">                            <tousername></tousername>
</span><span style="color: #008080;">41</span> <span style="color: #000000;">                            <fromusername></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></msgtype>
</span><span style="color: #008080;">44</span> <span style="color: #000000;">                            <content></content>
</span><span style="color: #008080;">45</span> <span style="color: #000000;">                            <funcflag>0</funcflag>
</span><span style="color: #008080;">46</span>                             "<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> ?>
Salin selepas log masuk
调用回复信息方法

4.关键词自动回复和关注回复

$keyword保存着用户微信端发来的文本信息。

官方开发者文档:https://mp.weixin.qq.com/wiki/home/index.html(消息管理-》接收消息-接收事件推送-》1.关注/取消关注事件)

    关注事件与一般的文本消息有两处不同,一是MsgType值是event,二是增加了Event值是subscribe。由于官方文档(最初的wx_sample.php)没有提取这个参数,需要我们自己提取。在程序中增加两个变量$msgType和$event。

<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: #800080;">$textTpl</span> = "<span style="color: #000000;"><xml>
</xml></span><span style="color: #008080;"> 42</span> <span style="color: #000000;">                            <tousername></tousername>
</span><span style="color: #008080;"> 43</span> <span style="color: #000000;">                            <fromusername></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></msgtype>
</span><span style="color: #008080;"> 46</span> <span style="color: #000000;">                            <content></content>
</span><span style="color: #008080;"> 47</span> <span style="color: #000000;">                            <funcflag>0</funcflag>
</span><span style="color: #008080;"> 48</span>                             "<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> ?>
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