beego 阿里大鱼短信验证码接口

原创
2016/06/28 14:55
阅读数 3.3K

工作中需要用到短信登录注册验证,所以自己用beego写了个阿里大鱼的短信验证码接口

一、配置,beego的配置文件  conf/app.conf,这些注册阿里大鱼帐号就会分配给你,注册地址:http://www.alidayu.com/

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

二、阿里大鱼的短信发送工具函数,我参照了https://github.com/ltt1987/alidayu这个包写的

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
}

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

func (this *Register) Test() {
	req, err := tools.Send_alidayu("15953163355", "{code:'8558',product:'一点通'}")
	fmt.Println(err)
	this.Ctx.WriteString(req)
}

 

展开阅读全文
加载中
点击加入讨论🔥(1) 发布并加入讨论🔥
打赏
1 评论
7 收藏
1
分享
返回顶部
顶部