Transaction
Transaction: Refund
Transaction: Void
instead. If you do not
specify an amount to refund, the entire transaction amount will be refunded. Refer to the
Transaction response object for more
information.
- DOTNET
Result<transaction> result = gateway.Transaction.Refund("the_transaction_id");
NotFoundException
. If the refund fails, then the result will be unsuccessful and will include either
validation errors indicating
which parameters were invalid, or a
processor settlement response code
indicating the type of settlement failure.
- DOTNET
if (!result.IsSuccess()) {
List<validationerror> errors = result.Errors.DeepAll();
}
Arguments
TransactionId
required, stringAdditional Parameters
Amount
DecimalCommodityCode
stringDescription
stringDiscountAmount
DecimalKind
stringIndicates whether the line item is a debit (sale) or credit (refund) to the customer. Accepted values:
"debit"
"credit"
Name
stringProductCode
stringQuantity
DecimalTotalAmount
DecimalUnitAmount
DecimalUnitOfMeasure
stringUnitTaxAmount
DecimalUpcCode
stringUpcType
stringUPC type for the item. If specified, you must also provide the UPC code. Accepted values:
"UPC-A"
"UPC-B"
"UPC-C"
"UPC-D"
"UPC-E"
"UPC-2"
"UPC-5"
Url
stringMerchantAccountId
stringThe merchant account ID used to create a transaction. Currency is also determined by merchant account ID. If no merchant account ID is specified, we will use your default merchant account.
OrderId
stringUse this parameter if you would like to pass an OrderId different than that of the original transaction. Otherwise, the original transaction's OrderId
value will be copied over to the refund. On PayPal transactions, this field maps to the PayPal invoice number. PayPal invoice numbers must be unique in your PayPal business account. Maximum 255 characters or 127 for PayPal transactions.
Requirements
- Transaction status must be settled or settling.
- Refund amount can't be greater than remaining non-refunded amount of the original transaction.
- Transaction can't be refunded again after being completely refunded.
- Transactions held in escrow can only be refunded in full. Attempts to partially refund an escrow transaction will throw a validation error.
Examples
Partial refunds
If you only want to refund a portion of the transaction, specify the amount to refund:
- C#
Result<transaction> result = gateway.Transaction.Refund(
"a_transaction_id",
50.00M
);
result.IsSuccess(); // true
Transaction refund = result.Target;
refund.Type; // TransactionType.CREDIT
refund.Amount; // 50.00
Result<transaction> result = gateway.Transaction.Refund(
"a_transaction_id",
10.00M
);
result.IsSuccess(); // true
Transaction refund = result.Target;
refund.Type; // TransactionType.CREDIT
refund.Amount; // 10.00
Refund processor declines
If using the most current SDK, and the processor declines the refund, the response will have the
ProcessorResponseCode available. See the
transaction statuses page
for additional information on the Processor Declined response. If using an older SDK version, and
the processor declines the refund, you may receive a
validation error
in lieu of a processor response code.
- C#
if (!result.IsSuccess()) {
Transaction transaction = result.Transaction;
if (transaction.Status == TransactionStatus.PROCESSOR_DECLINED) {
Console.WriteLine(transaction.ProcessorResponseCode); // e.g. "2005"
Console.WriteLine(transaction.ProcessorResponseText); // e.g. "Invalid Credit Card Number"
}
}
Settlement failures
If the processor declines the capture for the refund transaction, the transaction object will have
the ProcessorSettlementResponseCode available. See the
transaction statuses page
for additional information on the Settlement Declined
response.
- C#
if (!result.IsSuccess()) {
Transaction transaction = result.Transaction;
if (transaction.Status == TransactionStatus.SETTLEMENT_DECLINED) {
Console.WriteLine(transaction.ProcessorSettlementResponseCode); // e.g. "4001"
Console.WriteLine(transaction.ProcessorSettlementResponseText); // e.g. "Settlement Declined"
}
}
Issuing a credit
- C#
var result = gateway.Transaction.Credit(
new TransactionRequest {
Amount = 100.00M,
PaymentMethodToken = "AToken"
}
);