From 3d75dd52bcf09a282f64ce390bbc7350f184e059 Mon Sep 17 00:00:00 2001
From: assist-dev <drupal@tooticky>
Date: Sun, 3 Mar 2019 17:53:26 +0100
Subject: [PATCH] Resolves #34 - gets test contributions related to a recurring
 contribution.

Also added finer grained exception handling around that API call.
---
 CRM/Core/Payment/StripeIPN.php | 18 ++++++++++++------
 1 file changed, 12 insertions(+), 6 deletions(-)

diff --git a/CRM/Core/Payment/StripeIPN.php b/CRM/Core/Payment/StripeIPN.php
index b907f93c..48f0e2e1 100644
--- a/CRM/Core/Payment/StripeIPN.php
+++ b/CRM/Core/Payment/StripeIPN.php
@@ -440,23 +440,29 @@ class CRM_Core_Payment_StripeIPN extends CRM_Core_Payment_BaseIPN {
 
     // Additional processing of values is only relevant if there is a subscription id.
     if ($this->subscription_id) {
-      // Get info related to recurring contributions.
+      // Get the recurring contribution record associated with the Stripe subscription.
       try {
         $contributionRecur = civicrm_api3('ContributionRecur', 'getsingle', ['trxn_id' => $this->subscription_id]);
         $this->contribution_recur_id = $contributionRecur['id'];
-
-        // Same approach as api repeattransaction. Find last contribution associated
-        // with our recurring contribution.
+      }
+      catch (Exception $e) {
+        $this->exception('Cannot find recurring contribution for subscription ID: ' . $this->subscription_id . '. ' . $e->getMessage());
+      }
+    }
+    // If a recurring contribution has been found, get the most recent contribution belonging to it.
+    if ($this->contribution_recur_id) {
+      try {
+        // Same approach as api repeattransaction.
         $contribution = civicrm_api3('contribution', 'getsingle', array(
           'return' => array('id', 'contribution_status_id', 'total_amount', 'trxn_id'),
           'contribution_recur_id' => $this->contribution_recur_id,
-          'contribution_test' => $this->_paymentProcessor['is_test'],
+          'contribution_test' => isset($this->_paymentProcessor['is_test']) && $this->_paymentProcessor['is_test'] ? 1 : 0,
           'options' => array('limit' => 1, 'sort' => 'id DESC'),
         ));
         $this->previous_contribution = $contribution;
       }
       catch (Exception $e) {
-        $this->exception('Cannot find recurring contribution for subscription ID: ' . $this->subscription_id . '. ' . $e->getMessage());
+        $this->exception('Cannot find any contributions with recurring contribution ID: ' . $this->contribution_recur_id . '. ' . $e->getMessage());
       }
     }
   }
-- 
GitLab