Skip to content
Snippets Groups Projects
Commit 64e19d2f authored by mattwire's avatar mattwire
Browse files

Set invoice_id/subscription_id for recur on checkout.session.completed

parent 3fd0ab8f
Branches
Tags
1 merge request!217Implement Stripe Checkout (with support for SEPA and ACH)
......@@ -164,13 +164,19 @@ class CRM_Stripe_Api {
case 'checkout.session':
switch ($name) {
case 'payment_intent_id':
return (string) $stripeObject->payment_intent ?? '';
return (string) $stripeObject->payment_intent;
case 'checkout_session_id':
return (string) $stripeObject->id;
case 'client_reference_id':
return (string) $stripeObject->client_reference_id;
case 'subscription_id':
return (string) $stripeObject->subscription;
case 'invoice_id':
return (string) $stripeObject->invoice;
}
break;
......
......@@ -12,6 +12,7 @@
namespace Civi\Stripe\Webhook;
use Civi\Api4\Contribution;
use Civi\Api4\ContributionRecur;
use CRM_Stripe_ExtensionUtil as E;
class Events {
......@@ -185,7 +186,7 @@ class Events {
return;
}
$contributionRecur = \Civi\Api4\ContributionRecur::get(FALSE)
$contributionRecur = ContributionRecur::get(FALSE)
->addWhere('id', '=', $contributionRecurID)
->execute()
->first();
......@@ -221,7 +222,7 @@ class Events {
}
// Get the recurring contribution record associated with the Stripe subscription.
$contributionRecur = \Civi\Api4\ContributionRecur::get(FALSE)
$contributionRecur = ContributionRecur::get(FALSE)
->addWhere('processor_id', '=', $subscriptionID)
->addWhere('is_test', 'IN', [TRUE, FALSE])
->execute()
......@@ -388,29 +389,49 @@ class Events {
return $return;
}
$contribution = Contribution::get(FALSE)
->addWhere('invoice_id', '=', $clientReferenceID)
->addWhere('is_test', 'IN', [TRUE, FALSE])
->execute()
->first();
if (empty($contribution)) {
$return->message = __FUNCTION__ . ' contribution not found for client_reference_id';
return $return;
}
// For one-off we have a paymentintentID
$paymentIntentID = $this->getValueFromStripeObject('payment_intent_id', 'String');
if (!$paymentIntentID) {
$return->message = __FUNCTION__ . ' Missing payment_intent ID';
return $return;
}
// For subscription we have invoice + subscription
$invoiceID = $this->getValueFromStripeObject('invoice_id', 'String');
$subscriptionID = $this->getValueFromStripeObject('subscription_id', 'String');
$contribution = \Civi\Api4\Contribution::get(FALSE)
->addWhere('invoice_id', '=', $clientReferenceID)
->addWhere('is_test', 'IN', [TRUE, FALSE])
->execute()
->first();
if (empty($contribution)) {
$return->message = __FUNCTION__ . ' contribution not found for client_reference_id';
if (!empty($invoiceID)) {
$contributionTrxnID = $invoiceID;
}
elseif (!empty($paymentIntentID)) {
$contributionTrxnID = $paymentIntentID;
}
else {
$return->message = __FUNCTION__ . ' Missing invoiceID or paymentIntentID';
return $return;
}
\Civi\Api4\Contribution::update(FALSE)
Contribution::update(FALSE)
->addWhere('id', '=', $contribution['id'])
->addValue('trxn_id', $paymentIntentID)
->addValue('trxn_id', $contributionTrxnID)
->execute();
if (!empty($subscriptionID) && !empty($contribution['contribution_recur_id'])) {
ContributionRecur::update(FALSE)
->addWhere('id', '=', $contribution['contribution_recur_id'])
->addValue('processor_id', $subscriptionID)
->execute();
}
$return->message = __FUNCTION__ . ' contributionID: ' . $contribution['id'];
$return->ok = TRUE;
return $return;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment