golang阿里云发短信验证手机号
时间: 2023-11-23 08:07:38 浏览: 103
以下是使用Golang和阿里云短信平台发送短信验证码的示例代码:
```go
package main
import (
"crypto/hmac"
"crypto/sha1"
"encoding/base64"
"fmt"
"io/ioutil"
"math/rand"
"net/http"
"net/url"
"sort"
"strings"
"time"
)
func main() {
// 阿里云短信平台的请求参数
params := url.Values{}
params.Set("PhoneNumbers", "17633802772") // 手机号码
params.Set("SignName", "阿里云短信测试专用") // 签名名称
params.Set("TemplateCode", "SMS_123456789") // 模板CODE
params.Set("TemplateParam", "{\"code\":\"123456\"}") // 模板参数
// 发送短信验证码
sendSms(params)
}
// 发送短信验证码
func sendSms(params url.Values) {
// 阿里云短信平台的请求参数
accessKeyId := "your_access_key_id" // 替换为你的AccessKeyId
accessSecret := "your_access_secret" // 替换为你的AccessKeySecret
params.Set("AccessKeyId", accessKeyId)
params.Set("SignatureMethod", "HMAC-SHA1")
params.Set("SignatureNonce", fmt.Sprintf("%d", rand.Int63()))
params.Set("SignatureVersion", "1.0")
params.Set("Timestamp", time.Now().UTC().Format("2006-01-02T15:04:05Z"))
// 对参数进行排序
var keys []string
for k := range params {
keys = append(keys, k)
}
sort.Strings(keys)
// 构造待签名的字符串
var signStrings []string
for _, k := range keys {
signStrings = append(signStrings, url.QueryEscape(k)+"="+url.QueryEscape(params.Get(k)))
}
signString := strings.Join(signStrings, "&")
// 计算签名
stringToSign := "GET&%2F&" + url.QueryEscape(signString)
hmacKey := []byte(accessSecret+"&")
hmacSha1 := hmac.New(sha1.New, hmacKey)
hmacSha1.Write([]byte(stringToSign))
signBytes := hmacSha1.Sum(nil)
sign := base64.StdEncoding.EncodeToString(signBytes)
params.Set("Signature", sign)
// 发送请求
url := "https://dysmsapi.aliyuncs.com/?" + params.Encode()
resp, err := http.Get(url)
if err != nil {
fmt.Println("发送短信验证码失败:", err)
return
}
defer resp.Body.Close()
// 处理响应
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
fmt.Println("发送短信验证码失败:", err)
return
}
fmt.Println("发送短信验证码成功:", string(body))
}
```
阅读全文