标签:
写在前面的话:为了更灵活的与微信公众平台互动,需要将微信公众平台与自己的服务器进行对接,只有对接成功之后,才能够进行后面功能的实现。
=========正文开始==========
详细讲解之前,对微信公众平台与自己服务器对接先有个感性的认识。
假设微信已经与我们自己的服务器完成对接,之后微信公众平台就能够将自己接收到的消息发送给我们的服务器,同样我们也可以给微信服务器发送消息。这里就涉及到了几个问题:1.微信应该给我们服务器的什么地址进行对接呢?2.如何验证这个地址确实是我们自己服务器的地址呢?解决了这两个疑问,初步对接的工作也就完成了。
一、微信应该给我们服务器的什么地址进行对接呢?
1、打开自己的微信公众号后台,选择左边菜单栏最下面的开发者中心,如下图:
2、在开发者中心页面,如下图:
这个页面有一些比较有用的信息,其中AppID和AppSecret对于每个公众号是唯一的,在后面的功能实现中会用到。下面的服务器配置页面,就是用来填写我们自己服务器与微信公众平台对接的地方,点击修改配置就可以填写了相关信息了。
(1)URL(服务器地址):填写自己的服务器的一个地址,这里我使用的是SAE,至于wechat.php具体写了哪些代码,下面再讲。
(2)Token(令牌):这里随便填写,这个在wechat.php代码里面会用到。
(3)EncodingAESKey和消息加密解密方式:这里默认就可以了,以后如果需要用到消息加密的话,可以进行设置。
设置完成上面信息后,点击提交,如果wechat.php中写的代码没有问题的话,应该会提示成功,然后再点击启用,就完成了微信公众平台与自己服务器的对接了。接下来来看看wechat.php中代码该怎么写。
二、如何验证这个地址确实是我们自己服务器的地址呢?
前面点击提交之后,微信会向我们提交的地址发送GET请求,请求中含有四个参数:signature,timestamp,nonce,echostr,我们代码中需要通过如下三个步骤来验证:
(1)将token,timestamp,nonce三个参数进行字典排序
(2)将三个参数字符串进行sha1加密
(3)加密字符串和signature对比,如果比对正确原样返回echostr。
具体代码如下:
<?php $echoStr = $_GET["echostr"]; $signature = $_GET["signature"]; $timestamp = $_GET["timestamp"]; $nonce = $_GET["nonce"]; $token = "test"; $tmpArr = array($token, $timestamp, $nonce); sort($tmpArr, SORT_STRING); $tmpStr = implode( $tmpArr ); $tmpStr = sha1( $tmpStr ); if( $tmpStr == $signature ) { echo $echoStr; exit; } else { echo "validate没有通过"; } ?>
上面代码应该也比较简单了,也不过多解释了,其实这里验证是比较粗糙的,我们可以直接在代码里面写上如下代码: echo $_GET[‘echostr‘]其实就能够通过验证;而且更合理的话应该将$tmpStr发送给微信服务器,signature的比对在微信服务器端比对比较合适,我们以后会发现之后一些签名验证就是在微信服务器端验证的,这里其实不用太纠结,这里也不会涉及到多少安全性的问题,因此想怎么写就怎么写吧。
如果在上面验证的过程中出问题了,看看是不是sae有问题,完成了这一步,和微信服务器的对接算是完成了。
标签:
原文地址:http://www.cnblogs.com/wuguanglei/p/4393017.html