开发者模式

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

怎么生成开发者私钥 怎么获得开发者的信任_字符串

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

怎么生成开发者私钥 怎么获得开发者的信任_服务器_02

这里我们需要填写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环境中,点击”提交验证”按钮,如果没有问题的化,系统会提示”开发者权限已开通”。这一步是必须的,将是我们后续开发的基础。