Refunds

The PayButton also makes it really easy to implement Refunds.

Your transaction is based on a set of MPTransactionParameters and provided to [MposUi createTransactionViewControllerWithTransactionParameters:].

To perform a full refund, you need to create new MPTransactionParameters with the transactionIdentifier of the previous charge transaction.

Here's how you can perform refunds:

- (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";

     }];
    
    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];
}

As a result, you will receive one of the following:

  • 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, have a look at transaction.refundDetails.status.

The PayButton also makes it really easy to implement Refunds.

Your transaction is based on a set of TransactionParameters and used in conjunction with MposUi.createTransactionIntent().

To perform a full refund, you need to create new TransactionParameters with the transactionIdentifier of the previous charge transaction.

Here's how you can perform refunds:

TransactionParameters parameters = new TransactionParameters.Builder()
        .refund("<transactionIdentifer>")
        .build();
Intent intent = ui.createTransactionIntent(transactionParameters);
startActivityForResult(intent, MposUi.REQUEST_CODE_PAYMENT);

As a result, you will receive one of the following via the onActivityResult():

  • 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, have a look at transaction.refundDetails.status.