# Refund

#### **Handling Refunds with the SDK**

**Overview**:\
Processing refunds is a crucial functionality for any payment gateway or service. Within our SDK, while the underlying mechanics resemble payment transactions, there are some nuances to consider for refunds. Let's delve into how the Prophius SDK manages refund operations.

**1. Preliminary Steps for Refunds**:

* **Receipt Collection**:
  * **Purpose**: To have a concrete reference for the transaction being refunded.
  * **Action**: The merchant must request the payment receipt from the customer. This receipt contains essential transaction details, most crucially, the transaction code.
* **Transaction Search**:
  * **Purpose**: To locate the specific transaction in the system and ensure it's valid for a refund.
  * **Action**: Using the provided transaction code from the receipt, the merchant searches for the corresponding transaction using **refundInquiry** fuction of the SDK.

## Transaction Inquiry for Refund

This function is used to search the specific transaction in the system

```java
PayContactlessEmbed.getInstance().refundInquiry(@Nullable String transactionCode, @NonNull InquiryListener listener)
```

## **Inquiry Listener**

```java
public interface InquiryListener {
   void onSuccess(InquiryResult transaction);
   void onFailure(Error error);
}
```

## **Inquiry Result**

```kotlin
data class InquiryResult(
    var cardNumber: String?,
    var amount: Double,
    var currency: Int
)
```

<table><thead><tr><th width="223">Field Names</th><th width="172.33333333333331">Field Descriptions</th><th>Values</th></tr></thead><tbody><tr><td>CardNumber</td><td>masked card number used in transaction</td><td><pre><code><strong>************6375
</strong></code></pre></td></tr><tr><td>Amount</td><td>amount value of the transaction</td><td><pre><code>5.00
</code></pre></td></tr><tr><td>Currency</td><td>amount current of the transaction</td><td><p></p><pre><code>566
</code></pre></td></tr><tr><td>Error</td><td>Check 6.1 Error Handling section</td><td></td></tr></tbody></table>

**2. Initiating the Refund Process**:

Once the transaction is located, the refund can be processed. There are typically two scenarios to consider:

* **Full Refund**:
  * **Scenario**: Customer requests a complete refund of the transaction amount.
  * **Action**: The SDK's `doRefund` method is called with the full transaction amount.
* **Partial Refund**:
  * **Scenario**: Customer only requests a part of the transaction amount to be refunded.
  * **Action**: The SDK's `doRefund` method is invoked with the specified partial amount.

**4. Communicating the Refund Status**:

The outcome of the refund, be it success or failure, should be clearly communicated back to the customer. Use the `RefundResult` instance, similar to `TransactionResult`, to guide this process.

**In Summary**:\
Refunds, while similar in structure to payments within the SDK, require an added layer of preparation at the application level. Ensure your application provides a smooth refund process, as it enhances customer trust and the user experience.

**Parameters**:

1. **Amount**:
   * **Description**: Denotes the transaction's value as specified by the user.
   * **Constraints**:
     * Should be a whole number, with its length capped at 12 digits.
     * Exclude any separators or currency symbols.
   * **Examples**:
     * A payment amount of $100 should be conveyed as 10000, where the trailing two digits represent cents.
     * Conversely, $1.01 is represented as 101.
2. **Transaction Code**:
   * **Description:** Transaction code value confirmed according to refundInqury response.
3. **Description**
   * **Description**: Provides contextual information detailing the purpose or reason behind the payment. It could relate to the product/service name, a brief summary, or any relevant description the merchant deems necessary.
4. **Currency Code**
   * **Description**: The currecy value of the transaction. It has be numeric code of ISO 4217 format.&#x20;
   * **Examples:**
     * 566 for Naira instead of NGN
5. **Activity**
   * **Description**: The current activity. Payment page is started as a new activity. In order to start payment activity Embed SDK needs the current acitivity of the app.
6. **RFU Map**
   * **Description:** RFUMap (Reserved for future use) object is used to transfer key value pairs between backend system and merchant application
7. **TransactionResultListener**:
   * **Description**: This interface is vital as it captures and manages transaction outcomes, be it success or failure scenarios.

## **Full Refund**

This function is used for refunding all of the amount of the transaction.

```kotlin
PayContactlessEmbed.getInstance().doFullRefund(@NonNull String amount, @NonNull String transactionCode, @Nullable String description, @Nullable String currencyCode, @NonNull FragmentActivity activity, @Nullable Map<String, String> rfuMap, @NonNull TransactionResultListener listener)
```

{% hint style="info" %}
If currency parameter is set null, the default currency is used for transaction. The default currecny is Naira in SDK.
{% endhint %}

Please check details for TransactionResultListener on Sale section.

{% content-ref url="/pages/DDAUl4QlI8eebdWuWZdo" %}
[Sale](/developer-console/merchant-embed-sdk/android/sdk-api-reference/pay-with-card/sale.md)
{% endcontent-ref %}

## **Partial Refund**

This function is used for refunding a part of the amount of the transaction. E.g. User buys two piece of goods, but he/she wants to return only one piece.

```kotlin
PayContactlessEmbed.getInstance().doPartialRefund(@NonNull String amount, @NonNull String transactionCode, @Nullable String description, @Nullable String currencyCode, @NonNull FragmentActivity activity, @Nullable Map<String, String> rfuMap, @NonNull TransactionResultListener listener)
```

{% hint style="info" %}
If currency parameter is set null, the default currency is used for transaction. The default currecny is Naira in SDK.
{% endhint %}

Please check details for TransactionResultListener on Sale section.

{% content-ref url="/pages/DDAUl4QlI8eebdWuWZdo" %}
[Sale](/developer-console/merchant-embed-sdk/android/sdk-api-reference/pay-with-card/sale.md)
{% endcontent-ref %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://developer.prophius.com/developer-console/merchant-embed-sdk/android/sdk-api-reference/pay-with-card/refund.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
