[interchange: 1/2] Prevent the function to crash when the response is unparsable
Jon Jensen <[email protected]> Thu, 22 Mar 2018 15:20:55 +0000
| Newsgroups | gmane.comp.web.interchange.cvs |
|---|---|
| Message-ID | <[email protected]> |
commit 526513bd12760f8f5d8fd9c69cf4062413dddf84 Author: Marco Pessotto <[email protected]> Date: Thu Apr 3 15:06:43 2014 +0200 Prevent the function to crash when the response is unparsable Background: it looks like SOAP::Lite sometimes (or always?) fails to escape some entities (notably &). In this case the charging route crashes, because $response->valueof('//SetExpressCheckoutResponse') just returns undef. This patch basically prevent the charge action to complete and set the redirection to the checkout, the same way as it would have failed for other reasons. lib/Vend/Payment/PaypalExpress.pm | 8 +++++++- 1 files changed, 7 insertions(+), 1 deletions(-) --- diff --git a/lib/Vend/Payment/PaypalExpress.pm b/lib/Vend/Payment/PaypalExpress.pm index 6a0ff48..1a892fa 100644 --- a/lib/Vend/Payment/PaypalExpress.pm +++ b/lib/Vend/Payment/PaypalExpress.pm @@ -911,7 +911,13 @@ sub paypalexpress { $method = SOAP::Data->name('SetExpressCheckoutReq')->attr({xmlns=>$xmlns}); $response = $service->call($header, $method => $request); - %result = %{$response->valueof('//SetExpressCheckoutResponse')}; + + my $result_hashref = $response->valueof('//SetExpressCheckoutResponse'); + unless ($result_hashref) { + $Tag->error({ name => 'paypal_failure', set => errmsg('Unable to parse the PayPal response') }); + return $Tag->deliver({ location => $checkouturl }); + } + %result = %$result_hashref; $::Scratch->{'token'} = $result{'Token'}; if (!$result{'Token'}) {