<?php
// 设置一个密钥(secret),只有发送方,和接收方知道/*----发送方和接收方- start ----*/$secret = "28c8edde3d61a0411511d3b1866f0636";/*----发送方和接收方- end ----*//*----发送方待发送数据- start ----*/// 待发送的数据包$data = array( \'username\' => \'123@qq.com\', \'sex\' => \'1\', \'age\' => \'16\', \'addr\' => \'zhongguo\', \'timestamp\' => time(),);// 获取signfunction getSign($secret, $data) { // 对数组的值按key排序 ksort($data); // 生成url的形式 $params = http_build_query($data); // 生成sign $sign = md5($params . $secret); return $sign;}// 发送的数据加上sign$data[\'sign\'] = getSign($secret, $data);/*----发送方待发送数据- end ----*//*----接收方待处理验证数据- start ----*//*** 后台验证sign是否合法* @param [type] $secret [description]* @param [type] $data [description]* @return [type] [description]*/function verifySign($secret, $data) { // 验证参数中是否有签名 if (!isset($data[\'sign\']) || !$data[\'sign\']) { return \'发送的数据签名不存在\'; } if (!isset($data[\'timestamp\']) || !$data[\'timestamp\']) { return \'发送的数据参数不合法\'; } // 验证请求, 10分钟失效 if (time() - $data[\'timestamp\'] > 600) { return \'验证失效, 请重新发送请求\'; } $sign = $data[\'sign\']; unset($data[\'sign\']); ksort($data); $params = http_build_query($data); // $secret是通过key在api的数据库中查询得到 $sign2 = md5($params . $secret); if ($sign == $sign2) { return \'验证通过\'; } else { return \'请求不合法\'; }}/*----接收方待处理验证数据- end ----*/?>app端获取key 记录key 然后 接口请求带着key数值