Skip to content

Commit 0aa55af

Browse files
committed
imporove determine checkout url
1 parent 4467940 commit 0aa55af

File tree

7 files changed

+202
-155
lines changed

7 files changed

+202
-155
lines changed

Adyen/client.py

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
AdyenInvalidRequestError,
1616
AdyenAPIInvalidFormat,
1717
AdyenAPIInvalidAmount,
18-
)
18+
AdyenEndpointInvalidFormat)
1919
from . import settings
2020

2121

@@ -87,7 +87,7 @@ def __init__(self, username=None, password=None, xapikey=None,
8787
self.skin_code = skin_code
8888
self.psp_list = []
8989
self.app_name = app_name
90-
self.LIB_VERSION = "1.3.0"
90+
self.LIB_VERSION = "1.4.0"
9191
self.USER_AGENT_SUFFIX = "adyen-python-api-library/"
9292
self.http_init = False
9393
self.http_force = http_force
@@ -132,12 +132,16 @@ def _determine_checkout_url(self, platform, service, action):
132132
service (str): API service to place request through.
133133
action (str): the API action to perform.
134134
"""
135-
base_uri = settings.ENDPOINT_CHECKOUT_URL.format(platform)
136135
api_version = settings.API_CHECKOUT_VERSION
137-
if self.live_endpoint_prefix is not None:
138-
base_uri = settings.ENDPOINT_PROTOCOL + self.live_endpoint_prefix \
139-
+ settings.ENDPOINT_CHECKOUT_LIVE_SUFFIX
140-
136+
base_uri = settings.ENDPOINT_CHECKOUT_URL.format(platform)
137+
if self.live_endpoint_prefix is not None and platform == "live":
138+
base_uri = settings.ENDPOINT_CHECKOUT_LIVE_SUFFIX.format(
139+
self.live_endpoint_prefix)
140+
if self.live_endpoint_prefix is not None and platform == "test":
141+
errorstring = """Please set your live suffix. You can set it
142+
by running 'settings.
143+
ENDPOINT_CHECKOUT_LIVE_SUFFIX = 'Your live suffix'"""
144+
raise AdyenEndpointInvalidFormat(errorstring)
141145
if action == "paymentsDetails":
142146
action = "payments/details"
143147
if action == "paymentsResult":
@@ -415,10 +419,8 @@ def call_checkout_api(self, request_data, service, action, **kwargs):
415419
errorstring = "'platform' must be the value of 'live' or 'test'"
416420
raise ValueError(errorstring)
417421

418-
message = request_data
419-
420-
if not message.get('merchantAccount'):
421-
message['merchantAccount'] = self.merchant_account
422+
if not request_data.get('merchantAccount'):
423+
request_data['merchantAccount'] = self.merchant_account
422424

423425
# Adyen requires this header to be set and uses the combination of
424426
# merchant account and merchant reference to determine uniqueness.
@@ -427,13 +429,14 @@ def call_checkout_api(self, request_data, service, action, **kwargs):
427429
url = self._determine_checkout_url(platform, service, action)
428430

429431
raw_response, raw_request, status_code, headers = \
430-
self.http_client.request(url, json=message,
432+
self.http_client.request(url, json=request_data,
431433
xapikey=xapikey, headers=headers,
432434
**kwargs)
433435

434436
# Creates AdyenResponse if request was successful, raises error if not.
435437
adyen_result = self._handle_response(url, raw_response, raw_request,
436-
status_code, headers, message)
438+
status_code, headers,
439+
request_data)
437440

438441
return adyen_result
439442

Adyen/exceptions.py

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -25,16 +25,10 @@ def __str__(self):
2525

2626
def debug(self):
2727
return ("class: {}\nmessage: {}\nHTTP status_code:{}\nurl: {}"
28-
"request: {}\nresponse: {}\nheaders: {}".format(
29-
self.__class__.__name__,
30-
self.message,
31-
self.status_code,
32-
self.url,
33-
self.raw_request,
34-
self.raw_response,
35-
self.headers
36-
)
37-
)
28+
"request: {}\nresponse: {}\nheaders: {}"
29+
.format(self.__class__.__name__, self.message,
30+
self.status_code, self.url, self.raw_request,
31+
self.raw_response, self.headers))
3832

3933

4034
class AdyenInvalidRequestError(AdyenError):
@@ -71,3 +65,7 @@ class AdyenAPIInvalidAmount(AdyenAPIResponseError):
7165

7266
class AdyenAPIInvalidFormat(AdyenAPIResponseError):
7367
pass
68+
69+
70+
class AdyenEndpointInvalidFormat(AdyenError):
71+
pass

Adyen/settings.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@
33
BASE_PAL_URL = "https://pal-{}.adyen.com/pal/servlet"
44
BASE_HPP_URL = "https://{}.adyen.com/hpp"
55
ENDPOINT_LIVE_SUFFIX = "-pal-live.adyenpayments.com"
6-
ENDPOINT_PROTOCOL = "https://"
76
ENDPOINT_CHECKOUT_URL = "https://checkout-{}.adyen.com"
8-
ENDPOINT_CHECKOUT_LIVE_SUFFIX = "-checkout-live.adyenpayments.com/checkout"
7+
ENDPOINT_CHECKOUT_LIVE_SUFFIX = "https://{}-checkout-live" \
8+
".adyenpayments.com/checkout"
99
API_CHECKOUT_VERSION = "v40"
1010
API_CHECKOUT_UTILITY_VERSION = "v1"
1111
API_PAYOUT_VERSION = "v30"

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
setup(
44
name='Adyen',
55
packages=['Adyen'],
6-
version='1.3.0',
6+
version='1.4.0',
77
maintainer='Adyen',
88
maintainer_email='support@adyen.com',
99
description='Adyen Python Api',

test/CheckoutTest.py

Lines changed: 73 additions & 84 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,27 @@
11
import Adyen
22
import unittest
33
from BaseTest import BaseTest
4-
import pprint
4+
5+
from Adyen.exceptions import AdyenEndpointInvalidFormat
56

67

78
class TestCheckout(unittest.TestCase):
8-
ady = Adyen.Adyen()
9+
adyen = Adyen.Adyen()
910

10-
client = ady.client
11-
test = BaseTest(ady)
11+
client = adyen.client
12+
test = BaseTest(adyen)
1213
client.xapikey = "YourXapikey"
1314
client.platform = "test"
1415
client.app_name = "appname"
1516

1617
def test_payment_methods_success_mocked(self):
1718
request = {'merchantAccount': "YourMerchantAccount"}
18-
self.ady.client = self.test.create_client_from_file(200, request,
19-
"test/mocks/"
20-
"checkout/"
21-
"paymentmethods"
22-
"-success.json")
23-
result = self.ady.checkout.payment_methods(request)
19+
self.adyen.client = self.test.create_client_from_file(200, request,
20+
"test/mocks/"
21+
"checkout/"
22+
"paymentmethods"
23+
"-success.json")
24+
result = self.adyen.checkout.payment_methods(request)
2425
self.assertEqual("AliPay", result.message['paymentMethods'][0]['name'])
2526
self.assertEqual("Credit Card",
2627
result.message['paymentMethods'][2]['name'])
@@ -29,13 +30,13 @@ def test_payment_methods_success_mocked(self):
2930

3031
def test_payment_methods_error_mocked(self):
3132
request = {'merchantAccount': "YourMerchantAccount"}
32-
self.ady.client = self.test.create_client_from_file(200, request,
33-
"test/mocks/"
34-
"checkout/"
35-
"paymentmethods-"
36-
"error-forbidden"
37-
"-403.json")
38-
result = self.ady.checkout.payment_methods(request)
33+
self.adyen.client = self.test.create_client_from_file(200, request,
34+
"test/mocks/"
35+
"checkout/"
36+
"paymentmethods-"
37+
"error-forbidden"
38+
"-403.json")
39+
result = self.adyen.checkout.payment_methods(request)
3940
self.assertEqual(403, result.message['status'])
4041
self.assertEqual("901", result.message['errorCode'])
4142
self.assertEqual("Invalid Merchant Account", result.message['message'])
@@ -53,12 +54,13 @@ def test_payments_success_mocked(self):
5354
}, 'merchantAccount': "YourMerchantAccount",
5455
'returnUrl': "https://your-company.com/..."}
5556

56-
self.ady.client = self.test.create_client_from_file(200, request,
57-
"test/mocks/"
58-
"checkout/"
59-
"payments-success"
60-
".json")
61-
result = self.ady.checkout.payments(request)
57+
self.adyen.client = self.test.create_client_from_file(200, request,
58+
"test/mocks/"
59+
"checkout/"
60+
"payments"
61+
"-success"
62+
".json")
63+
result = self.adyen.checkout.payments(request)
6264
self.assertEqual("8535296650153317", result.message['pspReference'])
6365
self.assertEqual("Authorised", result.message['resultCode'])
6466
self.assertEqual("8/2018",
@@ -78,13 +80,14 @@ def test_payments_error_mocked(self):
7880
}, 'merchantAccount': "YourMerchantAccount",
7981
'returnUrl': "https://your-company.com/..."}
8082

81-
self.ady.client = self.test.create_client_from_file(200, request,
82-
"test/mocks/"
83-
"checkout/"
84-
"payments-error"
85-
"-invalid-data-422"
86-
".json")
87-
result = self.ady.checkout.payments(request)
83+
self.adyen.client = self.test.create_client_from_file(200, request,
84+
"test/mocks/"
85+
"checkout/"
86+
"payments-error"
87+
"-invalid"
88+
"-data-422"
89+
".json")
90+
result = self.adyen.checkout.payments(request)
8891
self.assertEqual(422, result.message['status'])
8992
self.assertEqual("130", result.message['errorCode'])
9093
self.assertEqual("Reference Missing", result.message['message'])
@@ -95,12 +98,12 @@ def test_payments_details_success_mocked(self):
9598
"MD": "sdfsdfsdf...",
9699
"PaRes": "sdkfhskdjfsdf..."
97100
}}
98-
self.ady.client = self.test.create_client_from_file(200, request,
99-
"test/mocks/"
100-
"checkout/"
101-
"paymentsdetails"
102-
"-success.json")
103-
result = self.ady.checkout.payments_details(request)
101+
self.adyen.client = self.test.create_client_from_file(200, request,
102+
"test/mocks/"
103+
"checkout/"
104+
"paymentsdetails"
105+
"-success.json")
106+
result = self.adyen.checkout.payments_details(request)
104107
self.assertEqual("8515232733321252", result.message['pspReference'])
105108
self.assertEqual("Authorised", result.message['resultCode'])
106109
self.assertEqual("true",
@@ -113,13 +116,13 @@ def test_payments_details_error_mocked(self):
113116
"MD": "sdfsdfsdf...",
114117
"PaRes": "sdkfhskdjfsdf..."
115118
}}
116-
self.ady.client = self.test.create_client_from_file(200, request,
117-
"test/mocks/"
118-
"checkout/"
119-
"paymentsdetails"
120-
"-error-invalid-"
121-
"data-422.json")
122-
result = self.ady.checkout.payments_details(request)
119+
self.adyen.client = self.test.create_client_from_file(200, request,
120+
"test/mocks/"
121+
"checkout/"
122+
"paymentsdetails"
123+
"-error-invalid-"
124+
"data-422.json")
125+
result = self.adyen.checkout.payments_details(request)
123126
self.assertEqual(422, result.message['status'])
124127
self.assertEqual("101", result.message['errorCode'])
125128
self.assertEqual("Invalid card number", result.message['message'])
@@ -136,12 +139,12 @@ def test_payments_session_success_mocked(self):
136139
"merchantAccount": "YOUR_MERCHANT_ACCOUNT",
137140
'amount': {"value": "17408", "currency": "EUR"}}
138141

139-
self.ady.client = self.test.create_client_from_file(200, request,
140-
"test/mocks/"
141-
"checkout/"
142-
"paymentsession"
143-
"-success.json")
144-
result = self.ady.checkout.payment_session(request)
142+
self.adyen.client = self.test.create_client_from_file(200, request,
143+
"test/mocks/"
144+
"checkout/"
145+
"paymentsession"
146+
"-success.json")
147+
result = self.adyen.checkout.payment_session(request)
145148
self.assertIsNotNone(result.message['paymentSession'])
146149

147150
def test_payments_session_error_mocked(self):
@@ -155,13 +158,13 @@ def test_payments_session_error_mocked(self):
155158
"merchantAccount": "YOUR_MERCHANT_ACCOUNT",
156159
'amount': {"value": "17408", "currency": "EUR"}}
157160

158-
self.ady.client = self.test.create_client_from_file(200, request,
159-
"test/mocks/"
160-
"checkout/"
161-
"paymentsession"
162-
"-error-invalid-"
163-
"data-422.json")
164-
result = self.ady.checkout.payment_session(request)
161+
self.adyen.client = self.test.create_client_from_file(200, request,
162+
"test/mocks/"
163+
"checkout/"
164+
"paymentsession"
165+
"-error-invalid-"
166+
"data-422.json")
167+
result = self.adyen.checkout.payment_session(request)
165168
self.assertEqual(422, result.message['status'])
166169
self.assertEqual("14_012", result.message['errorCode'])
167170
self.assertEqual("The provided SDK token could not be parsed.",
@@ -170,40 +173,26 @@ def test_payments_session_error_mocked(self):
170173

171174
def test_payments_result_success_mocked(self):
172175
request = {"payload": "VALUE_YOU_GET_FROM_CHECKOUT_SDK"}
173-
self.ady.client = self.test.create_client_from_file(200, request,
174-
"test/mocks/"
175-
"checkout/"
176-
"paymentsresult"
177-
"-success.json")
178-
result = self.ady.checkout.payment_result(request)
176+
self.adyen.client = self.test.create_client_from_file(200, request,
177+
"test/mocks/"
178+
"checkout/"
179+
"paymentsresult"
180+
"-success.json")
181+
result = self.adyen.checkout.payment_result(request)
179182
self.assertEqual("8535253563623704", result.message['pspReference'])
180183
self.assertEqual("Authorised", result.message['resultCode'])
181184

182185
def test_payments_result_error_mocked(self):
183186
request = {"payload": "VALUE_YOU_GET_FROM_CHECKOUT_SDK"}
184-
self.ady.client = self.test.create_client_from_file(200, request,
185-
"test/mocks/"
186-
"checkout/"
187-
"paymentsresult"
188-
"-error-invalid-"
189-
"data-payload-"
190-
"422.json")
191-
result = self.ady.checkout.payment_result(request)
187+
self.adyen.client = self.test.create_client_from_file(200, request,
188+
"test/mocks/"
189+
"checkout/"
190+
"paymentsresult"
191+
"-error-invalid-"
192+
"data-payload-"
193+
"422.json")
194+
result = self.adyen.checkout.payment_result(request)
192195
self.assertEqual(422, result.message['status'])
193196
self.assertEqual("14_018", result.message['errorCode'])
194197
self.assertEqual("Invalid payload provided", result.message['message'])
195198
self.assertEqual("validation", result.message['errorType'])
196-
197-
def test_checkout_api_url(self):
198-
url = self.ady.client._determine_checkout_url("live", "",
199-
"paymentsDetails")
200-
self.assertEqual(url, "https://checkout-live.adyen.com"
201-
"/v40/payments/details")
202-
203-
def test_checkout_api_url_custom(self):
204-
self.ady.client.live_endpoint_prefix = "1797a841fbb37ca7-AdyenDemo"
205-
url = self.ady.client._determine_checkout_url("live", "",
206-
"payments")
207-
208-
self.assertEqual(url, "https://1797a841fbb37ca7-AdyenDemo-checkout-"
209-
"live.adyenpayments.com/checkout/v40/payments")

0 commit comments

Comments
 (0)