• [Python]实现短信验证码的发送



    前言

    系列文章目录
    [Python]目录



    1. 短信API平台

    使用的短信API平台为:容联云(https://www.yuntongxun.com/)

    开发者文档:http://doc.yuntongxun.com/pe/5a531a353b8496dd00dcdfe2

    2. 使用官方提供的SDK实现短信发送

    Python SDK 文档

    Python SDK GitHub地址

    2.1 安装SDK

    pip install ronglian-sms-sdk -i https://pypi.tuna.tsinghua.edu.cn/simple
    
    • 1

    在这里插入图片描述

    2.2 使用官方的测试用例进行测试

    from ronglian_sms_sdk import SmsSDK
    
    # accId = '容联云通讯分配的主账号ID'
    accId = '...'
    # accToken = '容联云通讯分配的主账号TOKEN'
    accToken = '...'
    # appId = '容联云通讯分配的应用ID'
    appId = '...'
    
    
    # 发送短信验证码
    def send_message():
    	# 初始化获取发送短信的对象
        sdk = SmsSDK(accId, accToken, appId)
        # tid = '容联云通讯平台创建的模板' 默认模板的编号为1
        tid = '1'  # tid的数据类型为str
        # mobile = '手机号1,手机号2' 多个手机号在字符串中使用 , 进行分隔
        mobile = '...'
        # 第一个参数为验证码 第二个参数为验证码的有效时间(对于短信模板1)
        datas = ('123456', 5)
        # 发送短信并接收返回结果
        resp = sdk.sendMessage(tid, mobile, datas)
        print(resp)
    
    
    # 测试
    if __name__ == '__main__':
        send_message()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    返回的结果为json类型的字符串。

    在这里插入图片描述

    请添加图片描述

    2.3 参数及其参数的查看

    初始化方法

    在这里插入图片描述
    在这里插入图片描述

    调用发送短信方法

    在这里插入图片描述

    短信模板:
    默认短信模板的tid为1

    至于其他的模板
    在这里插入图片描述

    发送手机号:

    如果没有认证,测试环境下需要设置短信能够发送的测试手机号

    在这里插入图片描述

    响应参数

    返回的为json类型的字符串

    在这里插入图片描述

    3. 单例模式实现短信发送

    由于每次要发送短信都需要向实例化一个对象,当发送短信的并发数太大时,会对内存造成较大的压力,所以修改为采用单例模式实现。

    from ronglian_sms_sdk import SmsSDK
    import json
    
    
    # accId = '容联云通讯分配的主账号ID'
    accId = '...'
    # accToken = '容联云通讯分配的主账号TOKEN'
    accToken = '...'
    # appId = '容联云通讯分配的应用ID'
    appId = '...'
    
    
    class SendSmsVerificationCode:
        """发送短信验证码的单例类"""
    
        def __new__(cls, *args, **kwargs):
            """
            发送短信验证码单例类的初始化方法
            :return: 返回一个发送短信验证码的对象
            """
            # 判断类中发送短信验证码的对象 _instance 是否已经存在
            # 如果不存在, 创建一个发送短信验证码的对象, 并将其作为类属性
            if not hasattr(cls, '_instance'):
                # 创建发送短信验证码的对象
                cls._instance = super(SendSmsVerificationCode, cls).__new__(cls, *args, **kwargs)
                # 创建SmsSDK对象作为 _instance 的对象属性
                cls._instance.sdk = SmsSDK(accId, accToken, appId)
            # 如果存在, 返回发送短信验证码的对象
            return cls._instance
    
        def send_message(self, mobile, datas, tid='1'):
            """
            发送短信的方法
            @params mobile 字符串类型  mobile = '手机号1,手机号2'
            @params tid tid = '容联云通讯平台创建的模板' 默认模板的编号为1
            @params datas 元组类型  第一个参数为验证码 第二个参数为验证码的有效时间(对于短信模板1)
            :return: 返回发送短信后的响应参数
            """
            # 发送短信
            resp = self.sdk.sendMessage(tid, mobile, datas)
            print(json.loads(resp), type(json.loads(resp)))
            return resp
    
    
    # 测试
    if __name__ == '__main__':
        sendSmsVerificationCode1 = SendSmsVerificationCode()
        sendSmsVerificationCode2 = SendSmsVerificationCode()
        sendSmsVerificationCode3 = SendSmsVerificationCode()
        print(sendSmsVerificationCode1)
        print(sendSmsVerificationCode2)
        print(sendSmsVerificationCode3)
        res = sendSmsVerificationCode1.send_message('...', ('123456', 5), '1')
        print(res)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54

    在这里插入图片描述

  • 相关阅读:
    Java 函数式编程「一」
    科技视界杂志科技视界杂志社科技视界编辑部2022年第21期目录
    PDF文件格式(二):交叉引用类型“O“
    【Graph】NetworkX官方基础教程
    Redis实战案例及问题分析之-附近商铺(GEO数据结构)-用户签到(BitMap)-UV统计(HyperLogLog)
    记录每天从早上到凌晨学习的假期
    android插件开发
    传统加密技术(恺撒+仿射)
    iOS系统文件备份与还原:保护和管理手机中的关键数据
    数据库-MySQL-基础(5)- DQL
  • 原文地址:https://blog.csdn.net/m0_53022813/article/details/127833471