python 之阿里云短信服务接入流程短信接口
一.阿里云短信服务流程
1.进入阿里云官网并登陆
2.进入短信服务界面,购买相应的短信套餐
关于短信服务可以查看帮助文档:
3.下载安装python 核心SDK库
其中sdk库有两个版本,建议安装最新版本。
旧版:
pip install aliyun-python-sdk-core
新版:
pip install aliyun-python-sdk-core-v3
4.创建签名
5.创建 AccessKey
想要调用阿里云的api必须要有自己的accesskey,这个是调用接口时候的必填参数。
访问密钥AccessKey(AK)相当于登录密码,只是使用场景不同。AccessKey用于程序方式调用短信服务API,而登录密码用于登录控制台。
AccessKey包括AccessKeyId和AccessKeySecret。
AccessKeyId用于标识用户。
AccessKeySecret是用来验证用户的密钥。AccessKeySecret必须保密。
6.找到相应的短信接口的SDK的python版本
Demo的代码如下:
#!/usr/bin/env python #coding=utf-8 from aliyunsdkcore.client import AcsClient from aliyunsdkcore.request import CommonRequest client = AcsClient('<accessKeyId>', '<accessSecret>', 'cn-hangzhou') 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('QuerySendDetails') request.add_query_param('RegionId', "cn-hangzhou") response = client.do_action(request) # python2: print(response) print(str(response, encoding = 'utf-8'))
二.短信接口代码
1.通过普通程序让demo可以让手机收到短信验证码
这时候需要先改为自己的demo能让自己的手机号接收到短信:
#!/usr/bin/env python # coding=utf-8 from aliyunsdkcore.client import AcsClient from aliyunsdkcore.request import CommonRequest import json def send_sms(template, phone): client = AcsClient('我的AccessKey ID', '我的Access Key Secret', 'default') request = CommonRequest() request.set_accept_format('json') request.set_domain('dysmsapi.aliyuncs.com') request.set_method('POST') request.set_protocol_type('http') # https | http request.set_version('2017-05-25') # set_action_name 这个是选择你调用的接口的名称,如:SendSms,SendBatchSms等 request.set_action_name('SendSms') # request.set_action_name('QuerySendDetails') # 这个参数也是固定的 request.add_query_param('RegionId', "default") # 98A66994-3DF4-4FA5-A33F-CCB36EB599D0 # request.add_query_param('RegionId', "cn-hangzhou") request.add_query_param('PhoneNumbers', phone) # 发给谁 request.add_query_param('SignName', "签名") # 签名 request.add_query_param('TemplateCode', "短信模板编号") # 模板编号 request.add_query_param('TemplateParam', f"{template}") # 发送验证码内容 response = client.do_action_with_exception(request) return response # response = client.do_action(request) # # python2: print(response) # print(str(response, encoding='utf-8')) if __name__ == '__main__': template = { 'code': '556634', } res = send_sms(template, phone=我的手机号) print(str(res, encoding='utf-8')) res_dict = json.loads(res) if res_dict.get('Message') == 'OK' and res_dict.get('Code') == 'OK': print("成功啦") else: print("失败啦")
2.通过接口的方式请求到短信验证码
(1)django框架下的短信接口demo
路由url:/api/user/sms_code/
视图:
写一个post方法的接口:
然后在各种逻辑判断成功后产生验证码,返回短信验证发送结果
下面是相关代码段:
# 生成随机的短信验证码 code = "%06d" % random.randint(0, 999999) template = { 'code': code, } # 第三方短信接口返回成功的一个判断,res为返回结果 res = send_sms(template, phone=mobile_phone) res_dict = json.loads(res) if res_dict.get('Message') == 'OK' and res_dict.get('Code') == 'OK':
将sdk修改为一个公共的调用函数:
from aliyunsdkcore.client import AcsClient from aliyunsdkcore.request import CommonRequest def send_sms(template, phone): client = AcsClient('AccessKey ID', 'Access Key Secret', 'default') # 短信里面的 我的AccessKey ID 我的Access Key Secret request = CommonRequest() request.set_accept_format('json') request.set_domain('dysmsapi.aliyuncs.com') request.set_method('POST') request.set_protocol_type('http') # https | http 注意当项目发布到服务器上需要修改协议 request.set_version('2017-05-25') # set_action_name 这个是选择你调用的接口的名称,如:SendSms,SendBatchSms等 request.set_action_name('SendSms') # request.set_action_name('QuerySendDetails') # 这个参数也是固定的 request.add_query_param('RegionId', "default") # 98A66994-3DF4-4FA5-A33F-CCB36EB599D0 # request.add_query_param('RegionId', "cn-hangzhou") request.add_query_param('PhoneNumbers', phone) # 发给谁 request.add_query_param('SignName', "我的签名") # 签名 request.add_query_param('TemplateCode', "我的短信模板编号") # 模板编号 request.add_query_param('TemplateParam', f"{template}") # 发送验证码内容 response = client.do_action_with_exception(request) return response
最后通过post方法及url进行验证码请求。这样手机可以获取短信。