diff --git a/tfjm/helloasso.py b/tfjm/helloasso.py index 768fe88..bbd0b66 100644 --- a/tfjm/helloasso.py +++ b/tfjm/helloasso.py @@ -12,49 +12,63 @@ _refresh_token = None _expires_at = None +def _get_hello_asso_api_base_url(): + if not settings.DEBUG: + return "https://api.helloasso.com" + else: + return "https://api.helloasso-sandbox.com" + + def get_hello_asso_access_token(): global _access_token, _refresh_token, _expires_at + base_url = _get_hello_asso_api_base_url() + now = datetime.now() if _access_token is None: response = requests.post( - "https://api.helloasso.com/oauth2/token", + f"{base_url}/oauth2/token", data={ "grant_type": "client_credentials", "client_id": settings.HELLOASSO_CLIENT_ID, "client_secret": settings.HELLOASSO_CLIENT_SECRET, }, ) - response.raise_for_status() - data = response.json() - _access_token = data["access_token"] - _refresh_token = data["refresh_token"] - _expires_at = now + timedelta(seconds=data["expires_in"]) elif now >= _expires_at: response = requests.post( - "https://api.helloasso.com/oauth2/token", + f"{base_url}/oauth2/token", data={ "grant_type": "refresh_token", "refresh_token": _refresh_token, }, ) - response.raise_for_status() - data = response.json() - _access_token = data["access_token"] - _refresh_token = data["refresh_token"] - _expires_at = now + timedelta(seconds=data["expires_in"]) + else: + return _access_token + + if response.status_code == 400: + raise ValueError(str(response.json()['errors'])) + response.raise_for_status() + + data = response.json() + _access_token = data["access_token"] + _refresh_token = data["refresh_token"] + _expires_at = now + timedelta(seconds=data["expires_in"]) return _access_token def get_checkout_intent(checkout_id): + base_url = _get_hello_asso_api_base_url() token = get_hello_asso_access_token() + response = requests.get( - f"https://api.helloasso.com/v5/organizations/animath/checkout-intents/{checkout_id}", + f"{base_url}/v5/organizations/animath/checkout-intents/{checkout_id}", headers={"Authorization": f"Bearer {token}"}, ) if response.status_code == 404: return None + elif response.status_code == 400: + raise ValueError(str(response.json()['errors'])) response.raise_for_status() checkout_intent = response.json() @@ -65,10 +79,12 @@ def get_checkout_intent(checkout_id): def create_checkout_intent(amount, name, back_url, error_url, return_url, contains_donation=False, metadata=None): + base_url = _get_hello_asso_api_base_url() token = get_hello_asso_access_token() + metadata = metadata or {} response = requests.post( - "https://api.helloasso.com/v5/organizations/animath/checkout-intents/", + f"{base_url}/v5/organizations/animath/checkout-intents/", headers={"Authorization": f"Bearer {token}"}, json={ "totalAmount": amount, @@ -81,6 +97,7 @@ def create_checkout_intent(amount, name, back_url, error_url, return_url, contai "metadata": metadata, }, ) - print(response.text) + if response.status_code == 400: + raise ValueError(str(response.json()['errors'])) response.raise_for_status() return response.json() diff --git a/tfjm/settings.py b/tfjm/settings.py index 130f551..6fa4177 100644 --- a/tfjm/settings.py +++ b/tfjm/settings.py @@ -30,8 +30,11 @@ ADMINS = [("Emmy D'Anello", "emmy.danello@animath.fr")] # SECURITY WARNING: keep the secret key used in production secret! SECRET_KEY = os.getenv('DJANGO_SECRET_KEY', 'CHANGE_ME_IN_ENV_SETTINGS') +# dev in development mode, prod in production mode +TFJM_STAGE = os.getenv('TFJM_STAGE', 'dev') + # SECURITY WARNING: don't run with debug turned on in production! -DEBUG = True +DEBUG = TFJM_STAGE != "prod" SITE_ID = 1 @@ -76,7 +79,7 @@ if "test" not in sys.argv: # pragma: no cover 'mailer', ] -if os.getenv("TFJM_STAGE", "dev") == "prod": # pragma: no cover +if TFJM_STAGE == "prod": # pragma: no cover INSTALLED_APPS += [ 'channels_redis', ] @@ -277,7 +280,7 @@ CHANNEL_LAYERS = { } } -if os.getenv("TFJM_STAGE", "dev") == "prod": # pragma: no cover +if TFJM_STAGE == "prod": # pragma: no cover from .settings_prod import * # noqa: F401,F403 else: from .settings_dev import * # noqa: F401,F403