短信验证码发送功能的实现可以通过一些平台来进行实现,这里我也使用过一些发送平台进行了测试:
当然这些平台都只是进行测试,允许免费发送短信的条数都有所限制
一、Twillo:
优点:操作简单(傻瓜操作)
缺点:
- twilio是一个国外的平台进入网站费时费力,(毕竟是国外的网站)。
- 注册时对中国的一些邮箱很不友好(例如:QQ), 可以使用Google邮箱注册来注册。
- 短信发送时只能发送给已经经过验证的手机号。
二、云通讯:
优点:稳定,简单;
缺点:短信发送时只能发送给已经经过验证的手机号。
三、Kewail:
优点:可以发送给任何你想发送到的手机号
下面给出使用python语言编写的基于Kewail的短信验证码发送功能的代码:
# -*- coding: utf-8 -*-
"""
平台官网:https://www.kewail.com/
"""
import hashlib
import requests
import time
import random
import datetime
import re
def sms_send_from_Kewail(name, mobile,):
"""
:param name: 标记发送来源的签名
:param mobile: 接受验证码的手机号
短信内容格式:【{name}】您的验证码xxxxxx工作人员不会索取,请勿泄漏。
例如:【中国移动】您的验证码111111工作人员不会索取,请勿泄漏。
:return:
"""
# access_key_ID and Secret_access_key get from www.Kewail.com
access_key_ID = "xxxxx access_key xxxxxx"
secret_access_key = "xxxxxx secret_access_key xxxxxx"
# 验证码
sms_code = "{:0>6}".format(random.randint(0, 999999))
# url
url = "https://live.kewail.com/sms/v1/sendsinglesms?accesskey={0}&random={1}".format(access_key_ID, sms_code)
# 时间戳计算
dt = str(datetime.datetime.now())
dt = re.findall(r"(.*?)\.", dt)
dt = dt[0]
time_unix = int(time.mktime(time.strptime(dt, "%Y-%m-%d %H:%M:%S")))
# sig拼接
sig_not_sha = "secretkey={0}&random={1}&time={2}&mobile={3}".format(
secret_access_key, sms_code, str(time_unix), mobile)
hash = hashlib.sha256()
hash.update(sig_not_sha.encode("utf-8"))
sig = hash.hexdigest()
# json数据
data = {
"tel": {
"nationcode": "86",
"mobile": mobile
},
"type": 0,
"msg": "【{}】您的验证码{}工作人员不会索取,请勿泄漏。".format(name, sms_code),
"sig": sig,
"time": time_unix,
"extend": "",
"ext": "",
}
f = requests.post(url, json=data)
print(f.text)
name = "测试"
mobile = "13535353535"
sms_send_from_Kewail(name, mobile)
如果还有配置上的问题:可参考官方文档:
https://www.kewail.com/doc/index.html