Performing Refunds
PayButton makes it easy to implement refunds.
Your transaction is based on a set of
MPTransactionParameters
and provided to
[MposUi createTransactionViewControllerWithTransactionParameters:]
.
To perform a full or partial refund, you must create new
MPTransactionParameters
with the
transactionIdentifier
of the previous charge transaction. For partial refunds, you must specify the amount that should be refunded.
- (IBAction)refund:(id)sender {
MPUMposUi *ui = [MPUMposUi initializeWithProviderMode:/*...*/];
ui.configuration.summaryFeatures =
MPUMposUiConfigurationSummaryFeatureSendReceiptViaEmail;
MPTransactionParameters *parameters =
[MPTransactionParameters refundForTransactionIdentifier:@"<transactionIdentifier>"
optionals:
^(id<MPTransactionParametersRefundOptionals> _Nonnull optionals)
{
optionals.subject = @"Refund for Bouquet of Flowers";
optionals.customIdentifier = @"yourReferenceForTheTransaction";
// For partial refunds, specify the amount to be refunded
// and the currency from the original transaction
// [optionals setAmount:[NSDecimalNumber decimalNumberWithString:@"1.00"] currency:MPCurrencyEUR];
}];
UIViewController *viewController =
[ui createTransactionViewControllerWithTransactionParameters:parameters
completed:^(UIViewController *ui,
MPUTransactionResult result,
MPTransaction* transaction)
{
[self dismissViewControllerAnimated:YES completion:NULL];
UIAlertView* alert = [[UIAlertView alloc] initWithTitle:@"Result"
message:@""
delegate:nil
cancelButtonTitle:nil
otherButtonTitles:@"OK",nil];
if (result == MPUTransactionResultApproved) {
alert.title = @"Refund was made!";
} else {
alert.title = @"Refund was declined/aborted!";
}
[alert show];
}];
UINavigationController *modalNav = [[UINavigationController alloc] initWithRootViewController:viewController];
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) {
modalNav.modalPresentationStyle = UIModalPresentationFullScreen;
} else { // Show as Form on iPad
modalNav.modalPresentationStyle = UIModalPresentationFormSheet;
}
[self presentViewController:modalNav animated:YES completion:NULL];
}
You will receive one of these results:
The original transaction that now contains information about the refund in the
transaction.refundDetails
.
An error indicating why refunding the charge failed.
To check if a transaction can be refunded in general, see
transaction.refundDetails.status
.