diff --git a/CHANGELOG b/CHANGELOG index fb9969e8..426865f1 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,5 +1,11 @@ ## Unreleased +## Version 2.9.8 – June 27th, 2019 ## + +This version brings us up to API version 2.21, but has no breaking changes + +- Add 3DS authentication [PR](https://github.com/recurly/recurly-client-python/pull/296) + ## Version 2.9.7 – May 21st, 2019 ## This version brings us up to API version 2.20, but has no breaking changes diff --git a/recurly/__init__.py b/recurly/__init__.py index 4a420a22..9aa1029f 100644 --- a/recurly/__init__.py +++ b/recurly/__init__.py @@ -22,7 +22,7 @@ """ -__version__ = '2.9.7' +__version__ = '2.9.8' __python_version__ = '.'.join(map(str, sys.version_info[:3])) cached_rate_limits = { @@ -46,7 +46,7 @@ API_KEY = None """The API key to use when authenticating API requests.""" -API_VERSION = '2.20' +API_VERSION = '2.21' """The API version to use when making API requests.""" CA_CERTS_FILE = None @@ -410,6 +410,7 @@ class BillingInfo(Resource): 'external_hpp_type', 'gateway_token', 'gateway_code', + 'three_d_secure_action_result_token_id', ) sensitive_attributes = ('number', 'verification_value', 'account_number') xml_attribute_attributes = ('type',) diff --git a/recurly/errors.py b/recurly/errors.py index dae479d2..a7ddf28c 100644 --- a/recurly/errors.py +++ b/recurly/errors.py @@ -185,6 +185,13 @@ def gateway_error_code(self): if el is not None: return el.text + @property + def three_d_secure_action_token_id(self): + """3DS Action Token ID for further authentication""" + el = self.response_doc.find('three_d_secure_action_token_id') + if el is not None: + return el.text + class ValidationError(ClientError):