Платежные возвраты

Платежные возвраты 1.0.0

Нет прав на скачивание
Совместимость с XF
  1. 2.3.x
Краткое описание
This add-on provides advanced refund capabilities for XenForo, including admin-initiated refunds and smart partial refund handling. It integrates seamlessly with Stripe and PayPal, offering a robust framework for payment providers and add-ons to manage refunds efficiently. Users can initiate refunds directly from the admin panel or via purchase logs, ensuring smooth user upgrades and seamless transaction management.
Админ переходит в Логи → Платежный провайдер →[specific=payment entry]Кликните "Issue Refund" (только видимо для поставщиков, которые поддерживают возвраты)
Введите сумму возврата (заполнена автоматически остатком суммы, которую можно вернуть)
Для обновления пользователей: возможность отменить покупку (опустошить пользователя)
Для других типов покупок: возврат происходит через поставщика и управление добавочными услугами отслеживает схему возврата через событие payment_refund_complete
Добавочный модуль вызывает API для возврата поставщика, отслеживает результат и отслеживает общую сумму возвращенных средств

Начните процесс платежа от поставщика:
334027-a28eb784f22f6b7021af1809151d0d5b.webp

Если покупка была сделана для обновления пользователя, управляемого XenForo, вы можете указать сумму возврата и желаемые действия по отношению к этому обновлению.
334028-589e1953b887adec70754183603a5709.webp

Если покупка была сделана в другом дополнительном опене, вы будете пропущены на расторжении только возврат:
334029-29c99ba2dc43409f955e75661e8e314f.webp

In your provider class (which extends XF\Payment\AbstractProvider), add:

```php
public function supportsRefunds()
{
return true;
}
```

And implement the refund() method as needed.
PHP:
public function supportsRefunds(): bool
{
    return true;
}
Шаг 2: Реализовать метод возврата ()
Добавьте метод возврата () с этой точной сигнатурой:
PHP:
public function refund(
    \XF\Entity\PaymentProfile $paymentProfile,
    \XF\Entity\PurchaseRequest $purchaseRequest,
    string $transactionId,
    ?float $amount = null,
    string $currency = 'USD'
): array
{
    // $paymentProfile - contains your API credentials in $paymentProfile->options
    // $purchaseRequest - the original purchase (has cost_amount, cost_currency, provider_metadata)
    // $transactionId - the transaction ID from the payment log entry being refunded
    // $amount - refund amount (null means full refund)
    // $currency - currency code
    // Call your provider's refund API here...
    // On success, return:
    return [
        'success' => true,
        'provider_refund_id' => 'your_provider_refund_id',
    ];
    // On failure, return:
    return [
        'success' => false,
        'error' => 'Human-readable error message',
    ];
}
Шаг 3: Здесь нет шага 3.
Таковы правила. Добавочный для возврата использует method_exists() для обнаружения этих методов во время выполнения. Если добавочный для возврата установлен, ваш поставщик покажет кнопку "Возвратить деньги" на записях журнала платежей. Если он не установлен, эти методы просто существуют и не используются.

Как мне добавить поддержку возврата к моему добавочному?
Если у вас есть добавочный для покупок (не поставщик платежей) и вы хотите реагировать при обнаружении возвратов — например, отменять доступ к курсу — зарегистрируйте слушателя кодовых событий для события payment_refund_complete:
PHP:
public static function onPaymentRefundComplete(
    \XF\Entity\PaymentProviderLog &$logEntry,
    \XF\Entity\PurchaseRequest &$purchaseRequest,
    float $amount,
    string $currency,
    bool $purchaseReversed,
    array $providerResult
): void
{
    // Check if this refund is for your purchasable type
    if ($purchaseRequest->purchasable_type_id !== 'your_purchasable_type')
    {
        return;
    }
    // Handle the refund (e.g., revoke access, send notification)
}
Вы также должны зарегистрировать этот слушатель в файле _data/code_event_listeners.xml вашего плагина:
XML:
<listeners>
    <listener event_id="payment_refund_complete"
              execute_order="10"
              callback_class="Your\AddOn\Listener"
              callback_method="onPaymentRefundComplete"
              active="1" />
</listeners>
Важные замечания
Не требуется зависимость: Не используйте или не требуйте классов из пространства имен Jack\PaymentRefund. Ваш поставщик должен иметь нулевые ссылки на плагин возврата средств.

Решение ID транзакции: Параметр $transactionId берется из столбца transaction_id записи xf_payment_provider_log, которую админ отменяет. В зависимости от того, как ваш поставщик логирует платежи, этот ID может или не быть тем, который вам нужен для API возврата. Если это так, найдите правильный ID в log_details или provider_metadata записи о запросе покупки. Пример метода resolveChargeId() из расширения Stripe.

Обработка валюты: Значение $amount всегда десятичное (например, 10.00). Если API поставщика ожидает значения в наименьшей денежной единице (например, центах), конвертируйте его в методе refund().

Отмена частичного возврата: Плагин для возврата средств автоматически отслеживает накопительный учет. Ваш метод refund() просто должен обрабатывать любое значение, которое ему передается. Плагин гарантирует, что $amount никогда не превышает оставшуюся сумму, которую можно вернуть.

Удаление дубликатов вебхуков: Когда админ выдает отмену, последующий вебхук поставщика (например, от Stripe charge.refunded) обнаруживается как дублированный и записывается как информационный — предотвращая двойные отмены.
Автор
axtona
Просмотры
118
Тип расширения
zip
Размер файла
22.2 КБ
Первый выпуск
Последнее обновление
Оценки 0.00 звезды 0 оценок
Ссылка не работает? Отправить сообщение команде NP, и мы поможем вам очень быстро!
Поддержите разработчика Если вы довольны тестом или ваш проект приносит доход, нажмите кнопку «Больше информации», чтобы поддержать разработчика покупкой.

Больше Ресурсов от axtona

[TaylorJ] Blogs A
Give you users a way to further express themselves in their own personal area!
OSDonate Pro / OS Donate Pro A
OSDonate дает вам возможность показать кнопку для пожертвований через PayPal на вашем сайте на основе Joomla.
Просмотры
353
Обновлено
[MК] Бесконечный прокрутки A
Этот дополнение позволяет реализовать бесконечное прокручивание для тем и постов.
Просмотры
160
Обновлено
Вверх