BTVenmoAppSwitchReturnURL.m 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. #import "BTVenmoAppSwitchReturnURL.h"
  2. #if __has_include(<Braintree/BraintreeVenmo.h>)
  3. #import <Braintree/BraintreeCore.h>
  4. #else
  5. #import <BraintreeCore/BraintreeCore.h>
  6. #endif
  7. NSString *const BTVenmoAppSwitchReturnURLErrorDomain = @"com.braintreepayments.BTVenmoAppSwitchReturnURLErrorDomain";
  8. @implementation BTVenmoAppSwitchReturnURL
  9. + (BOOL)isValidURL:(NSURL *)url {
  10. return [url.host isEqualToString:@"x-callback-url"] && [url.path hasPrefix:@"/vzero/auth/venmo/"];
  11. }
  12. - (instancetype)initWithURL:(NSURL *)url {
  13. self = [self init];
  14. if (self) {
  15. NSDictionary *parameters = [BTURLUtils queryParametersForURL:url];
  16. if ([url.path isEqualToString:@"/vzero/auth/venmo/success"]) {
  17. if (parameters[@"resource_id"]) {
  18. _state = BTVenmoAppSwitchReturnURLStateSucceededWithPaymentContext;
  19. _paymentContextID = parameters[@"resource_id"];
  20. } else {
  21. _state = BTVenmoAppSwitchReturnURLStateSucceeded;
  22. _nonce = parameters[@"paymentMethodNonce"];
  23. _username = parameters[@"username"];
  24. }
  25. } else if ([url.path isEqualToString:@"/vzero/auth/venmo/error"]) {
  26. _state = BTVenmoAppSwitchReturnURLStateFailed;
  27. NSString *errorMessage = parameters[@"errorMessage"];
  28. NSInteger errorCode = [parameters[@"errorCode"] integerValue];
  29. _error = [NSError errorWithDomain:BTVenmoAppSwitchReturnURLErrorDomain code:errorCode userInfo:(errorMessage != nil ? @{ NSLocalizedDescriptionKey: errorMessage } : nil)];
  30. } else if ([url.path isEqualToString:@"/vzero/auth/venmo/cancel"]) {
  31. _state = BTVenmoAppSwitchReturnURLStateCanceled;
  32. } else {
  33. _state = BTVenmoAppSwitchReturnURLStateUnknown;
  34. }
  35. }
  36. return self;
  37. }
  38. @end