beego 阿里大魚短信驗證碼接口

工做中須要用到短信登陸註冊驗證,因此本身用beego寫了個阿里大魚的短信驗證碼接口git

1、配置,beego的配置文件  conf/app.conf,這些註冊阿里大魚賬號就會分配給你,註冊地址:http://www.alidayu.com/github

sms_url=http://gw.api.taobao.com/router/rest
sms_type=normal
sms_AppKey=46745674567
sms_AppSecret=678467456745674567
sms_free_sign_name=一點通
sms_template_code=SMS_11060567

2、阿里大魚的短信發送工具函數,我參照了https://github.com/ltt1987/alidayu這個包寫的json

package tools

import (
	"crypto/md5"
	"github.com/astaxie/beego"
	"github.com/astaxie/beego/httplib"
	"sort"
	"strings"
	"time"

	"fmt"
)

func Send_alidayu(phone, sms_param string) (string, error) {
	sms_url := beego.AppConfig.String("sms_url")
	sms_type := beego.AppConfig.String("sms_type")
	sms_free_sign_name := beego.AppConfig.String("sms_free_sign_name")
	sms_template_code := beego.AppConfig.String("sms_template_code")
	sms_AppKey := beego.AppConfig.String("sms_AppKey")
	sms_AppSecret := beego.AppConfig.String("sms_AppSecret")

	req := httplib.Post(sms_url)

	m := map[string]string{
		"app_key":                     sms_AppKey,
		"timestamp":                   time.Now().Format("2006-01-02 15:04:05"),
		"v":                           "2.0",
		"method":                      "alibaba.aliqin.fc.sms.num.send",
		"partner_id":                  "top-apitools",
		"format":                      "json",
		"sms_type":                    sms_type,
		"rec_num":                     phone,
		"sms_free_sign_name":          sms_free_sign_name,
		"sms_template_code":           sms_template_code,
		"force_sensitive_param_fuzzy": "true",
		"sign_method":                 "md5",
		"sms_param":                   sms_param,
	}

	var keys []string
	for k := range m {
		keys = append(keys, k)
	}

	sort.Strings(keys)

	singString := sms_AppSecret
	for _, k := range keys {
		req.Param(k, m[k])
		singString += k + m[k]
	}
	singString += sms_AppSecret

	signByte := md5.Sum([]byte(singString))
	sign := strings.ToUpper(fmt.Sprintf("%x", signByte))
	req.Param("sign", sign)

	result, err := req.String()
	return result, err
}

3、使用方法,beego的controller中直接使用api

func (this *Register) Test() {
	req, err := tools.Send_alidayu("15953163355", "{code:'8558',product:'一點通'}")
	fmt.Println(err)
	this.Ctx.WriteString(req)
}
相關文章
相關標籤/搜索