Last active
December 18, 2018 14:44
-
-
Save xslim/bb4bf6d3d3a5a47c87167c4d841a1257 to your computer and use it in GitHub Desktop.
AdyenPOS check complete or refund
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 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