zoukankan      html  css  js  c++  java
  • 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进行验证码请求。这样手机可以获取短信。

  • 相关阅读:
    Java实现调用API识别图像中的文字并对图片重命名
    推荐大家一个人工智能领域安全信息学方向旗舰会议(EI索引),诚邀广大学子投稿!
    python随笔 1
    Neo4j
    Web项目部署到tomcat外部并配置其他端口访问和无项目名
    springboot项目
    解决找不到参数 问题,MyBatisSystemException
    置顶功能 -- 数据表格的某行数据的置顶功能 -- Demo
    Spring-Task定时任务, (springboot项目, 动态设置时间) -- Demo
    BootStrap-table表格 -- Demo
  • 原文地址:https://www.cnblogs.com/hszstudypy/p/12721582.html
Copyright © 2011-2022 走看看