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

Fixes for updating stripe customer metadata

parent 6d3c5044
Branches
Tags
1 merge request!2096.8
......@@ -10,7 +10,6 @@ class CRM_Stripe_BAO_StripeCustomer extends CRM_Stripe_DAO_StripeCustomer {
/**
* @param int $contactID
* @param string|null $email
* @param array $invoiceSettings
* @param string|null $description
*
......@@ -18,7 +17,7 @@ class CRM_Stripe_BAO_StripeCustomer extends CRM_Stripe_DAO_StripeCustomer {
* @throws \CRM_Core_Exception
* @throws \Civi\API\Exception\UnauthorizedException
*/
public static function getStripeCustomerMetadata(int $contactID, ?string $email = NULL, array $invoiceSettings = [], ?string $description = NULL) {
public static function getStripeCustomerMetadata(int $contactID, array $invoiceSettings = [], ?string $description = NULL) {
$contact = Contact::get(FALSE)
->addSelect('display_name', 'email_primary.email', 'email_billing.email')
->addWhere('id', '=', $contactID)
......@@ -56,7 +55,7 @@ class CRM_Stripe_BAO_StripeCustomer extends CRM_Stripe_DAO_StripeCustomer {
'CiviCRM Version' => CRM_Utils_System::version() . ' ' . $extVersion,
],
];
$email = $email ?? $contact['email_primary.email'] ?? $contact['email_billing.email'] ?? NULL;
$email = $contact['email_primary.email'] ?? $contact['email_billing.email'] ?? NULL;
if ($email) {
$stripeCustomerParams['email'] = $email;
}
......@@ -85,7 +84,7 @@ class CRM_Stripe_BAO_StripeCustomer extends CRM_Stripe_DAO_StripeCustomer {
}
}
$stripeCustomerParams = CRM_Stripe_BAO_StripeCustomer::getStripeCustomerMetadata($params['contact_id'], $params['email'] ?? NULL, $params['invoice_settings'] ?? [], $params['description'] ?? NULL);
$stripeCustomerParams = CRM_Stripe_BAO_StripeCustomer::getStripeCustomerMetadata($params['contact_id'], $params['invoice_settings'] ?? [], $params['description'] ?? NULL);
try {
$stripeCustomer = $stripe->stripeClient->customers->update($stripeCustomerID, $stripeCustomerParams);
......
......@@ -107,7 +107,7 @@ class CRM_Stripe_Customer {
}
}
$stripeCustomerParams = CRM_Stripe_BAO_StripeCustomer::getStripeCustomerMetadata($params['contact_id'], $params['email'] ?? NULL, $params['invoice_settings'] ?? []);
$stripeCustomerParams = CRM_Stripe_BAO_StripeCustomer::getStripeCustomerMetadata($params['contact_id'], $params['invoice_settings'] ?? []);
try {
$stripeCustomer = $stripe->stripeClient->customers->create($stripeCustomerParams);
......
......@@ -94,7 +94,7 @@ class UpdateStripe extends \Civi\Api4\Generic\AbstractAction {
/** @var \CRM_Core_Payment_Stripe $paymentProcessor */
$paymentProcessor = \Civi\Payment\System::singleton()->getById($this->paymentProcessorID);
$stripeCustomer = \CRM_Stripe_BAO_StripeCustomer::updateMetadata(['contact_id' => $this->contactID, 'email' => $this->email, 'description' => $this->description], $paymentProcessor, $this->customerID);
$stripeCustomer = \CRM_Stripe_BAO_StripeCustomer::updateMetadata(['contact_id' => $this->contactID, 'description' => $this->description], $paymentProcessor, $this->customerID);
$result->exchangeArray($stripeCustomer->toArray());
}
......
......@@ -175,7 +175,7 @@ function civicrm_api3_stripe_customer_updatestripemetadata($params) {
throw new PaymentProcessorException('Failed to retrieve Stripe Customer: ' . $err['code']);
}
$stripeCustomerParams = CRM_Stripe_BAO_StripeCustomer::getStripeCustomerMetadata($customer['contact_id'], $customer['email'] ?? NULL, $customer['invoice_settings'] ?? []);
$stripeCustomerParams = CRM_Stripe_BAO_StripeCustomer::getStripeCustomerMetadata($customer['contact_id'], $customer['invoice_settings'] ?? []);
// Update the stripe customer object at stripe
if (!$params['dryrun']) {
......
......@@ -274,45 +274,45 @@ function stripe_civicrm_post($op, $objectName, $objectId, &$objectRef) {
break;
case 'edit':
try {
// Does the contact have a Stripe customer record?
$stripeCustomers = \Civi\Api4\StripeCustomer::get(FALSE)
->addWhere('contact_id', '=', $objectId)
->execute();
// Update the contact details at Stripe for each customer associated with this contact
foreach ($stripeCustomers as $stripeCustomer) {
\Civi\Api4\StripeCustomer::updateStripe(FALSE)
->setCustomerID($stripeCustomer['customer_id'])
->execute();
}
}
catch (Exception $e) {
\Civi::log(E::SHORT_NAME)->error('Stripe Contact update failed: ' . $e->getMessage());
}
register_shutdown_function('stripe_civicrm_shutdown_updatestripecustomer', $objectId);
}
break;
case 'Email':
if (in_array($op, ['create', 'edit']) && ((int)$objectRef->is_primary === 1)) {
try {
// Does the contact have a Stripe customer record?
$stripeCustomers = \Civi\Api4\StripeCustomer::get(FALSE)
->addWhere('contact_id', '=', $objectRef->contact_id)
->execute();
// Update the email address at Stripe for each customer associated with this contact
foreach ($stripeCustomers as $stripeCustomer) {
\Civi\Api4\StripeCustomer::updateStripe(FALSE)
->setCustomerID($stripeCustomer['customer_id'])
->setEmail($objectRef->email)
->execute();
}
}
catch (Exception $e) {
\Civi::log(E::SHORT_NAME)->error('Stripe Contact update email failed: ' . $e->getMessage());
}
if (in_array($op, ['create', 'edit'])) {
register_shutdown_function('stripe_civicrm_shutdown_updatestripecustomer', $objectRef->contact_id);
}
}
}
/**
* Update the Stripe Customers for a contact (metadata)
*
* @param int $contactID
*
* @return void
*/
function stripe_civicrm_shutdown_updatestripecustomer(int $contactID) {
if (isset(\Civi::$statics['stripe_civicrm_shutdown_updatestripecustomer'][$contactID])) {
// Don't run the update more than once
return;
}
\Civi::$statics['stripe_civicrm_shutdown_updatestripecustomer'][$contactID] = TRUE;
default:
return;
try {
// Does the contact have a Stripe customer record?
$stripeCustomers = \Civi\Api4\StripeCustomer::get(FALSE)
->addWhere('contact_id', '=', $contactID)
->execute();
// Update the contact details at Stripe for each customer associated with this contact
foreach ($stripeCustomers as $stripeCustomer) {
\Civi\Api4\StripeCustomer::updateStripe(FALSE)
->setCustomerID($stripeCustomer['customer_id'])
->execute();
}
}
catch (Exception $e) {
\Civi::log(E::SHORT_NAME)->error('Stripe Contact update failed: ' . $e->getMessage());
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment