36 lines
1.1 KiB
Python
36 lines
1.1 KiB
Python
from abc import ABC, abstractmethod
|
|
import requests
|
|
from django.conf import settings
|
|
|
|
|
|
class SmsProviderABC(ABC):
|
|
@abstractmethod
|
|
def send_sms(self, mobile: str, message: str) -> bool:
|
|
pass
|
|
|
|
|
|
class DefaultSmsProvider(SmsProviderABC):
|
|
def send_sms(self, mobile: str, message: str) -> bool:
|
|
default_provider = DosefrNavadHashtSMS()
|
|
return default_provider.send_sms(mobile, message)
|
|
|
|
|
|
class DosefrNavadHashtSMS(SmsProviderABC):
|
|
def send_sms(self, mobile: str, message: str) -> bool:
|
|
payload = {
|
|
'USERNAME': 'vsms7937',
|
|
'PASSWORD': '335577775533',
|
|
'FROM': '30005367',
|
|
'TO': int(mobile),
|
|
'TEXT': f'{message}'
|
|
}
|
|
try:
|
|
r = requests.get('http://www.0098sms.com/sendsmslink.aspx', params=payload, timeout=10)
|
|
r.raise_for_status()
|
|
except requests.RequestException:
|
|
return False
|
|
# An HTTP 200 alone does not mean the SMS provider accepted the message.
|
|
success_codes = getattr(settings, 'SMS_SUCCESS_CODES', ('0',))
|
|
return r.text.strip() in success_codes
|
|
|