联系我们

邮件:4000-960-717

邮件:service#3yit.com

使用Go语言调用短信接口发送验证码短信教程

Go语言对接验证码短信接口DEMO示例

圆点

使用Go语言调用短信接口发送验证码短信教程(图1)

在开始之前,请确保您已经注册了短信服务提供商(如本例中使用的智慧云信3yit.com),并在其开发者文档中查看了相关接口信息,包括sp_idpassword(或signature)、API地址等。

设置Go开发环境

确保您的计算机上已经安装了Go语言环境,并配置好了GOPATH和GOROOT环境变量。您可以通过在终端中输入go version来检查Go语言是否安装成功。

参数获取

登录智慧云信官网、点击对应的产品,比如【验证码】、在上方的选项卡中选择【开发者】-》【HTTP开发文档】。从文档中可以看到具体API方法名称,以及各个参数key及对应的值vavlue,通常包括sp_idmobilecontentpassword等参数。    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_idmobilepassword(或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)   }   }