|
|
package helper
|
|
|
|
|
|
import (
|
|
|
openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client"
|
|
|
fc_open20210406 "github.com/alibabacloud-go/fc-open-20210406/v2/client"
|
|
|
util "github.com/alibabacloud-go/tea-utils/v2/service"
|
|
|
"github.com/alibabacloud-go/tea/tea"
|
|
|
"os"
|
|
|
)
|
|
|
|
|
|
type AlibabaCloud struct {
|
|
|
AccessKeyId string
|
|
|
AccessKeySecret string
|
|
|
Endpoint string
|
|
|
ServiceName string
|
|
|
FunctionName string
|
|
|
Body []byte
|
|
|
}
|
|
|
|
|
|
func GetAlibabaCloudByEnv() *AlibabaCloud {
|
|
|
return &AlibabaCloud{
|
|
|
AccessKeyId: os.Getenv("AccessKeyId"),
|
|
|
AccessKeySecret: os.Getenv("AccessKeySecret"),
|
|
|
Endpoint: os.Getenv("Endpoint"),
|
|
|
ServiceName: os.Getenv("ServiceName"),
|
|
|
FunctionName: os.Getenv("FunctionName"),
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 使用AK&SK初始化账号Client
|
|
|
* @param accessKeyId
|
|
|
* @param accessKeySecret
|
|
|
* @return Client
|
|
|
* @throws Exception
|
|
|
*/
|
|
|
func createClient(c *AlibabaCloud) (_result *fc_open20210406.Client, _err error) {
|
|
|
config := &openapi.Config{
|
|
|
// 必填,您的 AccessKey ID
|
|
|
AccessKeyId: tea.String(c.AccessKeyId),
|
|
|
// 必填,您的 AccessKey Secret
|
|
|
AccessKeySecret: tea.String(c.AccessKeySecret),
|
|
|
}
|
|
|
// 访问的域名, 如:1436712680323437.cn-shenzhen.fc.aliyuncs.com
|
|
|
config.Endpoint = tea.String(c.Endpoint)
|
|
|
_result = &fc_open20210406.Client{}
|
|
|
_result, _err = fc_open20210406.NewClient(config)
|
|
|
return _result, _err
|
|
|
}
|
|
|
|
|
|
func Call(c *AlibabaCloud) (_result []byte, _err error) {
|
|
|
// 工程代码泄露可能会导致AccessKey泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考,建议使用更安全的 STS 方式,更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/378661.html
|
|
|
client, _err := createClient(c)
|
|
|
if _err != nil {
|
|
|
return nil, _err
|
|
|
}
|
|
|
|
|
|
invokeFunctionHeaders := &fc_open20210406.InvokeFunctionHeaders{}
|
|
|
invokeFunctionRequest := &fc_open20210406.InvokeFunctionRequest{
|
|
|
Body: c.Body,
|
|
|
}
|
|
|
runtime := &util.RuntimeOptions{}
|
|
|
res, tryErr := func() (_r *fc_open20210406.InvokeFunctionResponse, _e error) {
|
|
|
defer func() {
|
|
|
if r := tea.Recover(recover()); r != nil {
|
|
|
_e = r
|
|
|
}
|
|
|
}()
|
|
|
// 复制代码运行请自行打印 API 的返回值
|
|
|
_r, _err = client.InvokeFunctionWithOptions(tea.String(c.ServiceName), tea.String(c.FunctionName), invokeFunctionRequest, invokeFunctionHeaders, runtime)
|
|
|
if _err != nil {
|
|
|
return nil, _err
|
|
|
}
|
|
|
|
|
|
return _r, nil
|
|
|
}()
|
|
|
|
|
|
if tryErr != nil {
|
|
|
var error = &tea.SDKError{}
|
|
|
if _t, ok := tryErr.(*tea.SDKError); ok {
|
|
|
error = _t
|
|
|
} else {
|
|
|
error.Message = tea.String(tryErr.Error())
|
|
|
}
|
|
|
// 如有需要,请打印 error
|
|
|
_, _err = util.AssertAsString(error.Message)
|
|
|
if _err != nil {
|
|
|
return nil, _err
|
|
|
}
|
|
|
}
|
|
|
return res.Body, _err
|
|
|
}
|