Skip to content

Instantly share code, notes, and snippets.

@xslim
Last active December 18, 2018 14:44
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save xslim/bb4bf6d3d3a5a47c87167c4d841a1257 to your computer and use it in GitHub Desktop.
Save xslim/bb4bf6d3d3a5a47c87167c4d841a1257 to your computer and use it in GitHub Desktop.
AdyenPOS check complete or refund
// Adyen Delegates
-(void)transactionStarted:(ADYTransactionData *)transaction {
// Save tenderReference and terminalId to storage
NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
[ud setObject:transaction.tenderReference forKey:@"tx_tenderReference"];
[ud setObject:transaction.terminalId forKey:@"tx_terminalId"];
[ud synchronize];
}
- (void)transactionComplete:(ADYTransactionData *)transaction {
if (transaction.finalState == ADYFinalTenderStateUnknown || transaction.finalState == ADYFinalTenderStateError) {
[device fetchTransactionWithTenderReference:transaction.tenderReference completion:^(ADYTransactionDetails retrievedTransaction, NSError error) {
if (retrievedTransaction || !error) {
[self transactionFinished:retrievedTransaction]
} else {
//If error or retrieved transaction state NOT approved, then REFUND.
[self transactionErrored:retrievedTransaction];
}
}];
} else {
// Approved or Denied
[self transactionFinished:transaction];
}
}
// My App Code
- (void)transactionFinished:(ADYTransactionData *)transaction {
[self cleanupTransactionStorage];
// Get shopper receipt
ADYReceipt *cReceipt = [self.currentTransaction getReceiptForIndex:0 andType:ADYReceiptTypeCardholder];
}
- (void)transactionErrored:(ADYTransactionData*)transaction {
// Unless you realy need to
//[self cancelTransactionOnAdyenWithTenderReference:transaction.tenderReference terminalId:transaction.terminalId];
// Show Dialog with "Retry Connection"
[self showReconnectDialog];
}
- (void)showReconnectDialog {
// Show Dialog with "Retry Connection"
if (retry) {
[self recoverLostTransaction];
}
}
// if app restarted during transaction...
- (void)recoverLostTransaction {
// Get tenderReference and terminalId from storage
NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
NSString *tenderReference = [ud stringForKey:@"tx_tenderReference"];
NSString *terminalId = [ud stringForKey:@"tx_terminalId"];
if (tenderReference.length != 0 && terminalId.length != 0) {
// Make sure Adyen isLoggedIn here
// try to recover
[self recoverTransactionWithTenderReference:tenderReference terminalId:terminalId];
}
}
- (void)cleanupTransactionStorage {
// Clean up tenderReference and terminalId in storage
NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
[ud setObject:nil forKey:@"tx_tenderReference"];
[ud setObject:nil forKey:@"tx_terminalId"];
[ud synchronize];
}
// Maybe you dont need this
// - (void)cancelTransactionOnAdyenWithTenderReference:(NSString *)tenderReference terminalId:(NSString *)terminalId {
// [[Adyen sharedInstance] cancelOrRefundTransactionWithTenderReference:tenderReference
// uniqueTerminalId:terminalId
// merchantReference:nil
// completion:^(ADYProcessingState refundState, NSError *error){
// // do something
// }];
// }
- (void)recoverTransactionWithTenderReference:(NSString *)tenderReference terminalId:(NSString *)terminalId {
// Get Device by ID ?
// Make sure ADYDevice = terminalId
ADYDevice *device = ...
// Get TX data
[device fetchTransactionWithTenderReference:tenderReference completion:^(ADYTransactionDetails retrievedTransaction, NSError error) {
if (retrievedTransaction || !error) {
[self transactionFinished:retrievedTransaction];
} else {
// Show "Retry" dialog
[self showReconnectDialog];
// Unless you need this - If error or retrieved transaction state NOT approved, then REFUND.
//[self cancelTransactionOnAdyenWithTenderReference:tenderReference terminalId:terminalId];
}
}];
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment