利用 容联云 做一个短信组件
# encoding:utf-8
import base64
import json
import requests
import hashlib
import random
from datetime import datetime, timedelta
class SortMessage:
base_url = "https://app.cloopen.com:8883/2013-12-26/Accounts/{accountSid}/SMS/TemplateSMS?sig={SigParameter}"
headers = {
'Accept': 'application/json',
'Content-Type': 'application/json;charset=utf-8',
'Content-Length': '256',
}
def __new__(cls, *args, **kwargs):
if not hasattr(cls,"_instance"):
cls._instance = super().__new__(cls,*args,**kwargs)
return cls._instance
def __init__(self, ACCOUNT_ID, APP_ID, AUTH_TOKEN):
self.ACCOUNT_ID = ACCOUNT_ID
self.APP_ID = APP_ID
self.AUTH_TOKEN = AUTH_TOKEN
def get_time_sign(self):
""" 获取指定格式的时间"""
return datetime.now().strftime("%Y%m%d%H%M%S")
def set_time(self):
self.TIME = self.get_time_sign()
def sd_md5(self, value):
"""md5"""
md5 = hashlib.md5()
md5.update(value.encode("utf-8"))
return md5.hexdigest()
def b64_encode(self, value):
"""b64编码"""
return base64.b64encode(value.encode("utf-8"))
def get_verification_code(self):
"""验证码"""
verfication_code_li = [i for i in range(1, 10)]
return random.sample(verfication_code_li, 6)
def run(self, to, template_id=1, survival_time=10):
"""
:param to: 发送给的联系人手机号,多个用列表
:param template_id: 短信模板
:param survival_time: 验证码过期时间
:return:
"""
self.set_time()
sig_parameter = self.sd_md5("".join([self.ACCOUNT_ID, self.AUTH_TOKEN, self.TIME]))
send_message_request_url = self.base_url.format(accountSid=self.ACCOUNT_ID, SigParameter=sig_parameter)
self.headers['Authorization'] = self.b64_encode("".join([self.ACCOUNT_ID, ":", self.TIME]))
data = {
"to": to,
"appId": self.APP_ID,
"templateId": template_id,
"datas": ["验证码", survival_time]
}
data["datas"][0] = "".join(self.get_verification_code())
send_response = requests.post(url=send_message_request_url, data=json.dumps(data), headers=self.headers)
send_response = json.loads(send_response)
if send_response.get("statusCode", None) == "000000":
return {"status": "success", "message": send_response, "ver_code": data["datas"][0],
"survival_time": survival_time}
else:
return {"status": "error", "message": send_response}
if __name__ == '__main__':
ACCOUNT_ID = "改成自己的"
APP_ID = "改成自己的"
AUTH_TOKEN = "改成自己的"
sortMessage = SortMessage(ACCOUNT_ID=ACCOUNT_ID, APP_ID=APP_ID, AUTH_TOKEN=AUTH_TOKEN)
ret = sortMessage.run(["189****3241"])
print(ret)