Reembolso de Pagos

Reembolso de Pagos 1.0.0

No tiene permiso para descargar
Compatibilidad con XF
  1. 2.3.x
Descripción breve
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.
Admin navega a Logs → Proveedor de Pago →[specific=payment entry]Haz clic en "Reembolso" (visible solo para proveedores que soportan reembolsos)
Ingresa el monto del reembolso (pre-populado con el saldo restante de reembolso posible)
Para actualizaciones de usuarios: opción de revertir la compra (descender al nivel inferior del usuario)
Para otros tipos de compras: el reembolso se procesa con el proveedor y el add-on que administra la reversión maneja la acción mediante el evento payment_refund_complete
El add-on llama a la API de reembolso del proveedor, registra el resultado y rastrea el monto total reembolsado

Inicia una transacción de pago desde los registros del proveedor:
334027-a28eb784f22f6b7021af1809151d0d5b.webp

Si la compra fue para una Actualización de Usuario gestionada por XenForo puede especificar el monto del reembolso y el acción deseada para la actualización.
334028-589e1953b887adec70754183603a5709.webp

Si la compra fue realizada dentro de otro adicional, usted será prompuido para activar solo un reembolso:
334029-29c99ba2dc43409f955e75661e8e314f.webp

Add supportsRefunds() to your provider
In your provider class (which extends XF\Payment\AbstractProvider), add:
```php
public function supportsRefunds()
{
return true;
}
```
Add refund() method to your provider
Also in your provider class, add the `refund()` method:
```php
public function refund($paymentId)
{
// Implement logic for processing refunds here
}
```
Override getPaymentResult() in AbstractProvider if needed
If you need to override how partial vs full refunds are detected on incoming webhooks, do so in your provider class by overriding the `getPaymentResult()` method:
```php
public function getPaymentResult($paymentId)
{
// Implement logic for detecting partial or full refunds here
}
```
Implement refund() and supportsRefunds() methods directly on your payment provider's class if needed
Third-party payment providers can add refund support by implementing the `supportsRefunds()` and `refund()` methods directly on their provider class, without relying on this add-on.
PHP:
public function supportsRefunds(): bool
{
    return true;
}
Implementar método refund() con esta firma exacta:
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',
    ];
}
Reembolsar
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)
}
También será necesario registrar este escuchador en el archivo _data/code_event_listeners.xml de tu add-on:
XML:
<listeners>
    <listener event_id="payment_refund_complete"
              execute_order="10"
              callback_class="Your\AddOn\Listener"
              callback_method="onPaymentRefundComplete"
              active="1" />
</listeners>
Notas importantes
No dependencia requerida: No utilice o requiera ninguna clase del espacio de nombres Jack\PaymentRefund. Su proveedor debe tener cero referencias al add-on de reembolso.

Resolución del ID de transacción: El parámetro $transactionId proviene de la columna transaction_id de la entrada xf_payment_provider_log que el administrador está reembolsando. Dependiendo de cómo su proveedor registra pagos, esto puede o no ser el ID que necesita para su API de reembolso. Si no es así, busque el ID correcto en los detalles de la entrada log o en provider_metadata del pedido de compra. Vea el método resolveChargeId() en la extensión Stripe como un ejemplo.

Manejo de moneda: El $amount siempre es un valor decimal (por ejemplo, 10.00). Si su API de proveedor espera cantidades en el menor unidad monetaria (como centavos), convierta en su método refund().

Reembolso parcial: El add-on de reembolso maneja automáticamente la seguimiento acumulado. Su método refund() solo necesita procesar lo que le dé. El add-on asegura que $amount nunca supere el saldo restante refacturable.

Deducción de duplicados en webhook: Cuando un administrador emite un reembolso, la siguiente webhook del proveedor (por ejemplo, la charge.refunded de Stripe) se detecta como duplicada y se registra informativamente — previniendo doble-reversión.
Autor
axtona
Vistas
118
Tipo de extensión
zip
Tamaño de archivo
22,2 KB
Primer lanzamiento
Última actualización
Valoraciones 0,00 estrella(s) 0 valoraciones
¿Enlace roto? Enviar mensaje al equipo NP y te ayudaremos rápidamente!
Apoia al desarrollador i estás satisfecho con la prueba o tu proyecto te ha generado ganancias, haz clic en el botón «Más información» para apoyar al desarrollador comprando.

Más recursos de 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 permite que muestres un botón de donación con PayPal en tu sitio Joomla.
 Párrafo Infinito A
Este add-on permite el desplazamiento infinito para hilos y publicaciones.
Superior