开发者模式
在”高级功能”页面中,我们首先要开启”开发者模式”,如下图:
点击”查看详情”按钮,打开界面如下:
这里我们需要填写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
<?phprequire_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环境中,点击”提交验证”按钮,如果没有问题的化,系统会提示”开发者权限已开通”。这一步是必须的,将是我们后续开发的基础。