Golang 中国

在做注册通过手机收验证码,找了一圈短信服务商,API都木有Golang代码示例,求前辈推荐服务商和相关开源代码,谢谢!

9 回复
jimmykuu
#1 jimmykuu • 2015-08-21 17:40

右侧的『容联·云通讯』就可以,不过官方没提供,自己写也就五六十行代码。

这是我们的,你参考下:

// 云通讯短信请求
type ReqBody struct {
    To         string   `json:"to"`
    AppId      string   `json:"appId"`
    TemplateId string   `json:"templateId"`
    Datas      []string `json:"datas,omitempty"`
}

// 构建云通讯短信请求
func newSmsRequest(mobile, verifyCode string) *http.Request {
    now := time.Now().Format("20060102150405")
    sigParameter := calcSigParameter(now)

    url := fmt.Sprintf("%s/2013-12-26/Accounts/%s/SMS/TemplateSMS?sig=%s", baseUrl, accountSid, sigParameter)

    b, _ := json.Marshal(ReqBody{
        To:         mobile,
        AppId:      appId,
        TemplateId: "1",
        Datas:      []string{verifyCode, "10"},
    })

    request, _ := http.NewRequest("POST", url, bytes.NewReader(b))
    request.Header.Set("Accept", "application/json")
    request.Header.Set("Content-Type", "application/json; charset=utf-8")
    request.Header.Set("Content-Length", fmt.Sprintf("%d", len(b)))
    request.Header.Set("Authorization", calcAuthorization(now))

    return request
}

func calcSigParameter(now string) string {
    h := md5.New()
    io.WriteString(h, accountSid+authToken+now)
    sign := fmt.Sprintf("%x", h.Sum(nil))

    return strings.ToUpper(sign)
}

func calcAuthorization(now string) string {
    return base64.StdEncoding.EncodeToString([]byte(accountSid + ":" + now))
}

// 云通讯响应
type RespBody struct {
    StatusMsg   string      `json:"statusMsg"`
    StatusCode  string      `json:"statusCode"`
    TemplateSMS interface{} `json:"TemplateSMS"`
}

// 解析云通讯响应
func parseSmsResp(resp *http.Response) (RespBody, error) {
    var data RespBody
    body, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        return data, err
    }

    err = json.Unmarshal(body, &data)
    if err != nil {
        return data, err
    }

    return data, nil
}

使用:

// 发送短信
    request := newSmsRequest("13488888888", "123456")

    client := &http.Client{}
    resp, err := client.Do(request)
    if err != nil {
        // 处理错误
    }
    defer resp.Body.Close()

    data, err := parseSmsResp(resp)
    if err != nil || data.StatusCode != "000000" {
        // 处理错误
    }
yue
#2 yue • 2015-08-21 17:47

太赞了,非常感谢站长的无私代码,这就去注册!谢谢!


可惜不适合个人:

若使用短信则开发者类型一定要选择公司

transtone
#3 transtone • 2015-10-22 20:08

老大发代码不发全,
: undefined: baseUrl
: undefined: appId
: undefined: accountSid
: undefined: authToken

===============
不是说自己配很难,只是说有不完美的地方。

当然了,确实挺赞的,可以申请放入云通信的SDK中去。

jimmykuu
#4 jimmykuu • 2015-10-22 20:18

这些变量自定义一下就可以了,都是云通讯的配置参数。

jlj000
#5 jlj000 • 2016-12-08 09:53

谁说没有啊,我现在用的就有GO的sdk下载包啊,是第三方平台啊。平台叫submail,中文名称叫赛邮这是官网,你自己看http://submail.cn/

jlj000
#6 jlj000 • 2016-12-08 10:18

不好意思,看错楼主的意思了,是要代码示例吧。submail上有的,具体链接http://submail.cn/sms

xj2532
#7 xj2532 • 2017-11-30 12:26

赛邮云通信支持go代码。SUBMAIL GO SDK

下载
SUBMAIL_GO_SDK_MAIL_AND_MESSAGE_WITH_ADDRESSBOOK

邮件、短信和地址薄

下载

chuanlong
#8 chuanlong • 2017-11-30 16:54

我一直用submail 短信平台,用的效果很不错,而且也有go语言,建议你去看一下。

xfstart07
#9 xfstart07 • 2017-12-01 17:24

之前写过一个发送短信的,希望有帮助

包括 云片,短信宝,螺丝帽

https://github.com/xfstart07/gosms

需要 登录 后方可回复, 如果你还没有账号你可以 注册 一个帐号。