SMS-Activate短信验证码验证平台,官网:https://sms-activate.org/

SMS-Activate Python SDK 代码如下

import requests
import json


class SMSActivateAPI:

    def __init__(self, api_key):
    self.__api_url = "https://api.sms-activate.org/stubs/handler_api.php"
    self.api_key = api_key
    self.debug_mode = False

    self.__CODES = {
    'STATUS_WAIT_CODE': 'Waiting for sms',
    'STATUS_WAIT_RETRY': 'Past Inappropriate Code - Waiting for Code Refinement',
    'STATUS_WAIT_RESEND ': 'Waiting for re-sending SMS',
    'STATUS_CANCEL': 'Activation canceled',
    'STATUS_OK': 'Code received',
    'FULL_SMS': 'Full text received'
    }

    self.__RENT_CODES = {
    'STATUS_WAIT_CODE': 'Waiting for the first SMS',
    'STATUS_FINISH': 'Rent paid and completed',
    'STATUS_CANCEL': 'Rent canceled with a refund',
    }

    self.__ERRORS = {
    'NO_NUMBERS': 'There are no free numbers for receiving SMS from the current service',
    'NO_BALANCE': 'Not enough funds',
    'BAD_ACTION': 'Invalid action (action parameter)',
    'BAD_SERVICE': 'Incorrect service name (service parameter)',
    'BAD_KEY': 'Invalid API access key',
    'ERROR_SQL': 'One of the parameters has an invalid value.',
    'SQL_ERROR': 'One of the parameters has an invalid value.',
    'NO_ACTIVATION': 'The specified activation id does not exist',
    'BAD_STATUS': 'Attempt to establish a non-existent status',
    'STATUS_CANCEL': 'Current activation canceled and no longer available',
    'BANNED': 'Account is blocked',
    'NO_CONNECTION': 'No connection to servers sms-activate',
    'ACCOUNT_INACTIVE': 'No numbers available',
    'NO_ID_RENT': 'Rent id not specified',
    'INVALID_PHONE': 'The number was not rented by you (wrong rental id)',
    'STATUS_FINISH': 'Rent paid and completed',
    'INCORECT_STATUS': 'Missing or incorrect status',
    'CANT_CANCEL': 'Unable to cancel the lease (more than 20 minutes have passed)',
    'ALREADY_FINISH': 'The lease has already been completed',
    'ALREADY_CANCEL': 'The lease has already been canceled',
    'WRONG_OPERATOR': 'Lease Transfer Operator is not MTT',
    'NO_YULA_MAIL': 'To buy a number from the mail group holding, you must have at least 500 rubles on your account',
    'WHATSAPP_NOT_AVAILABLE': 'No WhatsApp numbers available',

    'NOT_INCOMING': 'Activation is not call-verified activation',
    'INVALID_ACTIVATION_ID': 'Invalid activation id',

    'WRONG_ADDITIONAL_SERVICE': 'Invalid additional service (only services for forwarding are allowed)',
    'WRONG_ACTIVATION_ID': 'Invalid parental activation ID',
    'WRONG_SECURITY': 'An error occurred when trying to transfer an activation ID without forwarding, or a completed / inactive activation',
    'REPEAT_ADDITIONAL_SERVICE': 'The error occurs when you try to order the purchased service again',

    'NO_KEY': 'API key missing',
    'OPERATORS_NOT_FOUND': ' Operators not found'
    }

    def version(self):
    return "1.5"

    def check_error(self, response):
    if self.__ERRORS.get(response) == None:
    return False
    return True

    def get_error(self, error):
    return self.__ERRORS.get(error)

    def __debugLog(self, data):
    if self.debug_mode:
    print('[Debug]', data)

    def response(self, action, response):
    self.__debugLog(response)
    if self.check_error(response):
    return {"error": response, "message": self.get_error(response)}
    elif not str(response):
    return {"error": response, "message": "Server error, try again"}

    if action == "getNumbersStatus":
    result = json.loads(response)
    return result

    elif action == "getBalance":
    response = str(response[15:])
    result = {"balance": response}
    return result

    elif action == "getBalanceAndCashBack":
    response = str(response[15:])
    result = {"balance": response}
    return result

    elif action == "getNumber":
    response = str(response[14:])
    data = response.split(":")
    activation_id = int(data[0])
    phone = int(data[1])
    result = {"activation_id": activation_id, "phone": phone}
    return result

    elif action == "getNumberV2":
    result = json.loads(response)
    return result

    elif action == "getMultiServiceNumber":
    result = json.loads(response)
    return result

    elif action == "getPrices":
    result = json.loads(response)
    return result

    elif action == "getCountries":
    result = json.loads(response)
    return result

    elif action == "getQiwiRequisites":
    result = json.loads(response)
    return result

    elif action == "getAdditionalService":
    response = str(response[11:])
    data = response.split(":")
    id = int(data[0])
    phone = int(data[1])
    result = {"id": id, "phone": phone}
    return result

    elif action == "getRentServicesAndCountries":
    result = json.loads(response)
    return result

    elif action == "getRentNumber":
    result = json.loads(response)
    return result

    elif action == "getRentStatus":
    result = json.loads(response)
    return result

    elif action == "setRentStatus":
    result = json.loads(response)
    return result
    elif action == "getRentList":
    result = json.loads(response)
    return result

    elif action == "continueRentNumber":
    result = json.loads(response)
    return result

    elif action == "getContinueRentPriceNumber":
    result = json.loads(response)
    return result

    elif action == "getTopCountriesByService":
    result = json.loads(response)
    return result

    elif action == "getIncomingCallStatus":
    result = json.loads(response)
    return result

    elif action == "getOperators":
    result = json.loads(response)
    return result

    elif action == "getActiveActivations":
    result = json.loads(response)
    return result

    elif action == "createTaskForCall":
    result = json.loads(response)
    if 'msg' in result:
    result['message'] = result.pop('msg')
    return result
    elif action == "getOutgoingCalls":
    result = json.loads(response)
    return result
    else:
    return response

    def activationStatus(self, status):
    return {"status": status, "message": self.__CODES.get(status)}

    def rentStatus(self, status):
    return self.__RENT_CODES.get(status)

    def getBalance(self):
    payload = {'api_key': self.api_key, 'action': 'getBalance'}
    r = requests.get(self.__api_url, params=payload)
    return self.response("getBalance", r.text)

    def getBalanceAndCashBack(self):
    payload = {'api_key': self.api_key, 'action': 'getBalanceAndCashBack'}
    r = requests.get(self.__api_url, params=payload)
    return self.response("getBalanceAndCashBack", r.text)

    def getNumbersStatus(self, country=None, operator=None):
    payload = {'api_key': self.api_key, 'action': 'getNumbersStatus'}
    if country is not None:
    payload['country'] = country
    if operator:
    payload['operator'] = operator
    r = requests.get(self.__api_url, params=payload)
    return self.response("getNumbersStatus", r.text)

    def getNumber(self, service=None, forward=None, freePrice=None, maxPrice=None, phoneException=None, operator=None,
  ref=None, country=None, verification=None):
    payload = {'api_key': self.api_key, 'action': 'getNumber'}
    if service:
    payload['service'] = service
    if forward:
    payload['forward'] = forward
    if freePrice:
    payload['freePrice'] = freePrice
    if maxPrice:
    payload['maxPrice'] = maxPrice
    if phoneException:
    payload['phoneException'] = phoneException
    if operator:
    payload['operator'] = operator
    if ref:
    payload['ref'] = ref
    if country is not None:
    payload['country'] = country
    if verification:
    payload['verification'] = verification

    r = requests.get(self.__api_url, params=payload)
    return self.response("getNumber", r.text)

    def getNumberV2(self, service=None, forward=None, freePrice=None, maxPrice=None, phoneException=None, operator=None,
  ref=None, country=None, verification=None):
    payload = {'api_key': self.api_key, 'action': 'getNumberV2'}
    if service:
    payload['service'] = service
    if forward:
    payload['forward'] = forward
    if freePrice:
    payload['freePrice'] = freePrice
    if maxPrice:
    payload['maxPrice'] = maxPrice
    if phoneException:
    payload['phoneException'] = phoneException
    if operator:
    payload['operator'] = operator
    if ref:
    payload['ref'] = ref
    if country is not None:
    payload['country'] = country
    if verification:
    payload['verification'] = verification

    r = requests.get(self.__api_url, params=payload)
    return self.response("getNumberV2", r.text)

    def getMultiServiceNumber(self, service=None, forward=None, operator=None, ref=None, country=None):
    payload = {'api_key': self.api_key, 'action': 'getMultiServiceNumber'}
    if service:
    payload['multiService'] = service
    if forward:
    payload['forward'] = forward
    if operator:
    payload['operator'] = operator
    if ref:
    payload['ref'] = ref
    if country is not None:
    payload['country'] = country
    r = requests.get(self.__api_url, params=payload)
    return self.response("getMultiServiceNumber", r.text)

    def setStatus(self, id=None, forward=None, status=None, ):
    payload = {'api_key': self.api_key, 'action': 'setStatus'}
    if id:
    payload['id'] = id
    if forward:
    payload['forward'] = forward
    if status:
    payload['status'] = status
    r = requests.get(self.__api_url, params=payload)
    return self.response("setStatus", r.text)

    def getStatus(self, id=None):
    payload = {'api_key': self.api_key, 'action': 'getStatus'}
    if id:
    payload['id'] = id
    r = requests.get(self.__api_url, params=payload)
    return self.response("getStatus", r.text)

    def getFullSms(self, id=None):
    payload = {'api_key': self.api_key, 'action': 'getFullSms'}
    if id:
    payload['id'] = id
    r = requests.get(self.__api_url, params=payload)
    return self.response("getFullSms", r.text)

    def getPrices(self, service=None, country=None):
    payload = {'api_key': self.api_key, 'action': 'getPrices'}
    if service:
    payload['service'] = service
    if country is not None:
    payload['country'] = country
    r = requests.get(self.__api_url, params=payload)
    return self.response("getPrices", r.text)

    def getCountries(self):
    payload = {'api_key': self.api_key, 'action': 'getCountries'}
    r = requests.get(self.__api_url, params=payload)
    return self.response("getCountries", r.text)

    def getAdditionalService(self, service=None, id=None):
    payload = {'api_key': self.api_key, 'action': 'getAdditionalService'}
    if service:
    payload['service'] = service
    if id:
    payload['id'] = id
    r = requests.get(self.__api_url, params=payload)
    return self.response("getAdditionalService", r.text)

    def getQiwiRequisites(self):
    payload = {'api_key': self.api_key, 'action': 'getQiwiRequisites'}
    r = requests.get(self.__api_url, params=payload)
    return self.response("getQiwiRequisites", r.text)

    def getAdditionalService(self, id=None, service=None):
    payload = {'api_key': self.api_key, 'action': 'getAdditionalService'}
    if id:
    payload['id'] = id
    if service:
    payload['service'] = service
    r = requests.get(self.__api_url, params=payload)
    return self.response("getAdditionalService", r.text)

    def getRentServicesAndCountries(self, time=None, operator=None, country=None):
    payload = {'api_key': self.api_key, 'action': 'getRentServicesAndCountries'}
    if time:
    payload['time'] = time
    if operator:
    payload['operator'] = operator
    if country is not None:
    payload['country'] = country

    r = requests.get(self.__api_url, params=payload)
    return self.response("getRentServicesAndCountries", r.text)

    def getRentNumber(self, service=None, time=None, operator=None, country=None, url=None):
    payload = {'api_key': self.api_key, 'action': 'getRentNumber'}
    if service:
    payload['service'] = service
    if time:
    payload['time'] = time
    if operator:
    payload['operator'] = operator
    if country is not None:
    payload['country'] = country
    if url:
    payload['url'] = url

    r = requests.get(self.__api_url, params=payload)
    return self.response("getRentNumber", r.text)

    def getRentStatus(self, id=None):
    payload = {'api_key': self.api_key, 'action': 'getRentStatus'}
    if id:
    payload['id'] = id

    r = requests.get(self.__api_url, params=payload)
    return self.response("getRentStatus", r.text)

    def setRentStatus(self, id=None, status=None):
    payload = {'api_key': self.api_key, 'action': 'setRentStatus'}
    if id:
    payload['id'] = id
    if status:
    payload['status'] = status

    r = requests.get(self.__api_url, params=payload)
    return self.response("setRentStatus", r.text)

    def getRentList(self):
    payload = {'api_key': self.api_key, 'action': 'getRentList'}
    r = requests.get(self.__api_url, params=payload)
    return self.response("getRentList", r.text)

    def continueRentNumber(self, id=None, time=None):
    payload = {'api_key': self.api_key, 'action': 'continueRentNumber'}
    if id:
    payload['id'] = id
    if time:
    payload['rent_time'] = time

    r = requests.get(self.__api_url, params=payload)
    return self.response("continueRentNumber", r.text)

    def getContinueRentPriceNumber(self, id=None):
    payload = {'api_key': self.api_key, 'action': 'getContinueRentPriceNumber'}
    if id:
    payload['id'] = id

    r = requests.get(self.__api_url, params=payload)
    return self.response("getContinueRentPriceNumber", r.text)

    def getTopCountriesByService(self, service=None, freePrice=None):
    payload = {'api_key': self.api_key, 'action': 'getTopCountriesByService'}
    if service:
    payload['service'] = service
    if freePrice:
    payload['freePrice'] = freePrice

    r = requests.get(self.__api_url, params=payload)
    return self.response("getTopCountriesByService", r.text)

    def getIncomingCallStatus(self, id=None):
    payload = {'api_key': self.api_key, 'action': 'getIncomingCallStatus'}
    if id:
    payload['activationId'] = id

    r = requests.get(self.__api_url, params=payload)
    return self.response("getIncomingCallStatus", r.text)

    def getOperators(self, country=None):
    payload = {'api_key': self.api_key, 'action': 'getOperators'}
    if country is not None:
    payload['country'] = country

    r = requests.get(self.__api_url, params=payload)
    return self.response("getOperators", r.text)

    def getActiveActivations(self):
    payload = {'api_key': self.api_key, 'action': 'getActiveActivations'}
    r = requests.get(self.__api_url, params=payload)
    return self.response("getActiveActivations", r.text)

    def createTaskForCall(self, activationId):
    payload = {'api_key': self.api_key, 'action': 'createTaskForCall'}
    payload['activationId'] = activationId
    r = requests.get(self.__api_url, params=payload)
    return self.response("createTaskForCall", r.text)

    def getOutgoingCalls(self, activationId=None, date=None):
    payload = {'api_key': self.api_key, 'action': 'getOutgoingCalls'}
    if activationId is not None:
    payload['activationId'] = activationId
    if date is not None:
    payload['date'] = date
    r = requests.get(self.__api_url, params=payload)
    return self.response("getOutgoingCalls", r.text)