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 }