+发表新主题
查看: 1297|回复: 0

[开发入门] 微信开发入门系列教程(二)-- 公众平台服务器配置(续)

[复制链接]

[开发入门] 微信开发入门系列教程(二)-- 公众平台服务器配置(续)

[复制链接]
风的传说自由 发表于 2015-7-6 14:39:08 浏览:  1297 回复:  0 [显示全部楼层] |只看大图 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
152000gbx7h5d7ewlogx5p.png


上一节已经成功验证了服务器地址的有效性,接下来从纯新手角度给大家完整解读下官方提供的验证示例代码,公众平台的开发者文档也做了详细的说明。

开发者提交信息后,微信服务器将发送GET请求到填写的服务器地址URL上,GET请求携带四个参数:
参数描述
signature微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。
timestamp时间戳
nonce随机数
echostr随机字符串

加密/校验流程如下:
1. 将token、timestamp、nonce三个参数进行字典序排序
2. 将三个参数字符串拼接成一个字符串进行sha1加密
3. 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信


检验signature的PHP示例代码:

  1. private function checkSignature()

  2. {

  3.         $signature = $_GET["signature"];//获取GET请求中的参数"signature"

  4.         $timestamp = $_GET["timestamp"];//获取GET请求中的参数"timestamp"

  5.         $nonce = $_GET["nonce"];        //获取GET请求中的参数"nonce"

  6.                         

  7.         $token = TOKEN;//将代码中我们定义的TOKEN赋值给token

  8.         $tmpArr = array($token, $timestamp, $nonce);//将以上三个参数放进数组

  9.         sort($tmpArr, SORT_STRING);//将数组的元素当做字符串来处理,并按升序排序

  10.         $tmpStr = implode( $tmpArr );//将排序好的数组元素重新组合成一个字符串

  11.         $tmpStr = sha1( $tmpStr );//进行sha1加密

  12.         

  13.         if( $tmpStr == $signature ){//将组合的字符串和微信服务器传过来的参数"signature"进行对比

  14.                 return true;

  15.         }else{

  16.                 return false;

  17.         }

  18. }
复制代码
开发者通过检验signature对请求进行校验,若确认此次GET请求来自微信服务器,则原样返回echostr参数内容,则接入生效,成为开发者成功,否则接入失败。

  1. public function valid()

  2. {

  3.         $echoStr = $_GET["echostr"];



  4.         //valid signature , option

  5.         if($this->checkSignature()){

  6.                 echo $echoStr;//校验成功,返回随机字符串

  7.                 exit;

  8.         }

  9. }
复制代码
总结一下,验证方法大概是这样的:微信服务器把我们在公众号里服务器配置的填写的“Token”和微信服务器携带的另外三个参数按一定方式拼接在一起(signature),另外在把那三个参数也单独作为参数,发送GET请求到我们填写的URL上。我们在服务器端通过获取微信服务器发送过来的GET请求中的4个参数,在服务端我们也定义相同值的TOKEN,把获取到的timestamp参数、nonce参数和我们定义的TOKEN按照给定的规则组合后,再同获取到的“signature”参数进行比较,在整个过程中都需要用到“Token”值。

以上步骤以后,如果你的服务器配置仍旧失败,除了开发者文档里有说明的错误码解释之外,还需要注意的是在调用验证方法之前不要有echo输出语句。
回复

使用道具 举报


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版| 赣南网

© 2013-2016 Comsenz Inc. Powered by Discuz! X3.4

用微信扫一扫

赣南网