Pycharm使用阿里云SDK发送短信(超详细+避坑!!)

1. 注册阿里云

访问阿里云官网,进行注册

https://www.aliyun.com/

同时进行实名认证

2. 创建签名

按下列顺序来到阿里云的短信服务

image-20231029231134350

image-20231029231247418

image-20231029231345049

这里自行填入:

  • 签名:就是你发送短信的标签,比如:【签名】您的验证码为:1234,您正在登录,若非本人操作,请勿泄露。

  • 签名来源:我选择的是“测试或学习”(因为我本身也是用来做项目测试用的)

  • 场景说明:也可以说明一下是自己用来学习测试用的。

  • 更多资料:可以不用上传。

image-20231029231440151

提交后等待审核即可,若审核未通过,就看看是什么原因造成的,再重新修改并添加。

3. 创建模板

image-20231029231911946

这里需要等待签名审核通过后再创建模板。

  • 模板类型:选择不同的类型,下面模板内容的提示描述不同。

  • 模板名称:就是简单描述你这个模板是干嘛的,比如上图我创建了两个模板“用户注册”和“登录验证码”,一个就是拿来登录用的,另一个就是拿来注册用的。

  • 模板内容:就是短信具体的内容了,比如我前面举的例子(您的验证码为:1234,您正在登录,若非本人操作,请勿泄露。)注意,【签名】是它自动帮你生成的,不用管。还要注意下面说的变量,看看它提供的变量格式就明白了。

  • 应用场景:就自己填写了,我之前自己创建了一个公众号,就用了公众号的名字。

  • 场景说明:就按照它说明的,写上用来测试账号即可。

image-20231029231952798

创建好后等待审核通过即可。

4. 创建AccessKey

image-20231029232928780

我这里选择的是继续使用AccessKey

image-20231029233054083

image-20231029233201930

创建好后就会显示你的ID和Secret,一定要保存好AccessKey Secret,因为一旦关掉这个后后面就找不到它了。

image-20231029233303887

这样AccessKey就创建好了。

5. API发送测试

提前购买一些短信套餐,新人有折扣挺便宜的,也就几块钱,这里不多说。

image-20231029233554117

就是在这个页面往上拉一点就能看到“购买国内套餐包”。

image-20231029233730491

点击“调用API发送短信”后来到这个页面

image-20231029233925841

直接点击“发送调用”,它会提示你会产生费用,所以我们最好提前购买好套餐。

image-20231029234244669

然后就可以从手机上看到了

6. 获取示例

测试后我们回到刚刚的网页,按顺序点击

image-20231029234356890

第三个步骤是复制上面的python代码,复制后的代码我放在下面了。

# -*- coding: utf-8 -*-
# This file is auto-generated, don't edit it. Thanks.
import os
import sys

from typing import List

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


class Sample:
    def __init__(self):
        pass

    @staticmethod
    def create_client(
        access_key_id: str,
        access_key_secret: str,
    ) -> Dysmsapi20170525Client:
        """
        使用AK&SK初始化账号Client
        @param access_key_id:
        @param access_key_secret:
        @return: Client
        @throws Exception
        """
        config = open_api_models.Config(
            # 必填,您的 AccessKey ID,
            access_key_id=access_key_id,
            # 必填,您的 AccessKey Secret,
            access_key_secret=access_key_secret
        )
        # Endpoint 请参考 https://api.aliyun.com/product/Dysmsapi
        config.endpoint = f'dysmsapi.aliyuncs.com'
        return Dysmsapi20170525Client(config)

    @staticmethod
    def main(
        args: List[str],
    ) -> None:
        # 请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID 和 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
        # 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例使用环境变量获取 AccessKey 的方式进行调用,仅供参考,建议使用更安全的 STS 方式,更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/378659.html
        client = Sample.create_client(os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'], os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET'])
        send_sms_request = dysmsapi_20170525_models.SendSmsRequest(
            sign_name='零贰IT',
            template_code='SMS_463629337',
            phone_numbers='15723267119',
            template_param='{"code":"1234"}'
        )
        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)

    @staticmethod
    async def main_async(
        args: List[str],
    ) -> None:
        # 请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID 和 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
        # 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例使用环境变量获取 AccessKey 的方式进行调用,仅供参考,建议使用更安全的 STS 方式,更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/378659.html
        client = Sample.create_client(os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'], os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET'])
        send_sms_request = dysmsapi_20170525_models.SendSmsRequest(
            sign_name='零贰IT',
            template_code='SMS_463629337',
            phone_numbers='15723267119',
            template_param='{"code":"1234"}'
        )
        runtime = util_models.RuntimeOptions()
        try:
            # 复制代码运行请自行打印 API 的返回值
            await client.send_sms_with_options_async(send_sms_request, runtime)
        except Exception as error:
            # 如有需要,请打印 error
            UtilClient.assert_as_string(error.message)


if __name__ == '__main__':
    Sample.main(sys.argv[1:])

7. pycharm发送验证码

7.1 安装sdk

打开pycharm,新建一个py文件,将刚刚复制的代码粘贴上去

image-20231029234603245

此时可以看到有很多报错,这是因为我们还没有安装sdk。下面进行安装

直接pip install的话很多会报错,而且速度比较慢,这里用清华镜像源安装。

pip install alibabacloud_dysmsapi20170525 -i https://pypi.tuna.tsinghua.edu.cn/simple

pip install alibabacloud_tea_openapi -i https://pypi.tuna.tsinghua.edu.cn/simple

pip install alibabacloud_tea_util -i https://pypi.tuna.tsinghua.edu.cn/simple

安装了前两个后发现第三个也不是非要安装0.0,所以我们安装前两个就好。

7.2 参数修改

image-20231029235450896

注意,不止这一处的代码需要修改,下面的代码也有这样的参数需要修改。

修改好后运行就能发送验证码了。

7.3 发送随机四位数字

添加如下代码即可:

image-20231029235706101

image-20231030000527990

7.4 验证码信息返回

在main函数里将send_sms_request返回即可

image-20231030000011893

7.5 简易版代码:

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(1000, 9999)

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('AccessKey ID', 'AccessKey Secret')
    send_sms_request = dysmsapi_20170525_models.SendSmsRequest(
        sign_name='签名,
        template_code='模板号',
        phone_numbers='手机号',
        # 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())
  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值