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


前言

系列文章目录


1. 短信API平台

使用的短信API平台为:

开发者文档:

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

2.1 安装SDK

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

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()
返回的结果为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)
经验分享 程序员 微信小程序 职场和发展