您的位置:首页 > 移动开发 > 微信开发

易信公众平台开发从入门到精通之开发验证

2014-06-03 16:39 253 查看

开发者模式

在”高级功能”页面中,我们首先要开启”开发者模式”,如下图:



点击”查看详情”按钮,打开界面如下:



这里我们需要填写URL和Token。当你填写上URL和Token后,点击“提交验证”的按钮后,易信服务器会发送GET请求到你的服务器上。如果验证无误的话,页面会生成AppID和AppSecret字符串,后面会大量用到这两个变量。

校验程序

 

开发者提交信息后,易信服务器将发送GET请求到填写的URL上,GET请求携带四个参数:

 

参数
描述
signature
易信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。
timestamp
时间戳
nonce
随机数
echostr
随机字符串
 

开发者通过检验signature对请求进行校验(下面有校验方式)。若确认此次GET请求来自易信服务器,请原样返回echostr参数内容,则接入生效,成为开发者成功,否则接入失败。

加密/校验流程如下:

1. 将token、timestamp、nonce三个参数进行字典序排序

2. 将三个参数字符串拼接成一个字符串进行sha1加密

3. 开发者获得加密后的字符串可与signature对比,标识该请求来源于易信

 
校验函数如下:

1 function checkSignature()

2 {

3      $signature= $_GET["signature"];

4      $timestamp= $_GET["timestamp"];

5      $nonce= $_GET["nonce"];  

6     

7      $token= TOKEN;

8      $tmpArr= array($token, $timestamp, $nonce);

9      sort($tmpArr,SORT_STRING);

10    $tmpStr= implode( $tmpArr );

11    $tmpStr= sha1( $tmpStr );

12   

13    if($tmpStr == $signature ){

14              returntrue;

15    }else{

16              returnfalse;

17    }

18 }

3,4,5行代码是通过get请求获取将signature、timestamp、nonce三个参数。第7行代码的TOKEN是在common/Global.php文件中进行了全局设置。第8-11行代码指将三个参数字符串进行排序,拼接成一个字符串进行sha1加密。最后加密串与signature做比较。

提交验证

我们通过一个例子,来说明整个验证流程。

Index.php

<?php

require_once dirname(__FILE__) . '/YiXinCore.class.php';

require_once dirname(__FILE__) . '/Log.class.php';

$token="1234567890";

$yxchat=new yxchat();

$result=$yxchat->run();

class yxchat

{
public function run()
{
//判断此次请求是否为验证请求
if (!isset($_GET['echostr']))
{
Log::wLog('INFO',"执行消息:".$echoStr);
$callback = new YiXinCore();
$callback->responseMsg();
}
else
{
Log::wLog('INFO',"执行验证:".$echoStr);
$this->valid();
}
}

private function valid()
{
$echoStr=$_GET["echostr"];
Log::wLog('INFO',"验证valid:".$echoStr);
if ($this->checkSignature())
{
Log::wLog('INFO',"验证valid:".$echoStr."成功!\r");
echo $echoStr;
exit;
}
}

private function checkSignature()
{
$signature = $_GET["signature"];
$timestamp = $_GET["timestamp"];
$nonce = $_GET["nonce"];

$tmpArr = array($token, $timestamp, $nonce);
sort($tmpArr, SORT_STRING);
$tmpStr = implode( $tmpArr );
$tmpStr = sha1( $tmpStr );

if( $tmpStr == $signature ){
return true;
}else{
return false;
}
}

}

?>

具体的类库我们将在后面的章节进行阐述。$result=$yxchat->run()为验证入口函数。run函数的代码,主要功能是,如果是验证请求,则具体执行valid函数,如果是其他消息请求,则执行YiXinCore类中的responseMsg的方法。valid函数,主要利用了签名函数进行合法性校验。

好了,到这一步,我们的验证程序就算是写好了,部署到服务器或者sae环境中,点击”提交验证”按钮,如果没有问题的化,系统会提示”开发者权限已开通”。这一步是必须的,将是我们后续开发的基础。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐