代码拉取完成,页面将自动刷新
package aliyun
import (
"context"
"crypto/hmac"
"crypto/sha1"
"encoding/base64"
"encoding/json"
"fmt"
"net/http"
"net/url"
"strings"
"time"
"gitee.com/wallesoft/sms/core"
"github.com/gogf/gf/v2/errors/gerror"
"github.com/gogf/gf/v2/net/gclient"
"github.com/google/uuid"
)
var _ core.GatewayInterface = (*Gateway)(nil)
type Gateway struct {
AccessKeyId string
AccessKeySecret string
SignName string
}
func (g *Gateway) GetName() string {
return NAME
}
func (g *Gateway) Send(ctx context.Context, to core.PhoneNumberInterface, message core.MessageInterface, client *gclient.Client) (string, error) {
query := url.Values{}
query.Add("RegionId", EndpointRegionId)
query.Add("AccessKeyId", g.AccessKeyId)
query.Add("Format", EndpointFormat)
query.Add("SignatureMethod", EndpointSignatureMethod)
query.Add("SignatureVersion", EndpointSignatureVersion)
query.Add("SignatureNonce", uuid.New().String())
query.Add("Timestamp", time.Now().UTC().Format("2006-01-02T15:04:05Z"))
query.Add("Action", EndpointMethod)
query.Add("Version", EndpointVersion)
query.Add("PhoneNumbers", to.UniversalNumber())
query.Add("SignName", g.SignName)
template, err := message.GetTemplate(g)
if err != nil {
return "", err
}
query.Add("TemplateCode", template)
data, err := message.GetData(g)
if err != nil {
return "", err
}
marshal, err := json.Marshal(data)
if err != nil {
return "", err
}
query.Add("TemplateParam", string(marshal))
query.Add("Signature", generateSign(http.MethodGet, g.AccessKeySecret, query))
response := &Response{}
res := client.GetVar(ctx, EndpointUrl, query)
if err := res.Scan(response); err != nil {
return "", err
}
if response.Code != OK {
return "", gerror.Newf("send failed code:%s msg:%s", response.Code, response.Message)
}
return res.String(), nil
}
// generateSign Generate sign.
// https://help.aliyun.com/document_detail/101343.html
func generateSign(httpMethod, accessKeySecret string, query url.Values) string {
httpMethod = strings.ToUpper(httpMethod)
encode := url.QueryEscape(query.Encode())
encode = strings.Replace(encode, "+", "%20", -1)
encode = strings.Replace(encode, "*", "%2A", -1)
encode = strings.Replace(encode, "%7E", "~", -1)
h := hmac.New(sha1.New, []byte(accessKeySecret+"&"))
h.Write([]byte(fmt.Sprintf("%s&%%2F&%s", httpMethod, encode)))
return base64.StdEncoding.EncodeToString(h.Sum(nil))
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。