BTPayPalRequest.m 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. #import "BTPayPalRequest_Internal.h"
  2. #if __has_include(<Braintree/BraintreePayPal.h>)
  3. #import <Braintree/BTPayPalLineItem.h>
  4. #else
  5. #import <BraintreePayPal/BTPayPalLineItem.h>
  6. #endif
  7. NSString *const BTPayPalCallbackURLHostAndPath = @"onetouch/v1/";
  8. NSString *const BTPayPalCallbackURLScheme = @"sdk.ios.braintree";
  9. @implementation BTPayPalRequest
  10. - (instancetype)init
  11. {
  12. self = [super init];
  13. if (self) {
  14. _shippingAddressRequired = NO;
  15. _shippingAddressEditable = NO;
  16. _landingPageType = BTPayPalRequestLandingPageTypeDefault;
  17. }
  18. return self;
  19. }
  20. - (NSString *)landingPageTypeAsString {
  21. switch(self.landingPageType) {
  22. case BTPayPalRequestLandingPageTypeLogin:
  23. return @"login";
  24. case BTPayPalRequestLandingPageTypeBilling:
  25. return @"billing";
  26. default:
  27. return nil;
  28. }
  29. }
  30. - (NSDictionary<NSString *, NSObject *> *)parametersWithConfiguration:(BTConfiguration *)configuration {
  31. NSMutableDictionary *parameters = [NSMutableDictionary dictionary];
  32. NSMutableDictionary *experienceProfile = [NSMutableDictionary dictionary];
  33. experienceProfile[@"no_shipping"] = @(!self.isShippingAddressRequired);
  34. experienceProfile[@"brand_name"] = self.displayName ?: [configuration.json[@"paypal"][@"displayName"] asString];
  35. if (self.landingPageTypeAsString) {
  36. experienceProfile[@"landing_page_type"] = self.landingPageTypeAsString;
  37. }
  38. if (self.localeCode) {
  39. experienceProfile[@"locale_code"] = self.localeCode;
  40. }
  41. if (self.merchantAccountID) {
  42. parameters[@"merchant_account_id"] = self.merchantAccountID;
  43. }
  44. if (self.riskCorrelationId) {
  45. parameters[@"correlation_id"] = self.riskCorrelationId;
  46. }
  47. if (self.shippingAddressOverride) {
  48. experienceProfile[@"address_override"] = @(!self.isShippingAddressEditable);
  49. } else {
  50. experienceProfile[@"address_override"] = @NO;
  51. }
  52. if (self.lineItems.count > 0) {
  53. NSMutableArray *lineItemsArray = [NSMutableArray arrayWithCapacity:self.lineItems.count];
  54. for (BTPayPalLineItem *lineItem in self.lineItems) {
  55. [lineItemsArray addObject:[lineItem requestParameters]];
  56. }
  57. parameters[@"line_items"] = lineItemsArray;
  58. }
  59. parameters[@"return_url"] = [NSString stringWithFormat:@"%@://%@success", BTPayPalCallbackURLScheme, BTPayPalCallbackURLHostAndPath];
  60. parameters[@"cancel_url"] = [NSString stringWithFormat:@"%@://%@cancel", BTPayPalCallbackURLScheme, BTPayPalCallbackURLHostAndPath];
  61. parameters[@"experience_profile"] = experienceProfile;
  62. return parameters;
  63. }
  64. @end