使用Go语言调用短信接口发送验证码短信教程
Go语言对接验证码短信接口DEMO示例
在开始之前,请确保您已经注册了短信服务提供商(如本例中使用的智慧云信3yit.com),并在其开发者文档中查看了相关接口信息,包括sp_id
、password
(或signature
)、API地址等。
设置Go开发环境
确保您的计算机上已经安装了Go语言环境,并配置好了GOPATH和GOROOT环境变量。您可以通过在终端中输入go version
来检查Go语言是否安装成功。
参数获取
登录智慧云信官网、点击对应的产品,比如【验证码】、在上方的选项卡中选择【开发者】-》【HTTP开发文档】。从文档中可以看到具体API方法名称,以及各个参数key及对应的值vavlue,通常包括sp_id
、mobile
、content、password
等参数。 sp_id代表产品编号,具有唯一性,通常是由6位数字组成。mobile代表手机号码。content代表短信内容,包含签名与短信内容,比如“【智慧云信】您的验证码是456790,请妥善保管”,其中【智慧云信】是签名,在签名报备中申请,“您的验证码是456790,请妥善保管“是短信模版,在模版报备中申请,审核通过即可发送。password是通过SP_ID密码进行MD5加密算法后产生的接口密码(非登录密码),由32位随机字符串组成。
编写Go代码
首先,我们需要编写一个Go程序来发送短信。以下是一个简单的示例代码:
go复制代码package main
import ( "bytes" "encoding/json" "fmt" "io/ioutil" "net/http" "net/url" "strconv" "time" )
// 假设的MD5计算函数(需要您自己实现或使用第三方库) func md5Hash(text string) string { // 实现MD5计算逻辑... // 这里只是返回一个示例值 return "example_md5_hash" }
// 发送短信的函数 func sendSMS(spID, mobile, content, password, signature string, ext *string) (string, error) { // 设置请求参数 params := url.Values{} params.Set("sp_id", spID) params.Set("mobile", mobile) params.Set("content", content)
// 根据需要选择使用password或signature if password != "" { params.Set("password", md5Hash(password)) } else if signature != "" { params.Set("signature", signature) }
if ext != nil { params.Set("ext", *ext) }
// 发送POST请求 resp, err := http.PostForm("https://api.3yit.com/api/send-sms-single", params) if err != nil { return "", err } defer resp.Body.Close()
// 读取响应内容 body, err := ioutil.ReadAll(resp.Body) if err != nil { return "", err }
// 解析JSON响应 var result map[string]interface{} err = json.Unmarshal(body, &result) if err != nil { return "", err }
// 检查响应状态 code := result["code"].(float64) if code != 0 { msg := result["msg"].(string) return msg, fmt.Errorf("短信发送失败: %s", msg) }
// 返回成功信息 msgID := result["msg_id"].(string) return "短信发送成功,msg_id: " + msgID, nil }
func main() { // 假设的参数值 spID := "5xxxxx" mobile := "176xxxxxxxx" content := "【签名】验证码" + strconv.Itoa(int(time.Now().Unix()%1000000)) password := "xxxxxxxxxxx" // 或者使用signature signature := "" // 如果使用password,则signature为空 ext := "123" // 可选参数
// 调用发送短信函数 result, err := sendSMS(spID, mobile, content, password, signature, &ext) if err != nil { fmt.Println(err) } else { fmt.Println(result) } }
注意:上述代码中md5Hash
函数是一个假设的函数,用于演示如何计算MD5值。在实际应用中,您需要使用Go语言提供的加密库或第三方库来实现MD5计算。
四、运行与测试
在编写完代码后,您可以运行程序并测试发送短信的功能。确保在测试之前已经正确填写了sp_id
、mobile
、password
(或signature
)等参数。如果发送成功,您将在控制台看到“短信发送成功”的提示以及返回的msg_id
;如果发送失败,则会显示相应的错误信息。
package main
import (
"bytes"
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
"net/url"
"strconv"
"time"
)
// 假设的MD5计算函数(需要您自己实现或使用第三方库)
func md5Hash(text string) string {
// 实现MD5计算逻辑...
// 这里只是返回一个示例值
return "example_md5_hash"
}
// 发送短信的函数
func sendSMS(spID, mobile, content, password, signature string, ext *string) (string, error) {
// 设置请求参数
params := url.Values{}
params.Set("sp_id", spID)
params.Set("mobile", mobile)
params.Set("content", content)
// 根据需要选择使用password或signature
if password != "" {
params.Set("password", md5Hash(password))
} else if signature != "" {
params.Set("signature", signature)
}
if ext != nil {
params.Set("ext", *ext)
}
// 发送POST请求
resp, err := http.PostForm("https://api.3yit.com/api/send-sms-single", params)
if err != nil {
return "", err
}
defer resp.Body.Close()
// 读取响应内容
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
return "", err
}
// 解析JSON响应
var result map[string]interface{}
err = json.Unmarshal(body, &result)
if err != nil {
return "", err
}
// 检查响应状态
code := result["code"].(float64)
if code != 0 {
msg := result["msg"].(string)
return msg, fmt.Errorf("短信发送失败: %s", msg)
}
// 返回成功信息
msgID := result["msg_id"].(string)
return "短信发送成功,msg_id: " + msgID, nil
}
func main() {
// 假设的参数值
spID := "5xxxxx"
mobile := "176xxxxxxxx"
content := "【签名】验证码" + strconv.Itoa(int(time.Now().Unix()%1000000))
password := "xxxxxxxxxxx" // 或者使用signature
signature := "" // 如果使用password,则signature为空
ext := "123" // 可选参数
// 调用发送短信函数
result, err := sendSMS(spID, mobile, content, password, signature, &ext)
if err != nil {
fmt.Println(err)
} else {
fmt.Println(result)
}
}