Heim > Backend-Entwicklung > PHP-Tutorial > 微信公众平台消息接口开发(29)校验签名与消息响应合并_PHP教程

微信公众平台消息接口开发(29)校验签名与消息响应合并_PHP教程

WBOY
Freigeben: 2016-07-20 11:14:29
Original
1113 Leute haben es durchsucht

微信公众平台开发 微信公众平台开发者 微信公众平台开发模式 签名校验 消息响应
作者:方倍工作室
原文:http://www.cnblogs.com/txw1958/archive/2013/05/08/weixin-if29-valid-responseMsg.html 

 

一、问题来源

微信公众平台在启用接口的时候使用valid函数进行验证,

<span define</span>("TOKEN", "方倍工作室"<span );
</span><span $wechatObj</span> = <span new</span><span  wechatCallbackapiTest();
</span><span $wechatObj</span>->valid();
Nach dem Login kopieren

但在验证完成后,就开始执行对消息的响应,不再使用valid函数,需要把他注释掉,并且设置成responseMsg()

如下

<span define</span>("TOKEN", "方倍工作室"<span );
</span><span $wechatObj</span> = <span new</span><span  wechatCallbackapiTest();
</span><span $wechatObj</span>->responseMsg();
Nach dem Login kopieren

这样操作,其实比较麻烦,因为要回头来改函数。

二、问题分析

为什么要用两个不同函数来处理呢?这是因为两个不同的函数执行不同的功能,

当执行valid函数时,提交的是验证字符串,用于保证url和token填写提交正确,这个时候微信服务器提交给url的请求是

<span signature</span>=eded789463180edf6c13691398d0cb4c85fb0e23<span &echostr</span>=5838479218127813673<span &stamp</span>=1359100969<span &nonce</span>=1359376876
Nach dem Login kopieren

而当响应消息的时候,已经可以确定url地址正确了,这时候主要是获得回复的xml了,这时提交的请求类似如下:

<span signature</span>=ba7f5cf8aee512037e5a669596f6f64a8e763d7c<span &timestamp</span>=1368016183<span &nonce</span>=1368211921
Nach dem Login kopieren

二、解决方法

我们回头来看一下valid函数

    <span public</span> <span function</span><span  valid()
    {
        </span><span $echoStr</span> = <span $_GET</span>["echostr"<span ];

        </span><span //</span><span valid signature , option</span>
        <span if</span>(<span $this</span>-><span checkSignature()){
            </span><span echo</span> <span $echoStr</span><span ;
            </span><span exit</span><span ;
        }
    }</span>
Nach dem Login kopieren

其中有一个_GET变量,那么什么是_GET变量,以下内容来自 http://www.w3school.com.cn/php/php_get.asp

$_GET 变量
$_GET 变量是一个数组,内容是由 HTTP GET 方法发送的变量名称和值。
$_GET 变量用于收集来自 method="get" 的表单中的值。从带有 GET 方法的表单发送的信息,对任何人都是可见的(会显示在浏览器的地址栏),并且对发送的信息量也有限制(最多 100 个字符)。

为什么使用 $_GET?
注释:在使用 $_GET 变量时,所有的变量名和值都会显示在 URL 中。所以在发送密码或其他敏感信息时,不应该使用这个方法。不过,正因为变量显示在 URL 中,因此可以在收藏夹中收藏该页面。在某些情况下,这是很有用的。

我们注意到在二中描述的,两次不同的请求,签名验证请求中,url中有个echostr变量,而在响应消息中是没有的,

<span signature</span>=eded789463180edf6c13691398d0cb4c85fb0e23<span &<span <strong><span echostr</span></strong></span></span>=5838479218127813673<span &stamp</span>=1359100969<span &nonce</span>=1359376876
Nach dem Login kopieren

那么我们用同样的思路,判断_GET变量中是否有这个echostr变量,来实现区分两种不同的请求:

最终代码类似如下:

<span //</span><span define your token</span>
<span define</span>("TOKEN", "方倍工作室"<span );
</span><span $wechatObj</span> = <span new</span><span  wechatCallbackapiTest();

</span><span if</span> (<span isset</span>(<span $_GET</span>['echostr'<span ])) {
    </span><span $wechatObj</span>-><span valid();
}</span><span else</span><span {
    </span><span $wechatObj</span>-><span responseMsg();
}</span>
Nach dem Login kopieren

 

至此,我们就不用再来注释一个启用另一个了,减少了一次麻烦。

 

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/440276.htmlTechArticle微信公众平台开发 微信公众平台开发者 微信公众平台开发模式 签名校验 消息响应 作者:方倍工作室 原文:http://www.cnblogs.com/txw1958/archi...
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage