diff --git a/api/v3/Stripe/Listevents.php b/api/v3/Stripe/Listevents.php index 2d2a873298e22f3b2dda6866be88a98afde9a177..d5ca427b9464da5b6354c88433749982ea99e67b 100644 --- a/api/v3/Stripe/Listevents.php +++ b/api/v3/Stripe/Listevents.php @@ -206,10 +206,6 @@ function civicrm_api3_stripe_Listevents($params) { $processor->setAPIParams(); $data_list = \Stripe\Event::all($args); - if (array_key_exists('error', $data_list)) { - $err = $data_list['error']; - throw new API_Exception(/*errorMessage*/ "Stripe returned an error: " . $err->message, /*errorCode*/ $err->type); - } $out = $data_list; if ($params['output'] == 'brief') { $out = []; diff --git a/tests/phpunit/CRM/Stripe/IpnTest.php b/tests/phpunit/CRM/Stripe/IpnTest.php index 6384478e8a8c6a8567bb26c05fcdbd4b952d7699..f43aa521e6d089760d791fc14f8fc5eb79f4b57a 100644 --- a/tests/phpunit/CRM/Stripe/IpnTest.php +++ b/tests/phpunit/CRM/Stripe/IpnTest.php @@ -48,6 +48,7 @@ class CRM_Stripe_IpnTest extends CRM_Stripe_BaseTest { $payment_extra_params = [ 'is_recur' => 1, 'contributionRecurID' => $this->contributionRecurID, + 'contributionID' => $this->contributionID, 'frequency_unit' => $this->frequency_unit, 'frequency_interval' => $this->frequency_interval, 'installments' => $this->installments, @@ -55,7 +56,7 @@ class CRM_Stripe_IpnTest extends CRM_Stripe_BaseTest { $this->doPayment($payment_extra_params); // Ensure contribution status is set to pending. - $status_id = civicrm_api3('Contribution', 'getvalue', [ 'id' => $this->contributionID, 'return' => 'contribution_status_id' ]); + $status_id = civicrm_api3('Contribution', 'getvalue', ['id' => $this->contributionID, 'return' => 'contribution_status_id']); $this->assertEquals(2, $status_id); // Now check to see if an event was triggered and if so, process it. @@ -64,7 +65,7 @@ class CRM_Stripe_IpnTest extends CRM_Stripe_BaseTest { $this->ipn($payment_object); } // Ensure Contribution status is updated to complete. - $status_id = civicrm_api3('Contribution', 'getvalue', [ 'id' => $this->contributionID, 'return' => 'contribution_status_id' ]); + $status_id = civicrm_api3('Contribution', 'getvalue', ['id' => $this->contributionID, 'return' => 'contribution_status_id']); $this->assertEquals(1, $status_id); } @@ -90,25 +91,35 @@ class CRM_Stripe_IpnTest extends CRM_Stripe_BaseTest { // Now try to retrieve this transaction. // Give it a few seconds to be processed... sleep(5); - $transactions = civicrm_api3('Stripe', 'listevents', $params ); + $transactions = civicrm_api3('Stripe', 'listevents', $params); foreach($transactions['values']['data'] as $transaction) { if ($transaction->data->object->$property == $this->processorID) { return $transaction; } } return NULL; - } /** * Run the webhook/ipn * */ - public function ipn($data, $verify = TRUE) { - // The $_GET['processor_id'] value is normally set by - // CRM_Core_Payment::handlePaymentMethod - $_GET['processor_id'] = $this->paymentProcessorID; - $ipnClass = new CRM_Core_Payment_StripeIPN($data, $verify); + public function ipn($event, $verifyRequest = TRUE) { + $ipnClass = new CRM_Core_Payment_StripeIPN(); + $ipnClass->setEventID($event->id); + if (!$ipnClass->setEventType($event->type)) { + // We don't handle this event + return FALSE; + }; + $ipnClass->setVerifyData($verifyRequest); + if (!$verifyRequest) { + $ipnClass->setData($event->data); + } + $ipnClass->setPaymentProcessor($this->paymentProcessorID); + $ipnClass->setExceptionMode(FALSE); + if (isset($emailReceipt)) { + $ipnClass->setSendEmailReceipt($emailReceipt); + } $ipnClass->processWebhook(); }