Files
2024-09-27 01:32:49 +08:00

67 lines
2.8 KiB
PHP
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
namespace app\common\service;
use think\facade\Env;
class AliyunOssService{
public function getStsToken($data=[]) {
$upload_type = $data['upload_type']??'';
$result['errcode']=0;
$result['errmsg']='成功获取STS凭证';
$nowtime=time();
$sts_expire_time=session('sts_expire_time');
if ($sts_expire_time && $nowtime < $sts_expire_time) {
$result['data']=session('sts_data');
} else {
require_once Env::get('extend_path').'Aliyun/core/Config.php';
$iClientProfile = \DefaultProfile::getProfile("cn-hangzhou", "LTAI8yWB5JgvunlT", "F7OWOL7OA1awQ6tELawWBKTQM5I32U");
$client = new \DefaultAcsClient($iClientProfile);
// 角色资源描述符在RAM的控制台的资源详情页上可以获取
$roleArn = "acs:ram::1845636578658781:role/develop-files-role";
$bucketname='ydyd-develop-file';
if ($upload_type=='chat') {
$bucketname='ydyd-chat-file';
}
if ($upload_type =='product') {
$bucketname='ydyd-product-file';
}
$policy = [];
$policy['Statement'][0]['Action']=array("oss:PutObject","oss:GetObject","oss:ListParts","oss:UploadPart");
$policy['Statement'][0]['Effect']="Allow";
$policy['Statement'][0]['Resource']="acs:oss:*:1845636578658781:".$bucketname."/*";
$policy['Version']="1";
require_once Env::get('extend_path').'Aliyun/sts/AssumeRoleRequest.php';
$request = new \AssumeRoleRequest();
// RoleSessionName即临时身份的会话名称用于区分不同的临时身份
// 您可以使用您的客户的ID作为会话名称
$request->setRoleSessionName("fortest");
$request->setRoleArn($roleArn);
$request->setPolicy(json_encode($policy));
$request->setDurationSeconds(3600);
$sts_expire_time=time()+1800;
$response = $client->getAcsResponse($request);
if ($response->Credentials->AccessKeySecret) {
$result['data']['Region']='oss-cn-hangzhou';
$result['data']['AccessKeySecret']=$response->Credentials->AccessKeySecret;
$result['data']['AccessKeyId']=$response->Credentials->AccessKeyId;
$result['data']['Bucket']=$bucketname;
$result['data']['SecurityToken']=$response->Credentials->SecurityToken;
//结果写入session缓存
session('sts_expire_time',$sts_expire_time);
session('sts_data',$result['data']);
} else {
$result['errcode']=-2;
$result['errmsg']='获取STS凭证失败';
}
}
return $result;
}
}