<?php // 設置一個密鑰(secret),只有發送方,和接收方知道 /*----發送方和接收方- start ----*/ $secret = "28c8edde3d61a0411511d3b1866f0636"; /*----發送方和接收方- end ----*/ /*----發送方待發送數據- start ----*/ // 待發送的數據包 $data = array( 'username' => '123@qq.com', 'sex' => '1', 'age' => '16', 'addr' => 'zhongguo', 'timestamp' => time(), ); // 獲取sign function 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 ----*/ ?>