go调用腾讯云短信实现发送短信功能

最近在做短信平台,目前测试了一下腾讯云的短信平台,把目前测试的可行调用的方式记录一下。这篇是通过go实现

一:准备工作

腾讯云短信配置流程:
1.注册腾讯云、实名认证(分个人和企业)、购买套餐(可免费试用)
2.创建应用、创建签名、(这部分按照腾讯云自己的文档配置即可)
3.前往apis,创建腾讯云短信 API
4.阅读api接口文档,了解配置参数,考虑跨域问题。

二:go运行实现

下载包

运行:go get -v -u github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sms
若下载不成功,可以修改一下代理

实现代码

创建配置文件

![在这里插入图片描述](https://img-blog.csdnimg.cn/9ea56f5bccf6473fac081ac469f8f14d.png

实现方法

代码大概如下:

 package SmsTest

import (
	"encoding/json"
	"io/ioutil"
	"net/http"
	"fmt"
	"github.com/tidwall/gjson"
	"gitee.com/Test/internal/utils"
	"github.com/gin-gonic/gin"
	"gitee.com/Test/internal/model/vo"
	"gitee.com/Test/internal/global"
	"github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common"
	"github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors"
	"github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/profile"
	sms "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sms/v20210111"
)

func SendSms(c *gin.Context) {
    
    
	defer utils.Recover(c)
	jsonByte, _ := ioutil.ReadAll(c.Request.Body)
	c_json := string(jsonByte)
	code := gjson.Get(c_json, "PhoneNumber").String()		//前端传递的手机号
	content := gjson.Get(c_json, "Content").String()//前端传递的短信内容

	  // 秘钥 * SecretId、SecretKey 查询: https://console.cloud.tencent.com/cam/capi 
	  credential := common.NewCredential(
		global.AppConfig.Sms.SecretId,	//从上面配置文件读取参数 后面一样
		global.AppConfig.Sms.SecretKey,
	 )
	 /* 非必要步骤:
	  * 实例化一个客户端配置对象 */
	 cpf := profile.NewClientProfile()
	 cpf.HttpProfile.ReqMethod = "POST"
	 /* 域名*/
	 cpf.HttpProfile.Endpoint = global.AppConfig.Sms.Host
	 cpf.SignMethod = "HmacSHA1"
	 // 实例化要请求产品(以sms为例)的client对象
	 client, _ := sms.NewClient(credential, global.AppConfig.Sms.Region, cpf)
	 request := sms.NewSendSmsRequest()
	 // 基本类型的设置:
	 request.SmsSdkAppId = common.StringPtr(global.AppConfig.Sms.SmsSdkAppId)
	 //短信签名内容:
	 request.SignName = common.StringPtr(global.AppConfig.Sms.SignName)
	 // 模板 ID: 
	 request.TemplateId = common.StringPtr(global.AppConfig.Sms.TemplateId)
	 /* 模板参数: */
	 request.TemplateParamSet = common.StringPtrs([]string{
    
    content})
	 /* 下发手机号码,采用 E.164 标准,+[国家或地区码][手机号]
	  * */
	 //request.PhoneNumberSet = common.StringPtrs([]string{"+8615572111129"})
	 request.PhoneNumberSet = common.StringPtrs([]string{
    
    code})
	 
	 /* 用户的 session 内容(无需要可忽略): 可以携带用户侧 ID 等上下文信息,server 会原样返回 */
	 request.SessionContext = common.StringPtr("")
	 /* 短信码号扩展号(无需要可忽略): 默认未开通,如需开通请联系 [腾讯云短信小助手] */
	 request.ExtendCode = common.StringPtr("")
	 request.SenderId = common.StringPtr("")
	 // 通过client对象调用想要访问的接口,需要传入请求对象
	 response, err := client.SendSms(request)
	 // 处理异常
	 if _, ok := err.(*errors.TencentCloudSDKError); ok {
    
    
		// fmt.Printf("An API error has returned: %s", err)
		 c.JSON(http.StatusOK, vo.NewResp(utils.CodeFail, "短信发送失败", err))
		 return
	 }
	 // 非SDK异常,直接失败。实际代码中可以加入其他的处理。
	 if err != nil {
    
    
		 panic(err)
	 }
	 //b, _ := json.Marshal(response.Response)
	 // 打印返回的json字符串
	// fmt.Printf("%s", b)
	 c.JSON(http.StatusOK, vo.NewResp(utils.CodeSuccess, "短信发送成功",response.Response))
}

运行

go run main.go
运行后 通过前端调用api,触发方法即可

猜你喜欢

转载自blog.csdn.net/weixin_43578304/article/details/131088476