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必须保密。

创建AccessKey教程

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进行验证码请求。这样手机可以获取短信。

猜你喜欢

转载自www.cnblogs.com/hszstudypy/p/12721582.html