PHP接入腾讯云GET、POST、V3Post方法

1 篇文章 0 订阅
1 篇文章 0 订阅

一、GET请求

function mediaInfo(){
		$vodId = $_GET['vodId'];  //腾讯云视频ID
	
		$secretKey = '你的腾讯云的SecretKey';
		//拼签名用;  拼接方式:请求地址大写+请求的地址+?
		$srcStr = 'GETvod.tencentcloudapi.com/?';
		//请求接口的公共参数+必填参数数组
		$param = array(
			"Action"=> 'DescribeMediaInfos',//默认
			"Nonce"=> rand(1000,9999),   //随机一个1000-9999之间的数字
			"SecretId"=>'你的腾讯云的SecretId',
			'Region'=>'ap-beijing',//区域列表中选
			"Timestamp"=> time(),   //秒级时间戳
			'FileIds.0'=>$vodId,    //腾讯云视频地址
			'Filters.0'=>'basicInfo',//获取基础信息
			"Token"=>'',//为空    //固定
			"Version"=>'2018-07-17'//默认
		);  
		将数组的键名按字母正序排序
		ksort($param); //参数排序
		$srcStr .= urldecode(http_build_query($param));   //将数组变成Action=DescribeMediaInfos&Nonce=123456的字符串格式,然后将得到的字符串通过urldecode编码拼上前面的GETvod.tencentcloudapi.com/?
		//排序后连接字符串 生成签名 官网有验证签名的地方 签名不对的话 可以把时间戳和随机数写死之后校验
		$sign =  urlencode(base64_encode(hash_hmac('sha1', $srcStr, $secretKey, true)));  //使用哈希的sha1方式加密,然后通过base64转码,然后urlencode转回来,是为了不将“=”转变
		$url ='https://vod.tencentcloudapi.com/?Action=DescribeMediaInfos&Nonce='.$param['Nonce'].'&Region=ap-beijing&SecretId='.$param['SecretId'].'&Signature='.$sign.'&Timestamp='.$param['Timestamp'].'&Token=&Version='.$param['Version'].'&FileIds.0='.$param['FileIds.0'].'&Filters.0='.$param['Filters.0']; //通过http方式访问接口地址,将所有数组中的参数都拼上
		$res = $this->CurlRequest($url,'get');  //通过get请求获取到结果,获取到的结果是一个json字符串,然后需要json_encode转回来
		//到这基本上就完事了。  后面就可以直接打印看结果了。  如果需要加密的话, 就将地址加上昨天说的那个加密。

		// echo json_encode($res);exit;
	}

二、POST请求

function idCardCheck(){
		$base64img = 'base64的图片';  //不加data://的前缀
		$secretKey = '你的secretKey';

		$srcStr = 'POSTfaceid.tencentcloudapi.com/?';
		$param = array(
			"Action"=> 'IdCardOCRVerification',//默认
			"Nonce"=> rand(1000,9999),
			"SecretId"=>'你的SecretId',
			'Language'=>'zh-CN',
			'Region'=>'ap-beijing',//区域列表中选
			"Timestamp"=> time(),
			'ImageBase64'=>$base64img,
			"Version"=>'2018-03-01'//默认
			);  
		ksort($param); //参数排序
		$strParam = http_build_query($param);
		$srcStr .= urldecode($strParam);
		//排序后连接字符串 生成签名 官网有验证签名的地方 签名不对的话 可以把时间戳和随机数写死之后校验
		$sign =  urlencode(base64_encode(hash_hmac('sha1', $srcStr, $secretKey, true)));
		$strParam .= '&Signature='.$sign;
		$url ='https://faceid.tencentcloudapi.com';
		$res = $this->CurlRequest($url,'post',$strParam);
	}

三、POST_V3请求

    //v3格式签名  //有照片就要用这个
	private function idCardCheckV3(){
		$base64img = 'base64的图片';   //不带data://
        $secretId = $this->getSecretId();
        $secretKey = $this->getSecretKey();
        $host = "faceid.tencentcloudapi.com";
        $service = "faceid";
        $version = "2018-03-01";
        $action = "IdCardOCRVerification";
        $region = "ap-beijing";
        $timestamp = time();
        $algorithm = "TC3-HMAC-SHA256";

        $param = array('ImageBase64'=>$base64img);    //需要发送的action独有参数

        // step 1: build canonical request string
        $httpRequestMethod = "POST";
        $canonicalUri = "/";
        $canonicalQueryString = "";
        $canonicalHeaders = "content-type:application/json\n"."host:".$host."\n";
        $signedHeaders = "content-type;host";
        $payload = json_encode($param);    //php5.6以上才要加第二个参数
        $hashedRequestPayload = hash("SHA256", $payload);
        $canonicalRequest = $httpRequestMethod."\n"
            .$canonicalUri."\n"
            .$canonicalQueryString."\n"
            .$canonicalHeaders."\n"
            .$signedHeaders."\n"
            .$hashedRequestPayload;
        // echo $canonicalRequest.PHP_EOL;

        // step 2: build string to sign
        $date = gmdate("Y-m-d", $timestamp);
        $credentialScope = $date."/".$service."/tc3_request";
        $hashedCanonicalRequest = hash("SHA256", $canonicalRequest);
        $stringToSign = $algorithm."\n"
            .$timestamp."\n"
            .$credentialScope."\n"
            .$hashedCanonicalRequest;
        // echo $stringToSign.PHP_EOL;

        // step 3: sign string
        $secretDate = hash_hmac("SHA256", $date, "TC3".$secretKey, true);
        $secretService = hash_hmac("SHA256", $service, $secretDate, true);
        $secretSigning = hash_hmac("SHA256", "tc3_request", $secretService, true);
        $signature = hash_hmac("SHA256", $stringToSign, $secretSigning);
        // echo $signature.PHP_EOL;

        // step 4: build authorization
        $authorization = $algorithm
            ." Credential=".$secretId."/".$credentialScope
            .", SignedHeaders=content-type;host, Signature=".$signature;
        // echo $authorization.PHP_EOL;

        $url = "https://".$host;
        $header[] = "Authorization:".$authorization;
        $header[] = "Content-Type:application/json";
        $header[] = "Host:".$host;
        $header[] = "X-TC-Action:".$action;
        $header[] = "X-TC-Timestamp:".$timestamp;
        $header[] = "X-TC-Version:".$version;
        $header[] = "X-TC-Region:".$region;
        $header[] = "X-TC-Language:zh-CN";
        $res = $this->CurlRequest($url,'post',$payload,$header);
    }

四、需要配合的方法

1. 哈希256

    private function SHA256Hex($str){
		$re=hash('sha256', $str, true);
		return strtolower(bin2hex($re));
	}

2. 支持很多方式的curl

    //发送请求方法
	protected function CurlRequest($url,$type = null,$data=null,$header=null){
		//初始化浏览器
		$ch = curl_init();
		//设置浏览器,把参数url传到浏览器的设置当中
		curl_setopt($ch, CURLOPT_URL, $url);
		curl_setopt($ch, CURLOPT_HEADER, false);
		curl_setopt($ch, CURLOPT_NOBODY, false);
		//以字符串形式返回到浏览器当中
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
		//禁止https协议验证域名,0就是禁止验证域名且兼容php5.6
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
		//禁止https协议验证ssl安全认证证书
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
		//判断data是否有数据,如果有data数据传入那么就把curl的请求方式设置为POST请求方式
		if ( !empty($data) ) {
			switch ($type) {
				case 'get':
					//设置POST请求方式
					@curl_setopt($curl, CURLOPT_HTTPGET, true);
					break;
				case 'post':
					//设置POST请求方式
					@curl_setopt($ch, CURLOPT_POST, true);
					//设置POST的数据包
					@curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
					break;
				case 'put':
					//设置PUT请求方式
					@curl_setopt($ch, CURLOPT_CUSTOMREQUEST,"PUT");
					//设置POST的数据包
					@curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
					break;
				case 'delete':
					//设置POST请求方式
					@curl_setopt ($ch, CURLOPT_CUSTOMREQUEST, "DELETE");
					//设置POST的数据包
					@curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
					break;
				default:
					//设置POST请求方式
					@curl_setopt($ch, CURLOPT_POST, true);
					//设置POST的数据包
					@curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
					break;
			}
		}
		//设置header头
		if ( !empty($header) ) {
			curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
		}
		//让curl发起请求
		$httpCode = curl_exec($ch);
		$errorCode = curl_errno($ch);
		//关闭curl浏览器
		curl_close($ch);
		if(0 !== $errorCode) {
			return false;
		}
		//把请求回来的数据返回
		return json_decode($httpCode,true);
	}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

czlearnunity3d

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值