阿里云短信服务接入流程
最近公司项目中的业务需求包括使用阿里云发送短信,所以写一篇博客和大家分享一下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错误中心