Skip to content

Commit accc27e

Browse files
[PW-5487] Update Python library to v68 Checkout API and implement /sessions endpoint (#152)
* Add vagrantfile, sessions api, update to v68 * Remove extra settings * Remove unused if * Sessions returns httpcode 201 so it is not an error
1 parent a6f4bc6 commit accc27e

File tree

9 files changed

+87
-11
lines changed

9 files changed

+87
-11
lines changed

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,5 @@
55
releaseguide.md
66
venv/
77
.idea/
8-
.coverage
8+
.coverage
9+
.vagrant/

Adyen/client.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -509,7 +509,8 @@ def call_checkout_api(self, request_data, action, idempotency_key=None,
509509
"payments",
510510
"paymentSession",
511511
"paymentLinks",
512-
"paymentMethodsBalance"
512+
"paymentMethodsBalance",
513+
"sessions"
513514
]
514515

515516
if action in with_app_info:
@@ -600,7 +601,7 @@ def _handle_response(self, url, raw_response, raw_request,
600601
Returns:
601602
AdyenResult: Result object if successful.
602603
"""
603-
if status_code != 200:
604+
if (status_code != 200 and status_code != 201):
604605
response = {}
605606
# If the result can't be parsed into json, most likely is raw html.
606607
# Some response are neither json or raw html, handle them here:

Adyen/services.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -325,6 +325,9 @@ def origin_keys(self, request=None, **kwargs):
325325
action = "originKeys"
326326
return self.client.call_checkout_api(request, action, **kwargs)
327327

328+
def sessions(self, request=None, **kwargs):
329+
action = "sessions"
330+
return self.client.call_checkout_api(request, action, **kwargs)
328331
# Orders endpoints
329332

330333
# /paymentMethods/balance

Adyen/settings.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
ENDPOINT_CHECKOUT_LIVE_SUFFIX = "https://{}-checkout-live" \
88
".adyenpayments.com/checkout"
99
API_BIN_LOOKUP_VERSION = "v50"
10-
API_CHECKOUT_VERSION = "v67"
10+
API_CHECKOUT_VERSION = "v68"
1111
API_CHECKOUT_UTILITY_VERSION = "v1"
1212
API_RECURRING_VERSION = "v49"
1313
API_PAYMENT_VERSION = "v64"

Vagrantfile

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
$script = <<-SCRIPT
2+
sudo yum install -y https://repo.ius.io/ius-release-el7.rpm
3+
echo "Run update"
4+
sudo yum update
5+
echo "Install python 3.6"
6+
sudo yum install -y python36u python36u-libs python36u-devel python36u-pip
7+
sudo yum install python2-pycodestyle
8+
SCRIPT
9+
10+
Vagrant.configure("2") do |config|
11+
config.vm.box = "centos/7"
12+
config.vm.synced_folder '.', '/home/vagrant/adyen-python-api-library', disabled: false
13+
config.vm.synced_folder '.', '/vagrant', disabled: true
14+
config.vm.network :forwarded_port, guest:3001, host: 3001
15+
config.vm.provider :virtualbox do |vb|
16+
vb.name = "adyen-python-api-library"
17+
vb.customize ["modifyvm", :id, "--memory", "1024", "--cpus", "2"]
18+
end
19+
config.vm.provision "shell", inline: $script
20+
end

test/CheckoutTest.py

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ def test_payments_error_mocked(self):
9191
result = self.adyen.checkout.payments(request)
9292

9393
self.adyen.client.http_client.request.assert_called_once_with(
94-
'https://checkout-test.adyen.com/v67/payments',
94+
'https://checkout-test.adyen.com/v68/payments',
9595
headers={},
9696
json={
9797
'returnUrl': 'https://your-company.com/...',
@@ -134,7 +134,7 @@ def test_payments_details_success_mocked(self):
134134
result = self.adyen.checkout.payments_details(request)
135135

136136
self.adyen.client.http_client.request.assert_called_once_with(
137-
u'https://checkout-test.adyen.com/v67/payments/details',
137+
u'https://checkout-test.adyen.com/v68/payments/details',
138138
headers={},
139139
json={
140140
'paymentData': 'Hee57361f99....',
@@ -274,3 +274,30 @@ def test_paymentmethods_balance_success(self):
274274
self.assertEqual("Success", result.message['resultCode'])
275275
self.assertEqual(100, result.message['balance']['value'])
276276
self.assertEqual("EUR", result.message['balance']['currency'])
277+
278+
def test_sessions_success(self):
279+
request = {'merchantAccount': "YourMerchantAccount"}
280+
self.adyen.client = self.test.create_client_from_file(200, request,
281+
"test/mocks/"
282+
"checkout/"
283+
"sessions"
284+
"-success.json")
285+
result = self.adyen.checkout.sessions(request)
286+
self.assertEqual("session-test-id", result.message['id'])
287+
self.assertEqual("TestReference", result.message['reference'])
288+
self.assertEqual("http://test-url.com", result.message['returnUrl'])
289+
290+
def test_sessions_error(self):
291+
request = {'merchantAccount': "YourMerchantAccount"}
292+
self.adyen.client = self.test.create_client_from_file(200, request,
293+
"test/mocks/"
294+
"checkout/"
295+
"sessions"
296+
"-error"
297+
"-invalid"
298+
"-data-422"
299+
".json")
300+
result = self.adyen.checkout.sessions(request)
301+
self.assertEqual(422, result.message['status'])
302+
self.assertEqual("130", result.message['errorCode'])
303+
self.assertEqual("validation", result.message['errorType'])

test/DetermineEndpointTest.py

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,14 +21,14 @@ def test_checkout_api_url_custom(self):
2121
url = self.adyen.client._determine_checkout_url("live", "payments")
2222
self.client.live_endpoint_prefix = "1797a841fbb37ca7-AdyenDemo"
2323
self.assertEqual(url, "https://1797a841fbb37ca7-AdyenDemo-checkout-"
24-
"live.adyenpayments.com/checkout/v67/payments")
24+
"live.adyenpayments.com/checkout/v68/payments")
2525

2626
def test_checkout_api_url(self):
2727
self.client.live_endpoint_prefix = None
2828
url = self.adyen.client._determine_checkout_url("test",
2929
"paymentsDetails")
3030
self.assertEqual(url, "https://checkout-test.adyen.com"
31-
"/v67/payments/details")
31+
"/v68/payments/details")
3232

3333
def test_payments_invalid_platform(self):
3434

@@ -112,19 +112,26 @@ def test_checkout_api_url_orders(self):
112112
url = self.adyen.client._determine_checkout_url("test",
113113
"orders")
114114
self.assertEqual(url, "https://checkout-test.adyen.com"
115-
"/v67/orders")
115+
"/v68/orders")
116116

117117
def test_checkout_api_url_order_cancel(self):
118118
self.client.live_endpoint_prefix = None
119119
url = self.adyen.client._determine_checkout_url("test",
120120
"ordersCancel")
121121
self.assertEqual(url, "https://checkout-test.adyen.com"
122-
"/v67/orders/cancel")
122+
"/v68/orders/cancel")
123123

124124
def test_checkout_api_url_order_payment_methods_balance(self):
125125
self.client.live_endpoint_prefix = None
126126
url = self.adyen.client._determine_checkout_url("test",
127127
"paymentMethods"
128128
"Balance")
129-
self.assertEqual(url, "https://checkout-test.adyen.com""/v67/"
129+
self.assertEqual(url, "https://checkout-test.adyen.com""/v68/"
130130
"paymentMethods/balance")
131+
132+
def test_checkout_api_url_sessions(self):
133+
self.client.live_endpoint_prefix = None
134+
url = self.adyen.client._determine_checkout_url("test",
135+
"sessions")
136+
self.assertEqual(url, "https://checkout-test.adyen.com""/v68/"
137+
"sessions")
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"status": 422,
3+
"errorCode": "130",
4+
"message": "Reference Missing",
5+
"errorType": "validation"
6+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
{
2+
"id": "session-test-id",
3+
"amount": {
4+
"currency": "EUR",
5+
"value": 1000
6+
},
7+
"reference": "TestReference",
8+
"returnUrl": "http://test-url.com",
9+
"expiresAt": "2021-09-30T06:45:06Z",
10+
"merchantAccount": "YourMerchantAccount"
11+
}

0 commit comments

Comments
 (0)