Skip to content

Commit f96711b

Browse files
authored
Merge pull request #248 from maykinmedia/develop
Adyen 10+ support
2 parents aaa86fc + 288d7c1 commit f96711b

13 files changed

+73
-25
lines changed

djadyen/constants.py

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
LIVE_URL_PREFIX_ERROR = "Please provide the live_url_prefix. "
2+
"https://docs.adyen.com/development-resources/live-endpoints#live-url-prefix"

djadyen/management/commands/sync_payment_methods.py

+12-1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
from djadyen import settings
66

7+
from ...constants import LIVE_URL_PREFIX_ERROR
78
from ...models import AdyenIssuer, AdyenPaymentOption
89

910

@@ -38,17 +39,27 @@ class Command(BaseCommand):
3839
def handle(self, *args, **options):
3940
ady = Adyen.Adyen()
4041

42+
if not settings.DJADYEN_ENVIRONMENT:
43+
assert False, "Please provide an environment."
44+
45+
if (
46+
settings.DJADYEN_ENVIRONMENT == "live"
47+
and not settings.DJADYEN_LIVE_URL_PREFIX
48+
):
49+
assert False, LIVE_URL_PREFIX_ERROR
50+
4151
# Setting global values
4252
ady.payment.client.platform = settings.DJADYEN_ENVIRONMENT
4353
ady.payment.client.xapikey = settings.DJADYEN_SERVER_KEY
4454
ady.payment.client.app_name = settings.DJADYEN_APPNAME
55+
ady.payment.client.live_endpoint_prefix = settings.DJADYEN_LIVE_URL_PREFIX
4556

4657
# Setting request data.
4758
request = {
4859
"merchantAccount": settings.DJADYEN_MERCHANT_ACCOUNT,
4960
}
5061
# Starting the checkout.
51-
result = ady.checkout.payment_methods(request)
62+
result = ady.checkout.payments_api.payment_methods(request)
5263

5364
payment_methods = result.message.get("paymentMethods")
5465
for payment_method in payment_methods:

djadyen/settings.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
DJADYEN_SERVER_KEY = getattr(dj_settings, "DJADYEN_SERVER_KEY")
44
DJADYEN_CLIENT_KEY = getattr(dj_settings, "DJADYEN_CLIENT_KEY")
5-
DJADYEN_ENVIRONMENT = getattr(dj_settings, "DJADYEN_ENVIRONMENT", "test")
5+
DJADYEN_ENVIRONMENT = getattr(dj_settings, "DJADYEN_ENVIRONMENT")
66
DJADYEN_APPNAME = getattr(dj_settings, "DJADYEN_APPNAME", "Djadyen Payment")
77
DJADYEN_MERCHANT_ACCOUNT = getattr(dj_settings, "DJADYEN_MERCHANT_ACCOUNT")
88
DJADYEN_CURRENCYCODE = getattr(dj_settings, "DJADYEN_CURRENCYCODE", "EUR")
@@ -15,3 +15,4 @@
1515
DJADYEN_DEFAULT_COUNTRY_CODE = getattr(
1616
dj_settings, "DJADYEN_DEFAULT_COUNTRY_CODE", "nl"
1717
)
18+
DJADYEN_LIVE_URL_PREFIX = getattr(dj_settings, "DJADYEN_LIVE_URL_PREFIX", None)

djadyen/templatetags/adyen_tags.py

+24-7
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
import logging
2+
23
from django import template
34
from django.utils.translation import get_language
45

56
import Adyen
67

78
from djadyen import settings
89
from djadyen.choices import Status
10+
from djadyen.constants import LIVE_URL_PREFIX_ERROR
911

1012
register = template.Library()
1113
logger = logging.getLogger("adyen")
@@ -24,10 +26,18 @@ def adyen_payment_component(
2426
logger.info("Start new payment for {}".format(str(order.reference)))
2527
ady = Adyen.Adyen()
2628

29+
if not settings.DJADYEN_ENVIRONMENT:
30+
assert False, "Please provide an environment."
31+
32+
if settings.DJADYEN_ENVIRONMENT == "live" and not settings.DJADYEN_LIVE_URL_PREFIX:
33+
assert False, LIVE_URL_PREFIX_ERROR
34+
2735
# Setting global values
2836
ady.payment.client.platform = settings.DJADYEN_ENVIRONMENT
2937
ady.payment.client.xapikey = settings.DJADYEN_SERVER_KEY
3038
ady.payment.client.app_name = settings.DJADYEN_APPNAME
39+
ady.payment.client.live_endpoint_prefix = settings.DJADYEN_LIVE_URL_PREFIX
40+
3141
# Setting request data.
3242
request = {
3343
"amount": {
@@ -38,13 +48,20 @@ def adyen_payment_component(
3848
"merchantAccount": merchant_account,
3949
"returnUrl": order.get_return_url(),
4050
"shopperLocale": language.lower(),
41-
"countryCode": country_code.lower()
42-
if country_code
43-
else settings.DJADYEN_DEFAULT_COUNTRY_CODE,
51+
"countryCode": (
52+
country_code.lower()
53+
if country_code
54+
else settings.DJADYEN_DEFAULT_COUNTRY_CODE
55+
),
4456
}
57+
try:
58+
request["shopperEmail"] = order.email
59+
except Exception:
60+
pass
61+
4562
logger.info(request)
4663
# Starting the checkout.
47-
result = ady.checkout.sessions(request)
64+
result = ady.checkout.payments_api.sessions(request)
4865

4966
if result.status_code == 201:
5067
return {
@@ -54,9 +71,9 @@ def adyen_payment_component(
5471
"environment": settings.DJADYEN_ENVIRONMENT,
5572
"redirect_url": order.get_return_url,
5673
"language": get_language(),
57-
"payment_type": order.payment_option.adyen_name
58-
if order.payment_option
59-
else "",
74+
"payment_type": (
75+
order.payment_option.adyen_name if order.payment_option else ""
76+
),
6077
"issuer": order.issuer.adyen_id if order.issuer else "",
6178
}
6279
return {}

djadyen/views.py

+23-3
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
import logging
22

3-
from django.http import JsonResponse, HttpResponseRedirect
3+
from django.http import HttpResponseRedirect, JsonResponse
44
from django.views.generic.detail import DetailView
55

66
import Adyen
77

88
from djadyen import settings
99
from djadyen.choices import Status
10+
from djadyen.constants import LIVE_URL_PREFIX_ERROR
1011

1112
logger = logging.getLogger("adyen")
1213

@@ -41,25 +42,44 @@ def get(self, request, *args, **kwargs):
4142
resultRedirect = request.GET.get("redirectResult")
4243
if resultRedirect:
4344
ady = Adyen.Adyen()
45+
46+
if not settings.DJADYEN_ENVIRONMENT:
47+
assert False, "Please provide an environment."
48+
49+
if (
50+
settings.DJADYEN_ENVIRONMENT == "live"
51+
and not settings.DJADYEN_LIVE_URL_PREFIX
52+
):
53+
assert False, LIVE_URL_PREFIX_ERROR
54+
4455
# Setting global values
4556
ady.payment.client.platform = settings.DJADYEN_ENVIRONMENT
4657
ady.payment.client.xapikey = settings.DJADYEN_SERVER_KEY
4758
ady.payment.client.app_name = settings.DJADYEN_APPNAME
59+
ady.payment.client.live_endpoint_prefix = settings.DJADYEN_LIVE_URL_PREFIX
60+
4861
# Setting request data.
4962
request = {
5063
"details": {
5164
"redirectResult": resultRedirect,
5265
},
5366
}
5467
# Requesting the status.
55-
result = ady.checkout.payments_details(request)
56-
if result.message.get("resultCode") == "Authorised":
68+
result = ady.checkout.payments_api.payments_details(request)
69+
result_code = result.message.get("resultCode")
70+
if result_code == "Authorised":
5771
self.handle_authorised(self.object)
72+
elif result_code != "Pending":
73+
self.handle_error(self.object)
5874
return super(AdyenResponseView, self).get(request, *args, **kwargs)
5975

6076
def handle_authorised(self, order):
6177
raise NotImplementedError()
6278

79+
def handle_error(self, order):
80+
order.status = Status.Error
81+
order.save()
82+
6383

6484
class AdyenOrderStatusView(DetailView):
6585
slug_field = "reference"

javascript/djadyen.js

-4
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,6 @@ document.addEventListener("DOMContentLoaded", async () => {
2020
sessionData: config.dataset.sessionData,
2121
},
2222
onPaymentCompleted: (result) => {
23-
console.log("onPaymentCompleted", "result", result);
24-
console.log("onPaymentCompleted", "checkout", checkout);
25-
console.log("onPaymentCompleted", "component", component);
26-
2723
window.location = config.dataset.redirectUrl;
2824
},
2925
onError: (error, component) => {

setup.cfg

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
# see http://setuptools.readthedocs.io/en/latest/setuptools.html#configuring-setup-using-setup-cfg-files
33
[metadata]
44
name = djadyen
5-
version = 2.0.4
5+
version = 2.0.6
66
description = Django adyen payment integration
77
long_description = file: README.rst
88
url = https://github.com/maykinmedia/djadyen
@@ -31,7 +31,7 @@ zip_safe = False
3131
include_package_data = True
3232
packages = find:
3333
install_requires =
34-
Adyen>=6.0.0<7.0.0
34+
Adyen>=10.0.0
3535
django>=1.10
3636
django-choices
3737
requests

testapp/settings.py

+4-1
Original file line numberDiff line numberDiff line change
@@ -69,9 +69,12 @@
6969
]
7070

7171
# New settings
72+
DJADYEN_ENVIRONMENT = "test"
7273
DJADYEN_SERVER_KEY = "test_server_key"
7374
DJADYEN_CLIENT_KEY = "test_client_key"
7475
DJADYEN_APPNAME = "Djadyen testapp"
7576
DJADYEN_MERCHANT_ACCOUNT = "Djadyen_merchant_account"
7677
DJADYEN_ORDER_MODELS = ["testapp.Order"]
77-
DJADYEN_NOTIFICATION_KEY = "3424242342353453422435626342654643645624564526436435643542364365"
78+
DJADYEN_NOTIFICATION_KEY = (
79+
"3424242342353453422435626342654643645624564526436435643542364365"
80+
)

testapp/urls.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
try:
2-
from django.urls import path, include
2+
from django.urls import include, path
33
except Exception:
44
from django.conf.urls import url as path, include
55

testapp/views.py

-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
from django.views.generic import TemplateView
2-
31
from djadyen.choices import Status
42
from djadyen.views import AdyenResponseView
53

tests/factories.py

-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
from djadyen.choices import Status
44
from djadyen.models import AdyenIssuer, AdyenNotification, AdyenPaymentOption
5-
65
from testapp.models import Order
76

87

tests/test_management_command.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ class SyncPaymentMethods(TestFileMixin, TestCase):
2020
@requests_mock.mock()
2121
def test_on_empty_database_mock(self, mock):
2222
mock.post(
23-
"https://checkout-test.adyen.com/v69/paymentMethods",
23+
"https://checkout-test.adyen.com/v71/paymentMethods",
2424
[
2525
{
2626
"content": self._get_test_file("payment_methods.json").read(),
@@ -37,7 +37,7 @@ def test_on_empty_database_mock(self, mock):
3737
@requests_mock.mock()
3838
def test_on_existing_database_mock(self, mock):
3939
mock.post(
40-
"https://checkout-test.adyen.com/v69/paymentMethods",
40+
"https://checkout-test.adyen.com/v71/paymentMethods",
4141
[
4242
{
4343
"content": self._get_test_file("payment_methods.json").read(),

tests/test_notification_views.py

+1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import json
2+
23
from django.urls import reverse
34

45
from django_webtest import WebTest

0 commit comments

Comments
 (0)