From 91b37de42b5ef1ce31db6d4c98ffa4611460ab9d Mon Sep 17 00:00:00 2001 From: Rich Spitkovsky Date: Fri, 21 Jun 2019 15:01:34 -0400 Subject: [PATCH 01/10] add /advise skeleton --- .../Model/Notification.php | 13 ++++++++ .../Model/AuthenticationResult.php | 32 +++++++++++++++++++ .../OrderWebhook/Model/AuthenticationType.php | 31 ++++++++++++++++++ src/Riskified/OrderWebhook/Model/Order.php | 4 ++- .../OrderWebhook/Model/PaymentDetails.php | 6 ++++ .../Transport/AbstractTransport.php | 10 ++++++ 6 files changed, 95 insertions(+), 1 deletion(-) create mode 100644 src/Riskified/OrderWebhook/Model/AuthenticationResult.php create mode 100644 src/Riskified/OrderWebhook/Model/AuthenticationType.php diff --git a/src/Riskified/DecisionNotification/Model/Notification.php b/src/Riskified/DecisionNotification/Model/Notification.php index 89680ba..bd64383 100644 --- a/src/Riskified/DecisionNotification/Model/Notification.php +++ b/src/Riskified/DecisionNotification/Model/Notification.php @@ -52,6 +52,14 @@ class Notification { * @var string Decision Code of Decision */ public $decisionCode; + /** + * @var integer Risk score (0-99) + */ + public $score; + /** + * @var AuthenticationType details of the authentication for 3DS transactions + */ + public $AuthenticationType; protected $signature; protected $headers; @@ -112,5 +120,10 @@ protected function parse_body() { if (array_key_exists('decision_code', $order)) { $this->decisionCode = $order->{'decision_code'}; } + + if (array_key_exists('score', $order) && array_key_exists('AuthenticationType', $order)) { + $this->score = $order->{'score'}; + $this->AuthenticationType = $order->{'AuthenticationType'}; + } } } diff --git a/src/Riskified/OrderWebhook/Model/AuthenticationResult.php b/src/Riskified/OrderWebhook/Model/AuthenticationResult.php new file mode 100644 index 0000000..6fbbb9a --- /dev/null +++ b/src/Riskified/OrderWebhook/Model/AuthenticationResult.php @@ -0,0 +1,32 @@ + 'string optional', + 'result_code' => 'string optional', + 'result_reason_code' => 'string optional', + ); + +} + diff --git a/src/Riskified/OrderWebhook/Model/AuthenticationType.php b/src/Riskified/OrderWebhook/Model/AuthenticationType.php new file mode 100644 index 0000000..076bdba --- /dev/null +++ b/src/Riskified/OrderWebhook/Model/AuthenticationType.php @@ -0,0 +1,31 @@ + 'string optional', + 'exemption_method' => 'string optional' + ); + +} + diff --git a/src/Riskified/OrderWebhook/Model/Order.php b/src/Riskified/OrderWebhook/Model/Order.php index 6ac17ba..af2b881 100644 --- a/src/Riskified/OrderWebhook/Model/Order.php +++ b/src/Riskified/OrderWebhook/Model/Order.php @@ -89,6 +89,8 @@ class Order extends AbstractModel { 'decision' => 'object \DecisionDetails optional', - 'charge_free_payment_details' => 'object\ChargeFreePaymentDetails optional' + 'charge_free_payment_details' => 'object\ChargeFreePaymentDetails optional', + + 'authentication_result' => 'object \AuthenticationResult optional' ); } diff --git a/src/Riskified/OrderWebhook/Model/PaymentDetails.php b/src/Riskified/OrderWebhook/Model/PaymentDetails.php index 20057a8..2a6c1a0 100644 --- a/src/Riskified/OrderWebhook/Model/PaymentDetails.php +++ b/src/Riskified/OrderWebhook/Model/PaymentDetails.php @@ -37,6 +37,12 @@ class PaymentDetails extends AbstractModel { 'pending_reason' => 'string optional', 'authorization_id' => 'string optional', + '_type' => 'string optional', + 'id' => 'string optional', + 'gateway' => 'string optional', + 'acquirer_bin' => 'string optional', + 'mid' => 'string optional', + 'account_number' => 'string optional', 'routing_number' => 'string optional', diff --git a/src/Riskified/OrderWebhook/Transport/AbstractTransport.php b/src/Riskified/OrderWebhook/Transport/AbstractTransport.php index 83a8301..8c58a5b 100644 --- a/src/Riskified/OrderWebhook/Transport/AbstractTransport.php +++ b/src/Riskified/OrderWebhook/Transport/AbstractTransport.php @@ -182,6 +182,16 @@ public function deniedCheckout($checkout) { return $this->send_checkout($checkout, 'checkout_denied'); } + /** + * Send an Advise request to Riskified + * @param $checkout object Checkout to send + * @return object Response object + * @throws \Riskified\Common\Exception\BaseException on any issue + */ + public function adviseOrder($checkout) { + return $this->send_checkout($checkout, 'advise'); + } + /** * Check eligibility for Deco payment * @param $order object Order to send (only order id required) From 417bbb73da62bb6ff067da9f1c32b7aa1a76210e Mon Sep 17 00:00:00 2001 From: Rich Spitkovsky Date: Thu, 11 Jul 2019 12:00:28 -0400 Subject: [PATCH 02/10] add advise file --- src/Riskified/OrderWebhook/Model/Advise.php | 23 +++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 src/Riskified/OrderWebhook/Model/Advise.php diff --git a/src/Riskified/OrderWebhook/Model/Advise.php b/src/Riskified/OrderWebhook/Model/Advise.php new file mode 100644 index 0000000..69c78d3 --- /dev/null +++ b/src/Riskified/OrderWebhook/Model/Advise.php @@ -0,0 +1,23 @@ + Date: Wed, 17 Jul 2019 16:09:49 -0400 Subject: [PATCH 03/10] adding advise to sample and restructure of advise parameters --- sample/order_full_flow.php | 18 ++++++++++++- .../Model/Notification.php | 26 ------------------- .../Model/AuthenticationResult.php | 11 ++++---- .../OrderWebhook/Model/PaymentDetails.php | 2 +- 4 files changed, 24 insertions(+), 33 deletions(-) diff --git a/sample/order_full_flow.php b/sample/order_full_flow.php index 753a6bc..b47cac9 100644 --- a/sample/order_full_flow.php +++ b/sample/order_full_flow.php @@ -114,7 +114,8 @@ 'credit_card_bin' => '370002', 'credit_card_number' => 'xxxx-xxxx-xxxx-1234', 'credit_card_company' => 'VISA', - 'credit_card_token' => '0022334466' + 'credit_card_token' => '0022334466', + '_type' => 'credit_card', ### required for checkout denied: ### # 'authorization_error' => new Model\AuthorizationError(array( @@ -192,6 +193,11 @@ $response = $transport->createCheckout($checkout); echo PHP_EOL."Create Checkout succeeded. Response: ".PHP_EOL.json_encode($response).PHP_EOL; +#### Advise Checkout (uncomment if eligible for /advise) +//$checkout = new Model\Checkout($order_details); +// +//$response = $transport->adviseOrder($checkout); +//echo PHP_EOL."Advise Checkout succeeded. Response: ".PHP_EOL.json_encode($response).PHP_EOL; #### Notify Checkout Denied $response = $transport->deniedCheckout($checkout); @@ -205,6 +211,16 @@ $order->payment_details[0]->avs_result_code = 'Y'; $order->payment_details[0]->cvv_result_code = 'N'; +##REQUIRED FOR PSD2 ORDERS## +//$authenticationResult = new Model\AuthenticationResult(array( +// 'created_at' => '2019-07-17T15:00:00-05:00 +// 'eci' => '07', +// 'cavv' => '05', +// 'trans_status' => 'Y', +// 'trans_status_reason' => '01' +//)); +//$order->authentication_result = $authenticationResult; + $response = $transport->createOrder($order); echo PHP_EOL."Create Order succeeded. Response: ".PHP_EOL.json_encode($response).PHP_EOL; diff --git a/src/Riskified/DecisionNotification/Model/Notification.php b/src/Riskified/DecisionNotification/Model/Notification.php index bd64383..a22e211 100644 --- a/src/Riskified/DecisionNotification/Model/Notification.php +++ b/src/Riskified/DecisionNotification/Model/Notification.php @@ -13,21 +13,17 @@ * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ - /** * Shop URL is available as a notification parameter depending on your account's setup; please contact your Integration Engineer or Account Manager if you have questions on this. * It is a NON-best-practice to use shop URL in the notifications programmatically as this field will not be supported long term in API notifications. */ - use Riskified\DecisionNotification\Exception; - /** * Class Notification * Parses and validates Decision Notification callbacks from Riskified * @package Riskified\DecisionNotification\Model */ class Notification { - /** * @var string Order ID */ @@ -52,19 +48,9 @@ class Notification { * @var string Decision Code of Decision */ public $decisionCode; - /** - * @var integer Risk score (0-99) - */ - public $score; - /** - * @var AuthenticationType details of the authentication for 3DS transactions - */ - public $AuthenticationType; - protected $signature; protected $headers; protected $body; - /** * Inits and validates the request. * @param $signature Signature An instance of a Signature class that handles authentication @@ -76,11 +62,9 @@ public function __construct($signature, $headers, $body) { $this->signature = $signature; $this->headers = $headers; $this->body = $body; - $this->test_authorization(); $this->parse_body(); } - /** * assets that the request authentication is valid * @throws \Riskified\DecisionNotification\Exception\AuthorizationException on HMAC mismatch @@ -92,7 +76,6 @@ protected function test_authorization() { if ($remote_hmac != $local_hmac) throw new Exception\AuthorizationException($this->headers, $this->body, $local_hmac, $remote_hmac); } - /** * extracts parameters from HTTP POST body * @throws \Riskified\DecisionNotification\Exception\BadPostJsonException on bad or missing parameters @@ -101,29 +84,20 @@ protected function parse_body() { $body = json_decode($this->body); if (!array_key_exists('order', $body)) throw new Exception\BadPostJsonException($this->headers, $this->body); - $order = $body->{'order'}; if (!array_key_exists('id', $order) || !array_key_exists('status', $order)) throw new Exception\BadPostJsonException($this->headers, $this->body); - //foreach($order as $key => $value) // $this->$key = $value; $this->id = $order->{'id'}; $this->status = $order->{'status'}; $this->oldStatus = $order->{'old_status'}; $this->description = $order->{'description'}; - if (array_key_exists('category', $order)) { $this->category = $order->{'category'}; } - if (array_key_exists('decision_code', $order)) { $this->decisionCode = $order->{'decision_code'}; } - - if (array_key_exists('score', $order) && array_key_exists('AuthenticationType', $order)) { - $this->score = $order->{'score'}; - $this->AuthenticationType = $order->{'AuthenticationType'}; - } } } diff --git a/src/Riskified/OrderWebhook/Model/AuthenticationResult.php b/src/Riskified/OrderWebhook/Model/AuthenticationResult.php index 6fbbb9a..9d3381d 100644 --- a/src/Riskified/OrderWebhook/Model/AuthenticationResult.php +++ b/src/Riskified/OrderWebhook/Model/AuthenticationResult.php @@ -23,10 +23,11 @@ class AuthenticationResult extends AbstractModel { protected $_fields = array( - 'created_at' => 'string optional', - 'result_code' => 'string optional', - 'result_reason_code' => 'string optional', + 'created_at' => 'date optional', + 'eci' => 'string /^(:?05|06|07)$/', + 'cavv' => 'string optional', + 'trans_status' => 'string /^(:?Y|N|U|A|C|D|R|I)$/ optional', + 'trans_status_reason' => 'string /^(:?01|02|03|04|05|06|07|08|09|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|80|99)$/ optional' ); -} - +} \ No newline at end of file diff --git a/src/Riskified/OrderWebhook/Model/PaymentDetails.php b/src/Riskified/OrderWebhook/Model/PaymentDetails.php index 2a6c1a0..cfcee29 100644 --- a/src/Riskified/OrderWebhook/Model/PaymentDetails.php +++ b/src/Riskified/OrderWebhook/Model/PaymentDetails.php @@ -37,7 +37,7 @@ class PaymentDetails extends AbstractModel { 'pending_reason' => 'string optional', 'authorization_id' => 'string optional', - '_type' => 'string optional', + '_type' => 'string /^(:?credit_card|paypal)$/ optional', 'id' => 'string optional', 'gateway' => 'string optional', 'acquirer_bin' => 'string optional', From 9b1d93e7413b07a98ccdbc131985fdc544bfe4c6 Mon Sep 17 00:00:00 2001 From: Rich Spitkovsky Date: Wed, 17 Jul 2019 16:16:34 -0400 Subject: [PATCH 04/10] add spacing to Notification to mirror master --- .../DecisionNotification/Model/Notification.php | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/Riskified/DecisionNotification/Model/Notification.php b/src/Riskified/DecisionNotification/Model/Notification.php index a22e211..ed91266 100644 --- a/src/Riskified/DecisionNotification/Model/Notification.php +++ b/src/Riskified/DecisionNotification/Model/Notification.php @@ -13,17 +13,21 @@ * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ + /** * Shop URL is available as a notification parameter depending on your account's setup; please contact your Integration Engineer or Account Manager if you have questions on this. * It is a NON-best-practice to use shop URL in the notifications programmatically as this field will not be supported long term in API notifications. */ + use Riskified\DecisionNotification\Exception; + /** * Class Notification * Parses and validates Decision Notification callbacks from Riskified * @package Riskified\DecisionNotification\Model */ class Notification { + /** * @var string Order ID */ @@ -48,9 +52,11 @@ class Notification { * @var string Decision Code of Decision */ public $decisionCode; + protected $signature; protected $headers; protected $body; + /** * Inits and validates the request. * @param $signature Signature An instance of a Signature class that handles authentication @@ -62,9 +68,11 @@ public function __construct($signature, $headers, $body) { $this->signature = $signature; $this->headers = $headers; $this->body = $body; + $this->test_authorization(); $this->parse_body(); } + /** * assets that the request authentication is valid * @throws \Riskified\DecisionNotification\Exception\AuthorizationException on HMAC mismatch @@ -76,6 +84,7 @@ protected function test_authorization() { if ($remote_hmac != $local_hmac) throw new Exception\AuthorizationException($this->headers, $this->body, $local_hmac, $remote_hmac); } + /** * extracts parameters from HTTP POST body * @throws \Riskified\DecisionNotification\Exception\BadPostJsonException on bad or missing parameters @@ -85,17 +94,21 @@ protected function parse_body() { if (!array_key_exists('order', $body)) throw new Exception\BadPostJsonException($this->headers, $this->body); $order = $body->{'order'}; + if (!array_key_exists('id', $order) || !array_key_exists('status', $order)) throw new Exception\BadPostJsonException($this->headers, $this->body); + //foreach($order as $key => $value) // $this->$key = $value; $this->id = $order->{'id'}; $this->status = $order->{'status'}; $this->oldStatus = $order->{'old_status'}; $this->description = $order->{'description'}; + if (array_key_exists('category', $order)) { $this->category = $order->{'category'}; } + if (array_key_exists('decision_code', $order)) { $this->decisionCode = $order->{'decision_code'}; } From c9f4597ce4b7ef470933034d0ae51ac4555417a6 Mon Sep 17 00:00:00 2001 From: Rich Spitkovsky Date: Mon, 22 Jul 2019 11:29:03 -0400 Subject: [PATCH 05/10] changing id type to integer --- src/Riskified/OrderWebhook/Model/Advise.php | 23 ------------------- .../OrderWebhook/Model/PaymentDetails.php | 2 +- 2 files changed, 1 insertion(+), 24 deletions(-) delete mode 100644 src/Riskified/OrderWebhook/Model/Advise.php diff --git a/src/Riskified/OrderWebhook/Model/Advise.php b/src/Riskified/OrderWebhook/Model/Advise.php deleted file mode 100644 index 69c78d3..0000000 --- a/src/Riskified/OrderWebhook/Model/Advise.php +++ /dev/null @@ -1,23 +0,0 @@ - 'string optional', '_type' => 'string /^(:?credit_card|paypal)$/ optional', - 'id' => 'string optional', + 'id' => 'number optional', 'gateway' => 'string optional', 'acquirer_bin' => 'string optional', 'mid' => 'string optional', From da21e881f4d9ad5e3123c2da7855b9fbc25d13c3 Mon Sep 17 00:00:00 2001 From: Rich Spitkovsky Date: Mon, 22 Jul 2019 13:36:26 -0400 Subject: [PATCH 06/10] add missing comma --- sample/order_full_flow.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sample/order_full_flow.php b/sample/order_full_flow.php index b47cac9..bd4a8f4 100644 --- a/sample/order_full_flow.php +++ b/sample/order_full_flow.php @@ -213,7 +213,7 @@ ##REQUIRED FOR PSD2 ORDERS## //$authenticationResult = new Model\AuthenticationResult(array( -// 'created_at' => '2019-07-17T15:00:00-05:00 +// 'created_at' => '2019-07-17T15:00:00-05:00', // 'eci' => '07', // 'cavv' => '05', // 'trans_status' => 'Y', From 539d7b2866ce38b967c2a2b1c758b2bce2b3b930 Mon Sep 17 00:00:00 2001 From: Rich Spitkovsky Date: Tue, 20 Aug 2019 10:48:27 -0400 Subject: [PATCH 07/10] moved authentication result to payment details from order base --- sample/order_full_flow.php | 2 +- src/Riskified/OrderWebhook/Model/Order.php | 4 +--- src/Riskified/OrderWebhook/Model/PaymentDetails.php | 1 + 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/sample/order_full_flow.php b/sample/order_full_flow.php index bd4a8f4..6a47ffc 100644 --- a/sample/order_full_flow.php +++ b/sample/order_full_flow.php @@ -219,7 +219,7 @@ // 'trans_status' => 'Y', // 'trans_status_reason' => '01' //)); -//$order->authentication_result = $authenticationResult; +//$order->payment_details[0]->$authenticationResult; $response = $transport->createOrder($order); echo PHP_EOL."Create Order succeeded. Response: ".PHP_EOL.json_encode($response).PHP_EOL; diff --git a/src/Riskified/OrderWebhook/Model/Order.php b/src/Riskified/OrderWebhook/Model/Order.php index af2b881..6ac17ba 100644 --- a/src/Riskified/OrderWebhook/Model/Order.php +++ b/src/Riskified/OrderWebhook/Model/Order.php @@ -89,8 +89,6 @@ class Order extends AbstractModel { 'decision' => 'object \DecisionDetails optional', - 'charge_free_payment_details' => 'object\ChargeFreePaymentDetails optional', - - 'authentication_result' => 'object \AuthenticationResult optional' + 'charge_free_payment_details' => 'object\ChargeFreePaymentDetails optional' ); } diff --git a/src/Riskified/OrderWebhook/Model/PaymentDetails.php b/src/Riskified/OrderWebhook/Model/PaymentDetails.php index 083164f..7abc6ed 100644 --- a/src/Riskified/OrderWebhook/Model/PaymentDetails.php +++ b/src/Riskified/OrderWebhook/Model/PaymentDetails.php @@ -42,6 +42,7 @@ class PaymentDetails extends AbstractModel { 'gateway' => 'string optional', 'acquirer_bin' => 'string optional', 'mid' => 'string optional', + 'authentication_result' => 'object \AuthenticationResult optional', 'account_number' => 'string optional', 'routing_number' => 'string optional', From 532aa0dd3760a2a003306655e7b7dbf8f4e1d7dd Mon Sep 17 00:00:00 2001 From: Rich Spitkovsky Date: Tue, 20 Aug 2019 10:57:10 -0400 Subject: [PATCH 08/10] added liability shift to authentication result --- sample/order_full_flow.php | 5 +++-- src/Riskified/DecisionNotification/Model/Notification.php | 4 ++-- src/Riskified/OrderWebhook/Model/AuthenticationResult.php | 3 ++- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/sample/order_full_flow.php b/sample/order_full_flow.php index 6a47ffc..cba2267 100644 --- a/sample/order_full_flow.php +++ b/sample/order_full_flow.php @@ -115,7 +115,7 @@ 'credit_card_number' => 'xxxx-xxxx-xxxx-1234', 'credit_card_company' => 'VISA', 'credit_card_token' => '0022334466', - '_type' => 'credit_card', + '_type' => 'credit_card' ### required for checkout denied: ### # 'authorization_error' => new Model\AuthorizationError(array( @@ -217,7 +217,8 @@ // 'eci' => '07', // 'cavv' => '05', // 'trans_status' => 'Y', -// 'trans_status_reason' => '01' +// 'trans_status_reason' => '01', +// 'liability_shift' => true //)); //$order->payment_details[0]->$authenticationResult; diff --git a/src/Riskified/DecisionNotification/Model/Notification.php b/src/Riskified/DecisionNotification/Model/Notification.php index ed91266..89680ba 100644 --- a/src/Riskified/DecisionNotification/Model/Notification.php +++ b/src/Riskified/DecisionNotification/Model/Notification.php @@ -93,8 +93,8 @@ protected function parse_body() { $body = json_decode($this->body); if (!array_key_exists('order', $body)) throw new Exception\BadPostJsonException($this->headers, $this->body); - $order = $body->{'order'}; + $order = $body->{'order'}; if (!array_key_exists('id', $order) || !array_key_exists('status', $order)) throw new Exception\BadPostJsonException($this->headers, $this->body); @@ -108,7 +108,7 @@ protected function parse_body() { if (array_key_exists('category', $order)) { $this->category = $order->{'category'}; } - + if (array_key_exists('decision_code', $order)) { $this->decisionCode = $order->{'decision_code'}; } diff --git a/src/Riskified/OrderWebhook/Model/AuthenticationResult.php b/src/Riskified/OrderWebhook/Model/AuthenticationResult.php index 9d3381d..0c1eb6b 100644 --- a/src/Riskified/OrderWebhook/Model/AuthenticationResult.php +++ b/src/Riskified/OrderWebhook/Model/AuthenticationResult.php @@ -27,7 +27,8 @@ class AuthenticationResult extends AbstractModel 'eci' => 'string /^(:?05|06|07)$/', 'cavv' => 'string optional', 'trans_status' => 'string /^(:?Y|N|U|A|C|D|R|I)$/ optional', - 'trans_status_reason' => 'string /^(:?01|02|03|04|05|06|07|08|09|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|80|99)$/ optional' + 'trans_status_reason' => 'string /^(:?01|02|03|04|05|06|07|08|09|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|80|99)$/ optional', + 'liability_shift' => 'boolean' ); } \ No newline at end of file From da4e683726254a4d8d6fec97d4527edd449a1165 Mon Sep 17 00:00:00 2001 From: Rich Spitkovsky Date: Wed, 21 Aug 2019 12:54:09 -0400 Subject: [PATCH 09/10] fix authentication_result error in sample --- sample/order_full_flow.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sample/order_full_flow.php b/sample/order_full_flow.php index cba2267..f2ceed2 100644 --- a/sample/order_full_flow.php +++ b/sample/order_full_flow.php @@ -220,7 +220,7 @@ // 'trans_status_reason' => '01', // 'liability_shift' => true //)); -//$order->payment_details[0]->$authenticationResult; +//$order->payment_details[0]->authentication_result = $authenticationResult; $response = $transport->createOrder($order); echo PHP_EOL."Create Order succeeded. Response: ".PHP_EOL.json_encode($response).PHP_EOL; From e9fac91f8256fead564f101cc3edf43ba74e8c45 Mon Sep 17 00:00:00 2001 From: Rich Spitkovsky Date: Wed, 21 Aug 2019 12:59:42 -0400 Subject: [PATCH 10/10] make liability shift optional parameter --- src/Riskified/OrderWebhook/Model/AuthenticationResult.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Riskified/OrderWebhook/Model/AuthenticationResult.php b/src/Riskified/OrderWebhook/Model/AuthenticationResult.php index 0c1eb6b..015478d 100644 --- a/src/Riskified/OrderWebhook/Model/AuthenticationResult.php +++ b/src/Riskified/OrderWebhook/Model/AuthenticationResult.php @@ -28,7 +28,7 @@ class AuthenticationResult extends AbstractModel 'cavv' => 'string optional', 'trans_status' => 'string /^(:?Y|N|U|A|C|D|R|I)$/ optional', 'trans_status_reason' => 'string /^(:?01|02|03|04|05|06|07|08|09|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|80|99)$/ optional', - 'liability_shift' => 'boolean' + 'liability_shift' => 'boolean optional' ); } \ No newline at end of file