tp5签名验证

<?php
namespace app\admin\controller;
use think\Controller;
use think\Db;

//ID
defined('AppId') or define('AppId', '用户ID');
//key
defined('AppKey') or define('AppKey', '密钥');
//URL
defined('ReqURL') or define('ReqURL', 'http://域名/admin/testapi/sver');

class Testapi extends controller
{



public function index(){
// $requestData= "{'OrderCode':'222','ShipperCode':'333','LogisticCode':'444'}";
$requestData = '{"a":1,"b":2,"c":3,"d":4,"e":5}';

$data = array(
'AppId' => AppId,
'AppKey'=> AppKey,
'timeStamp'=>strtotime(date('Y-m-d H:i:s')),
);

$datas = array(
'AppId' => AppId,
'RequestType' => '1002',
'RequestData' => urlencode($requestData) ,
'DataType' => '2',
);
$datas['DataSign'] = $this->encrypt($data); //客户输入的验证
$result=$this->sendPost(ReqURL, $datas);

$data_sign=$this->verifysign(); //获取数据表中的验证
if($data_sign==$datas['DataSign']){
echo '验证一致';
}else{
echo '名称和key不一致';
exit();
}

// return $datas['DataSign'];
return $result;
}

public function sver(){
$data=input('post.');
$json0=$data['RequestData'];
$obj=json_decode($json0); //对象
$arr=json_decode($json0, true); //数组
// $arr=explode(',',$json);
// var_dump($json0);
// var_dump(json_decode($json0));
// var_dump(json_decode($json0, true));

print_r($obj);
// print_r($json0);
}

/**
* post提交数据
* @param string $url 请求Url
* @param array $datas 提交的数据
* @return url响应返回的html
*/
function sendPost($url, $datas) {
$temps = array();
foreach ($datas as $key => $value) {
$temps[] = sprintf('%s=%s', $key, $value);
}
$post_data = implode('&', $temps);
$url_info = parse_url($url);
if(empty($url_info['port']))
{
$url_info['port']=80;
}
$httpheader = "POST " . $url_info['path'] . " HTTP/1.0\r\n";
$httpheader.= "Host:" . $url_info['host'] . "\r\n";
$httpheader.= "Content-Type:application/x-www-form-urlencoded\r\n";
$httpheader.= "Content-Length:" . strlen($post_data) . "\r\n";
$httpheader.= "Connection:close\r\n\r\n";
$httpheader.= $post_data;
$fd = fsockopen($url_info['host'], $url_info['port']);
fwrite($fd, $httpheader);
$gets = "";
$headerFlag = true;
while (!feof($fd)) {
if (($header = @fgets($fd)) && ($header == "\r\n" || $header == "\n")) {
break;
}
}
while (!feof($fd)) {
$gets.= fread($fd, 128);
}
fclose($fd);

return $gets;
}




function encrypt($data) {
ksort($data);
$arr2 = array_values($data);
$da=implode("-", $arr2);
return urlencode(base64_encode(md5($da)));
}




public function verifysign(){
$res=Db::name('sign')->where('id',1)->find();
$time=strtotime(date('Y-m-d H:i:s'));
$data=$res['name'].'-'.$res['key'].'-'.$time;
$sign=urlencode(base64_encode(md5($data)));
return $sign;
}
}
posted @ 2020-11-22 18:59  85541585  阅读(344)  评论(0编辑  收藏  举报