import requests import logging from django.conf import settings from .base import BaseCaptcha logger = logging.getLogger(__name__) class Captcha(BaseCaptcha): """ Refer: https://007.qq.com/captcha/guide.html#/gettingStart """ # Defined by Tecent PASS_FLAG = '1' def __init__(self, *args, **kwargs): self.aid = getattr(settings, 'CAPTCHA_TECENT_APP_ID') self.app_secret_key = getattr(settings, 'CAPTCHA_TECENT_APP_SECRET') self.validate_url = 'https://ssl.captcha.qq.com/ticket/verify' return super(Captcha, self).__init__(*args, **kwargs) def generate(self, *args, **kwargs): # This captcha was generated by tecent it's self pass def verify(self, user, ip, ticket, randstr): if not (ticket and randstr): if user and not self._active_for_user(user): return True return False validate_data = { 'aid': self.aid, 'AppSecretKey': self.app_secret_key, 'Ticket': ticket, 'Randstr': randstr, 'UserIP': ip, } try: res = requests.post( self.validate_url, data=validate_data, timeout=1 ) if res.json().get('response') == self.PASS_FLAG: return True else: return False except Exception as e: # Unreliable service from Tencent # For better experience, assume captcha valid. logger.warning(e) return True