本文最后更新于24 天前,其中的信息可能已经过时,如有错误请发送邮件到big_fw@foxmail.com
作为一名个人开发者,想要给个人的网站等添加短信验证码登录和认证往往会遇到企业资质这一问题,但是基于阿里云的短信认证服务,无需申请企业资质,签名和模板,只需个人实名认证用户就可以直接调用api发送和校验验证码(发送和校验均通过阿里云服务器),用于个人项目登录、注册功能十分方便。
首先,我们需要一个个人实名的阿里云账号。然后打开阿里云免费试用 – 阿里云,勾选左侧菜单栏的企业服务与云通信,找到融合认证服务可以领取100次的试用。

打开阿里云短信认证页面号码认证服务控制台。

点击左下角的调用api测试短信认证服务。即可进入到api测试界面。

在该区域即可直接测试短信验证码的发送和校验功能。如需在项目中使用短信认证功能,点击右侧的sdk示例,阿里云在这里给出了各种语言的代码示例。

这里博主使用python写一个发送短信代码示例。
# -*- coding: utf-8 -*-
import os
import sys
import json
from dotenv import load_dotenv
from typing import List
from alibabacloud_dypnsapi20170525.client import Client as Dypnsapi20170525Client
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_dypnsapi20170525 import models as dypnsapi_20170525_models
from alibabacloud_tea_util import models as util_models
from alibabacloud_tea_util.client import Client as UtilClient
load_dotenv()
access_key_id = os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_ID')
access_key_secret = os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_SECRET')
if not access_key_id or not access_key_secret:
raise ValueError('请在 .env 文件中设置 ALIBABA_CLOUD_ACCESS_KEY_ID 和 ALIBABA_CLOUD_ACCESS_KEY_SECRET')
class Sample:
def __init__(self):
pass
@staticmethod
def create_client() -> Dypnsapi20170525Client:
"""
使用凭据初始化账号Client
@return: Client
@throws Exception
"""
config = open_api_models.Config(
access_key_id=access_key_id,
access_key_secret=access_key_secret
)
# Endpoint 请参考 https://api.aliyun.com/product/Dypnsapi
config.endpoint = f'dypnsapi.aliyuncs.com'
return Dypnsapi20170525Client(config)
@staticmethod
def send_sms_verify_code(
phone_number: str,
args: List[str],
) -> None:
client = Sample.create_client()
send_sms_verify_code_request = dypnsapi_20170525_models.SendSmsVerifyCodeRequest(
sign_name='速通互联验证码',
template_code='100001',
phone_number=phone_number,
template_param='{"code":"##code##","min":"5"}'
)
runtime = util_models.RuntimeOptions()
try:
resp = client.send_sms_verify_code_with_options(send_sms_verify_code_request, runtime)
print(json.dumps(resp, default=str, indent=2))
except Exception as error:
# 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
# 错误 message
print(error.message)
# 诊断地址
print(error.data.get("Recommend"))
@staticmethod
async def send_sms_verify_code_async(
phone_number: str
) -> None:
client = Sample.create_client()
send_sms_verify_code_request = dypnsapi_20170525_models.SendSmsVerifyCodeRequest(
sign_name='速通互联验证码',
template_code='100001',
phone_number=phone_number,
template_param='{"code":"##code##","min":"5"}'
)
runtime = util_models.RuntimeOptions()
try:
resp = await client.send_sms_verify_code_with_options_async(send_sms_verify_code_request, runtime)
print(json.dumps(resp, default=str, indent=2))
except Exception as error:
# 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
# 错误 message
print(error.message)
# 诊断地址
print(error.data.get("Recommend"))
校验验证码示例
# -*- coding: utf-8 -*-
import os
import sys
import json
from dotenv import load_dotenv
from typing import List
from alibabacloud_dypnsapi20170525.client import Client as Dypnsapi20170525Client
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_dypnsapi20170525 import models as dypnsapi_20170525_models
from alibabacloud_tea_util import models as util_models
from alibabacloud_tea_util.client import Client as UtilClient
load_dotenv()
access_key_id = os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_ID')
access_key_secret = os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_SECRET')
if not access_key_id or not access_key_secret:
raise ValueError('请在 .env 文件中设置 ALIBABA_CLOUD_ACCESS_KEY_ID 和 ALIBABA_CLOUD_ACCESS_KEY_SECRET')
class Sample:
def __init__(self):
pass
@staticmethod
def create_client() -> Dypnsapi20170525Client:
"""
使用凭据初始化账号Client
@return: Client
@throws Exception
"""
config = open_api_models.Config(
access_key_id=access_key_id,
access_key_secret=access_key_secret
)
# Endpoint 请参考 https://api.aliyun.com/product/Dypnsapi
config.endpoint = f'dypnsapi.aliyuncs.com'
return Dypnsapi20170525Client(config)
@staticmethod
def main(
phone_number: str,
verify_code: str
) -> None:
client = Sample.create_client()
check_sms_verify_code_request = dypnsapi_20170525_models.CheckSmsVerifyCodeRequest(
phone_number=phone_number,
verify_code=verify_code
)
runtime = util_models.RuntimeOptions()
try:
resp = client.check_sms_verify_code_with_options(check_sms_verify_code_request, runtime)
print(json.dumps(resp, default=str, indent=2))
except Exception as error:
# 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
# 错误 message
print(error.message)
# 诊断地址
print(error.data.get("Recommend"))
@staticmethod
async def main_async(
phone_number: str,
verify_code: str,
) -> None:
client = Sample.create_client()
check_sms_verify_code_request = dypnsapi_20170525_models.CheckSmsVerifyCodeRequest(
phone_number=phone_number,
verify_code=verify_code
)
runtime = util_models.RuntimeOptions()
try:
resp = await client.check_sms_verify_code_with_options_async(check_sms_verify_code_request, runtime)
print(json.dumps(resp, default=str, indent=2))
except Exception as error:
# 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
# 错误 message
print(error.message)
# 诊断地址
print(error.data.get("Recommend"))
#.env
ALIBABA_CLOUD_ACCESS_KEY_ID = "你的阿里云ACCESS_KEY_ID"
ALIBABA_CLOUD_ACCESS_KEY_SECRET = "你的阿里云ACCESS_KEY_SECRET"
这里博主使用阿里云ram账户仅给与了该账户短信认证的权限。具体的配置可以查看阿里云的sdk文档云通信号码认证服务_SDK中心-阿里云OpenAPI开发者门户 这里使用切记不要使用阿里云主账号的KEY进行操作。
