request->get(); if(!isset($res['Signature']) || !isset($res['api_key'])){ $return = ['code'=>10001,'msg'=>'参数错误']; return json_encode($return); } $sign1 = urlencode($res['Signature']); //解密 $user_api = Db::name("app_api_key")->where("api_key",$res['api_key'])->find(); if(empty($user_api)){ $return = ['code'=>10002,'msg'=>'验签失败']; return json_encode($return); } $data = [ 'api_key' => $user_api['api_key'], 'method' => 'HmacSHA256', 'times' => $res['times'], ]; $str = $this->formatParameters($data, false); $sign2 = urlencode(base64_encode(hash_hmac("sha256", $str, $user_api['secret_key'],TRUE))); $return = ['sign2'=>$sign2,'sign1'=>$sign1]; if($sign2 == $sign1){ $address = Db::name("app_currency_user")->field("address,tron_address")->where("user_id",$user_api['user_id'])->where("curr_id",1)->find(); $return = ['code'=>200,'msg'=>'success','data'=>$address]; } return json_encode($return); // return json_encode($data); } public function test() { $data = [ 'api_key' => "gih03i2a8x-id0ugpfrs-vt4rriioyz-lqszbm", 'method' => 'HmacSHA256', 'times' => date('Y-m-d/H:i:s', time()), ]; $sign = $this->getVerifySign($data); //模拟解密 $arr = []; parse_str($sign,$arr); $user_api = Db::name("app_api_key")->where("api_key",$arr['api_key'])->find(); if(empty($user_api)){ $this->error("验签失败"); } $data = [ 'api_key' => $arr['api_key'], 'method' => 'HmacSHA256', 'times' => $arr['times'], ]; $str = $this->formatParameters($data, false); $sign2 = urlencode(base64_encode(hash_hmac("sha256", $str, $user_api['secret_key'],TRUE))); var_dump(urlencode($arr['Signature']),$sign2); } //数据组装 public function getVerifySign($data) { $string = $this->formatParameters($data, false); $sign = urlencode(base64_encode(hash_hmac("sha256", $string, "phnp5ro5-0ds89uvbhw-c4siqgltt-imxp",TRUE))); return $string.'&Signature='.$sign; } public function formatParameters($paraMap, $urlencode) { $buff = ""; ksort($paraMap); foreach ($paraMap as $k => $v) { if($k=="sign"){ continue; } if ($urlencode) { $v = urlencode($v); } $buff .= $k . "=" . $v . "&"; } $reqPar = ''; if (strlen($buff) > 0) { $reqPar = substr($buff, 0, strlen($buff) - 1); } return $reqPar; } }