关于“python实现发送和获取手机短信验证码”的完整攻略,大致可以分为以下几个步骤:
-
选择短信平台及API。目前市面上有很多短信平台提供API接口,选择一个稳定可靠的短信平台,可以根据自己的需要选择不同的套餐、价格、支持的国内外地区等。这个可以看自己的需求和具体情况进行选择。常用的短信平台有阿里云、腾讯云、华信等。
-
在短信平台上申请账号,获取API接口的相关参数。一般来说,在短信平台上注册账号,申请使用API接口的权限,然后获得一些必要的参数和密钥(如accessKeyId/accessKeySecret、appId、appSecret等),这些参数都是调用API接口时需要传入的。
-
通过python代码调用短信平台提供的API接口。Python中有很多第三方库可以用来调用API接口,例如
requests
、http.client
、urllib
等。通过这些库,可以构造请求接口所需要的参数和密钥,调用API接口实现短信的发送和接收。 -
对于接收验证码的情况,需要进行短信的解析。一般情况下,短信平台返回的结果是一个JSON格式的数据,需要进行解析,获取其中的验证码。
接下来,我分别通过一个阿里云和一个腾讯云的API来演示如何实现短信的收发:
阿里云API实现短信发送
第一步:申请短信发送服务
阿里云提供了免费的短信服务试用,可以在其官网申请进行体验,得到以下必要的参数:
- accessKeyId/accessKeySecret:阿里云账号的ID和密钥对,可以从阿里云控制台中申请;
- signName:短信签名,需要在阿里云短信服务中申请;
- templateCode:短信模板ID,需要在阿里云短信服务中申请。
第二步:通过Python发送短信
import requests
import json
url = 'https://dysmsapi.aliyuncs.com/'
accessKeyId = 'your_accessKeyId'
accessKeySecret = 'your_accessKeySecret'
params = {
'RegionId': 'cn-hangzhou',
'AccessKeyId': accessKeyId,
'Format': 'JSON',
'SignatureMethod': 'HMAC-SHA1',
'SignatureVersion': '1.0',
'SignatureNonce': '123456',
'Timestamp': '20200222133530',
'Action': 'SendSms',
'Version': '2017-05-25',
'PhoneNumbers': 'your_phone_number',
'SignName': 'your_sign_name',
'TemplateCode': 'your_template_code',
'TemplateParam': json.dumps({'code': '123456'})
}
sorted_params = sorted(params.items(), key=lambda x: x[0])
query_string = '&'.join([f'{key}={value}' for key, value in sorted_params])
to_sign = f'GET&%2F&{query_string}'
signature = hmac_sha1(to_sign.encode(), accessKeySecret.encode())
params['Signature'] = signature
response = requests.get(url, params=params)
print(response.json())
第三步:解析短信的返回值
import json
response_json = {
"Message": "OK",
"RequestId": "099C4463-D64D-4B1A-AC43-3D40874CFF17",
"BizId": "163669153669716526^0",
"Code": "OK"
}
assert response_json['Message'] == 'OK'
assert response_json['Code'] == 'OK'
腾讯云API实现短信发送
第一步:申请短信发送服务
腾讯云短信服务同样提供了API接口,可以在其官网上申请,得到以下必要的参数:
- App ID:短信服务的APP ID;
- App Key:短信服务的APP Key;
- 短信签名:需要在腾讯云平台中申请;
- 短信模板ID:需要在腾讯云平台中申请。
第二步:通过Python发送短信
import requests
from urllib.parse import quote
import json
import time
url = 'https://yun.tim.qq.com/v5/tlssmssvr/sendsms'
appid = 'your_appid'
appkey = 'your_appkey'
sign = 'your_sign'
template_id = 'your_template_id'
params = {
'tel': {'nationcode': '86', 'mobile': 'your_phone_number'},
'sig': '',
'tpl_id': template_id,
'params': ['your_verification_code'],
'sign': sign,
'time': int(time.time()),
'extend': '',
'ext': ''
}
params_str = '&'.join([f'{k}={quote(str(params[k]))}' for k in sorted(params.keys())])
raw_sig = f'POSTyun.tim.qq.com/v5/tlssmssvr/sendsms?{params_str}'.encode()
sig = hmac_sha256(raw_sig, appkey.encode())
params['sig'] = sig
headers = {'Content-Type': 'application/json'}
response = requests.post(url, headers=headers, data=json.dumps(params))
print(response.json())
第三步:解析短信的返回值
response_json = {
"result": 0,
"errmsg": "OK",
"ext": "",
"sid": "your_sid",
"fee": 1
}
assert response_json['result'] == 0
assert response_json['errmsg'] == 'OK'
以上是通过阿里云和腾讯云API实现短信收发的Python示例。根据不同的短信平台和API接口,大体的逻辑和步骤都是类似的。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python实现发送和获取手机短信验证码 - Python技术站