python 阿里云短信服务接入流程

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_43193386/article/details/100286796

阿里云短信服务接入流程

最近公司项目中的业务需求包括使用阿里云发送短信,所以写一篇博客和大家分享一下python使用sdk对接阿里云短息api的流程。

阿里云官方文档

链接
在这里插入图片描述
左侧导航栏中有很多部分,着重看api参考和sdk参考即可
在这里插入图片描述
在这里插入图片描述

首先要下载安装python 核心SDK库

其中sdk库有两个版本,建议安装最新版本。
旧版:

pip install aliyun-python-sdk-core

新版:

pip install aliyun-python-sdk-core-v3

以上安装一个即可(我安装的是新版),因为还有别的需求我还安装了一个依赖包

pip install  aliyun-python-sdk-ecs

安装完成后,本地的准备环境就算搭好了。

创建 AccessKey

想要调用阿里云的api必须要有自己的accesskey,这个是调用接口时候的必填参数。
访问密钥AccessKey(AK)相当于登录密码,只是使用场景不同。AccessKey用于程序方式调用短信服务API,而登录密码用于登录控制台。
AccessKey包括AccessKeyId和AccessKeySecret。
AccessKeyId用于标识用户。
AccessKeySecret是用来验证用户的密钥。AccessKeySecret必须保密。
创建连接
按照步骤去创建即可。

创建签名和模板

点击右上角登录,之后点击控制台
在这里插入图片描述
找到短信服务,点击进入
在这里插入图片描述
在这里插入图片描述
点击国内消息,你可以看到签名管理和模板管理。然后添加签名和模板,签名就是你发的短信上面会写上xxx,xxx为你的签名,主要起到一个标记的作用 ,模板为你短信息的格式。一般会在2个小时内审核。这是手动添加的签名和模板,也可以直接调用阿里云api添加模板。在这里插入图片描述
这里我先不做解释,后面会统一解释。

发送短信

点击api参考中的sendsms,这是一个类似于接口文档的东西,上面有请求参数,返回的参数,都有详细的说明。点击调试填写好相关参数你会得到一个python的代码
在这里插入图片描述以下是我的代码:

from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.request import CommonRequest

def send_sms(template):
    # client = AcsClient('<accessKeyId>', '<accessSecret>', 'default')
    client = AcsClient('你的accessKeyId', '你的accessSecret', 'default')
    request = CommonRequest()
    request.set_accept_format('json')
    request.set_domain('dysmsapi.aliyuncs.com')
    request.set_method('POST')
    request.set_protocol_type('https')  # https | http
    request.set_version('2017-05-25')
    # 以上部分是公用的不变
    request.set_action_name('SendSms')
    # set_action_name 这个是选择你调用的接口的名称,如:SendSms,SendBatchSms等
    request.add_query_param('RegionId', "default")
    # 这个参数也是固定的
    
    request.add_query_param('PhoneNumbers', "13222222222") # 发给谁
    request.add_query_param('SignName', "博客") # 签名
    request.add_query_param('TemplateCode', "SMS_111111111") # 模板编号
    request.add_query_param('TemplateParam', f"{template}") # 发送验证码内容
    response = client.do_action_with_exception(request)
    print(str(response, encoding='utf-8'))

if __name__ == '__main__':
    template = {
        'code':'88888',
    }
    send_sms(template) 

因为上面的很多东西是固定的,所以我简单的修改了一下,做的更通用一些

def aliyun_send_sms_common_api(action, query_param_dict):
    """
    阿里云短信服务公用接口
    :param action: 指明短信相关的哪些接口
    :param query_param_dict: 短信相关接口的参数(字典形式)
    :return:
    """
    # client = AcsClient('<accessKeyId>', '<accessSecret>', 'default')
    client = AcsClient(ACCESSKEYID, ACCESSSECRET, "default")
    request = CommonRequest()
    request.set_accept_format('json')
    request.set_domain('dysmsapi.aliyuncs.com')
    request.set_method('POST')
    request.set_protocol_type('https')  # https | http
    request.set_version('2017-05-25')
    request.set_action_name(action)
    request.add_query_param('RegionId', "default")
    for k, v in query_param_dict.items():
        if type(v) == "enum":
            return
        request.add_query_param(k, v)
    response = client.do_action_with_exception(request)
    response = str(response, encoding='utf-8')
    return response
if __name__ == "__main__":
	action = "你要调用的接口名称"
	query_param_dict = {
		"PhoneNumbers":"13222222222"
	} # 接口中需要的参数,注意字典中的key要和接口文档中的一样,不能忽略大小写
	response = aliyun_send_sms_common_api(action, query_param_dict)
	print(response)

发送短信

在这里插入图片描述
成功之后返回的结果,手机上也发收到了,如果报错了,或者返回的message不是ok,那么可以到api错误中心查看相应的错误信息
api错误中心

注意:发送短信是花钱的所以发短信之前一定确保阿里云账户中心余额充足,其他的接口,只是set_action_name和一些必要参数不一样,其他都一样的。

有不足之处,还请大家在评论区多多指教,我会第一时间回复。

猜你喜欢

转载自blog.csdn.net/qq_43193386/article/details/100286796