У меня есть вебхук, который отправляет электронное письмо новым клиентам на основе счета-фактуры. оплачено каждый раз, когда новый клиент регистрируется.
У меня также есть электронное письмо, которое отправляется когда клиенты обновляют свой способ оплаты, используя customer.updated.
Теперь, поскольку регистрация нового клиента также запускает событие customer.updated, у меня есть чтобы как-то отфильтровать, чтобы электронное письмо об изменении способа оплаты отправлялось только существующим клиентам. Я делаю это, проверяя предыдущий способ оплаты.
Вот как я пытаюсь это сделать, но электронное письмо со способом оплаты по-прежнему инициируется каждым новым клиентом. Почему?
Есть ли лучший способ отправить электронное письмо об изменении способа оплаты только существующим клиентам?
case 'customer.updated':
$customer = $event->data->object;
$customerId = $customer->id;
$previousAttributes = $event->data->previous_attributes;
// Check if invoice_settings.default_payment_method OR default_source has changed
$newDefaultPaymentMethodId = $customer->invoice_settings->default_payment_method ?? null;
$newDefaultSourceId = $customer->default_source ?? null;
// Check if there was a previous default payment method or source
$hadPreviousPaymentMethod = isset($previousAttributes['invoice_settings']['default_payment_method']) || isset($previousAttributes['default_source']);
// Only proceed if there was a previous payment method or source
if ($hadPreviousPaymentMethod) {
$oldDefaultPaymentMethodId = $previousAttributes['invoice_settings']['default_payment_method'] ?? null;
$oldDefaultSourceId = $previousAttributes['default_source'] ?? null;
if ($newDefaultPaymentMethodId !== $oldDefaultPaymentMethodId || $newDefaultSourceId !== $oldDefaultSourceId) {
// Retrieve the new default payment method or source details
$paymentMethodId = $newDefaultPaymentMethodId ?: $newDefaultSourceId;
try {
$paymentMethod = \Stripe\PaymentMethod::retrieve($paymentMethodId);
$paymentMethodType = $paymentMethod->type;
$brand = '';
$last4 = '';
$exp_month = '';
$exp_year = '';
// Handle card payment method
if ($paymentMethodType === 'card') {
$last4 = $paymentMethod->card->last4;
$exp_month = sprintf("%02d", $paymentMethod->card->exp_month);
$exp_year = $paymentMethod->card->exp_year;
$brand = ucwords($paymentMethod->card->brand);
}
// Handle LINK payment method (or any other)
elseif ($paymentMethodType === 'link') {
$brand = 'LINK account';
}
// You can add more conditions for other payment types here
} catch (\Stripe\Exception\ApiErrorException $e) {
logError('Error retrieving payment method.' . $e->getMessage());
}
// Notify user
SEND EMAIL
}
}
break;
Подробнее здесь: https://stackoverflow.com/questions/790 ... hod-update
Stripe: новый клиент запускает обновление способа оплаты ⇐ Php
Кемеровские программисты php общаются здесь
-
Anonymous
1727138310
Anonymous
У меня есть вебхук, который отправляет электронное письмо новым клиентам на основе счета-фактуры. оплачено каждый раз, когда новый клиент регистрируется.
У меня также есть электронное письмо, которое отправляется когда клиенты обновляют свой способ оплаты, используя customer.updated.
Теперь, поскольку регистрация нового клиента также запускает событие customer.updated, у меня есть чтобы как-то отфильтровать, чтобы электронное письмо об изменении способа оплаты отправлялось только существующим клиентам. Я делаю это, проверяя предыдущий способ оплаты.
Вот как я пытаюсь это сделать, но электронное письмо со способом оплаты по-прежнему инициируется каждым новым клиентом. Почему?
Есть ли лучший способ отправить электронное письмо об изменении способа оплаты только существующим клиентам?
case 'customer.updated':
$customer = $event->data->object;
$customerId = $customer->id;
$previousAttributes = $event->data->previous_attributes;
// Check if invoice_settings.default_payment_method OR default_source has changed
$newDefaultPaymentMethodId = $customer->invoice_settings->default_payment_method ?? null;
$newDefaultSourceId = $customer->default_source ?? null;
// Check if there was a previous default payment method or source
$hadPreviousPaymentMethod = isset($previousAttributes['invoice_settings']['default_payment_method']) || isset($previousAttributes['default_source']);
// Only proceed if there was a previous payment method or source
if ($hadPreviousPaymentMethod) {
$oldDefaultPaymentMethodId = $previousAttributes['invoice_settings']['default_payment_method'] ?? null;
$oldDefaultSourceId = $previousAttributes['default_source'] ?? null;
if ($newDefaultPaymentMethodId !== $oldDefaultPaymentMethodId || $newDefaultSourceId !== $oldDefaultSourceId) {
// Retrieve the new default payment method or source details
$paymentMethodId = $newDefaultPaymentMethodId ?: $newDefaultSourceId;
try {
$paymentMethod = \Stripe\PaymentMethod::retrieve($paymentMethodId);
$paymentMethodType = $paymentMethod->type;
$brand = '';
$last4 = '';
$exp_month = '';
$exp_year = '';
// Handle card payment method
if ($paymentMethodType === 'card') {
$last4 = $paymentMethod->card->last4;
$exp_month = sprintf("%02d", $paymentMethod->card->exp_month);
$exp_year = $paymentMethod->card->exp_year;
$brand = ucwords($paymentMethod->card->brand);
}
// Handle LINK payment method (or any other)
elseif ($paymentMethodType === 'link') {
$brand = 'LINK account';
}
// You can add more conditions for other payment types here
} catch (\Stripe\Exception\ApiErrorException $e) {
logError('Error retrieving payment method.' . $e->getMessage());
}
// Notify user
SEND EMAIL
}
}
break;
Подробнее здесь: [url]https://stackoverflow.com/questions/79016636/stripe-new-customer-triggers-payment-method-update[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия