Python 發送短信組件

利用 容聯雲 做一個短信組件

# 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)

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章