2401_83940696 2024-07-23 17:00 采纳率: 2.1%
浏览 7
已结题

阿里短信验证如何替换腾讯云短信验证?

以下是我的代码,我之前用的是腾讯云➕ajax实现给手机发送验证码,但我现在想更换成阿里云的,我应该如何更改?
阿里云短信验证代码

from alibabacloud_dysmsapi20170525.client import Client as Dysmsapi20170525Client
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_dysmsapi20170525 import models as dysmsapi_20170525_models
from alibabacloud_tea_util import models as util_models
from alibabacloud_tea_util.client import Client as UtilClient

import random

code = random.randrange(100000, 999999)


def create_client(access_key_id, access_key_secret):
    config = open_api_models.Config(
        access_key_id=access_key_id,
        access_key_secret=access_key_secret
    )
    config.endpoint = f'dysmsapi.aliyuncs.com'
    return Dysmsapi20170525Client(config)


def send_sms():
    client = create_client('LTAI5tBxR8DkU1BKW39QsiLK', 'TEjXlIqcV31dBwwW8gHqUA6xVSr4DO')
    send_sms_request = dysmsapi_20170525_models.SendSmsRequest(
        sign_name='Python图书管理',
        template_code='    SMS_470245020',
        phone_numbers='15293926739',
        # template_param='{"code":"4567"}'
        template_param='{"code":"' + str(code) + '"}'
    )
    runtime = util_models.RuntimeOptions()
    try:
        # 复制代码运行请自行打印 API 的返回值
        client.send_sms_with_options(send_sms_request, runtime)
    except Exception as error:
        # 如有需要,请打印 error
        UtilClient.assert_as_string(error.message)
    return send_sms_request


print(send_sms())


之前的腾讯云代码

def send_sms_single(phone_num, template_id, template_param_list):
    """
    单条发送短信
    :param phone_num:手机号
    :param template_id:腾讯云短信模板ID
    :param template_param_list:短信模板所需参数列表,例如【验证码:{1},描述:{2},则传递参数】
    :return:
    """
    appid = settings.TENCENT_SMS_APP_ID  # 自己应用ID
    appkey = settings.TENCENT_SMS_APP_KEY  # 自己应用key
    sms_sign = settings.TENCENT_SMS_SIGN  # 自己腾讯云创建签名时填写的签名内容
    sender = SmsSingleSender(appid, appkey)
    try:
        response = sender.send_with_param(86, phone_num, template_id, template_param_list, sign=sms_sign)
    except HTTPError as e:
        print(e)
        response = {'result': 1000, 'errmsg': "网络异常发送失败"}
    return response
class SendSmsForm(forms.Form):
    mobile = forms.CharField(label="手机号", validators=[RegexValidator(r'^(1[3|4|5|6|7|8|9])\d{9}$', '手机号格式错误'), ])

    def __init__(self, request, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.request = request

    def clean_mobile(self):
        """手机号校验的勾子"""
        mobile = self.cleaned_data['mobile']

        # 判断短信模板是否有问题
        tpl = self.request.GET.get('tpl')
        template_id = settings.TENCENT_SMS_TEMPLATE.get(tpl)
        if not template_id:
            raise ValidationError("短信模板错误")

        # 校验数据库中是否已有手机号
        exist = Username.objects.filter(mobile=mobile).exists()
        if exist:
            raise forms.ValidationError('手机号已存在')

        # 发短信 & 写redis
        code = random.randrange(100000, 999999)
        sms = send_sms_single(mobile, template_id, [code, ])
        if sms['result'] != 0:
            raise ValidationError("短信发送失败,{}".format(sms['errmsg']))

        # 验证码写入redis
        conn = get_redis_connection()
        conn.set(mobile, code, ex=60)

        return mobile
def send_sms(request):
    """发送短信"""
    form = SendSmsForm(request, data=request.GET)
    # 校验手机号,不能为空
    if form.is_valid():
        return JsonResponse({'status': True})
    return JsonResponse({'status': False, 'error': form.errors})
# 腾讯云短信应用 app_id
TENCENT_SMS_APP_ID = 1400302209
# 腾讯云短信应用 app_key
TENCENT_SMS_APP_KEY = '8cc5bf076454953306eb668187930004'
# 腾讯云短信签名内容
TENCENT_SMS_SIGN = "Python之路"

TENCENT_SMS_TEMPLATE = {
    'register': 548760,
    'login': 548762
}

  • 写回答

3条回答 默认 最新

  • 阿里嘎多学长 2024-07-23 17:01
    关注

    以下内容由AIGC及阿里嘎多学长共同生成、有用望采纳:


    要将现有的腾讯云短信验证代码替换为阿里云短信验证代码,并确保整个流程的顺利运行,你可以按照以下步骤进行操作:

    1. 替换短信服务提供商

    • 修改配置:将腾讯云的配置信息(如appid, appkey, sign等)替换为阿里云的access_key_idaccess_key_secret
    • 修改发送逻辑:将腾讯云的发送逻辑替换为阿里云的发送逻辑,使用阿里云提供的SDK。

    2. 调整阿里云短信验证代码

    • 参数替换:将示例中的签名名、模板代码、手机号码等参数替换为你应用中的实际参数。
    • 验证码生成:确保验证码生成逻辑正确,并且能够作为参数传递给短信模板。

    3. 确保与前端 AJAX 请求的交互

    • AJAX 触发:确保前端 AJAX 请求能够正确调用后端的短信发送接口。
    • 响应处理:处理 AJAX 请求的响应,确保用户能够收到正确的反馈信息。

    4. 处理短信发送失败的情况

    • 异常处理:在发送短信的代码块中添加异常处理逻辑,捕获并处理可能出现的错误。
    • 错误提示:给用户明确的错误提示,不影响整体体验。

    5. 测试新的短信验证功能

    • 开发环境测试:在开发环境中对新的短信验证功能进行全面测试。
    • 异常测试:测试各种异常情况,确保应用的健壮性。

    6. 部署更新后的代码

    • 代码审查:在部署前进行代码审查,确保没有遗漏或错误。
    • 逐步部署:如果可能,使用蓝绿部署或金丝雀部署策略,逐步将新代码推向生产环境。

    7. 监控和维护短信验证功能

    • 使用监控工具:使用适当的监控工具来监控短信服务的使用情况和性能。
    • 定期检查:定期检查短信服务的配置和状态,确保服务始终处于最佳工作状态。

    示例代码调整

    以下是一些示例代码的调整,以适应你的应用:

    # 阿里云短信验证代码示例
    def send_sms():
        # 假设你已经有了一个生成随机验证码的函数 generate_code()
        code = generate_code()  # 调用生成验证码的函数
        
        # 创建阿里云短信服务客户端
        client = create_client('你的AccessKeyId', '你的AccessKeySecret')
        
        # 构建发送短信请求
        send_sms_request = dysmsapi_20170525_models.SendSmsRequest(
            sign_name='你的签名名',
            template_code='你的模板代码',
            phone_numbers='接收方手机号码',
            template_param='{"code":"' + str(code) + '"}'
        )
        
        try:
            # 发送短信
            client.send_sms_with_options(send_sms_request, runtime)
            return {'status': True, 'message': '短信发送成功'}
        except Exception as e:
            # 错误处理
            return {'status': False, 'message': str(e)}
    
    # 前端 AJAX 请求处理
    # 确保你的前端 AJAX 请求调用了正确的后端接口,并处理响应
    

    请注意,这只是一个示例,你需要根据你的具体应用逻辑和需求进行调整。同时,确保在部署新代码前进行充分的测试。

    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 7月23日
  • 创建了问题 7月23日

悬赏问题

  • ¥15 如何解除Uniaccess管控
  • ¥15 微信小程序跳转关联公众号
  • ¥15 Java AES 算法 加密采用24位向量报错如何处理?
  • ¥15 使用X11可以找到托盘句柄,监控到窗口点击事件但是如何在监听的同时获取托盘中应用的上下文菜单句柄
  • ¥45 字符串操作——数组越界问题
  • ¥15 Loss下降到0.08时不在下降调整学习率也没用
  • ¥15 QT+FFmpeg使用GPU加速解码
  • ¥15 为什么投影机用酷喵播放电影放一段时间就播放不下去了?提示发生未知故障,有什么解决办法吗?
  • ¥15 来个会搭建付费网站的有偿
  • ¥100 有能够实现人机模式的c/c++代码,有图片背景等,能够直接进行游戏