add PKContactValue
This commit is contained in:
parent
73bb0295c2
commit
4f75f5e8ce
|
@ -246,22 +246,17 @@ class CheckoutViewController: UIViewController, STPPaymentContextDelegate {
|
|||
fedEx.identifier = "fedex"
|
||||
|
||||
DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) {
|
||||
if address.country == nil {
|
||||
completion(.valid, nil, nil, nil)
|
||||
if address.country == nil || address.country == "US" {
|
||||
completion(.valid, nil, [upsGround, fedEx], fedEx)
|
||||
}
|
||||
else if address.country == "AQ" {
|
||||
let error = NSError(domain: "ShippingError", code: 123, userInfo: [NSLocalizedDescriptionKey: "Invalid Shipping Address",
|
||||
NSLocalizedFailureReasonErrorKey: "We can't ship to this country."])
|
||||
completion(.invalid, error, nil, nil)
|
||||
}
|
||||
else {
|
||||
if address.country == "US" {
|
||||
completion(.valid, nil, [upsGround, fedEx], fedEx)
|
||||
}
|
||||
else if address.country == "AE" {
|
||||
let error = NSError(domain: "ShippingError", code: 123, userInfo: [NSLocalizedDescriptionKey: "Invalid Shipping Address",
|
||||
NSLocalizedFailureReasonErrorKey: "We can't ship to this country."])
|
||||
completion(.invalid, error, nil, nil)
|
||||
}
|
||||
else {
|
||||
fedEx.amount = 20.99
|
||||
completion(.valid, nil, [upsWorldwide, fedEx], fedEx)
|
||||
}
|
||||
fedEx.amount = 20.99
|
||||
completion(.valid, nil, [upsWorldwide, fedEx], fedEx)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -137,21 +137,15 @@ class SettingsViewController: UITableViewController {
|
|||
|
||||
private enum RequiredShippingAddressFields: String {
|
||||
case None = "None"
|
||||
case Phone = "Phone"
|
||||
case Email = "Email"
|
||||
case NameEmail = "(Name|Email)"
|
||||
case PostalAddress = "PostalAddress"
|
||||
case PostalAddressPhone = "(PostalAddress|Phone)"
|
||||
case All = "All"
|
||||
|
||||
init(row: Int) {
|
||||
switch row {
|
||||
case 0: self = .None
|
||||
case 1: self = .Phone
|
||||
case 2: self = .Email
|
||||
case 3: self = .NameEmail
|
||||
case 4: self = .PostalAddress
|
||||
case 5: self = .PostalAddressPhone
|
||||
case 1: self = .Email
|
||||
case 2: self = .PostalAddressPhone
|
||||
default: self = .All
|
||||
}
|
||||
}
|
||||
|
@ -159,15 +153,7 @@ class SettingsViewController: UITableViewController {
|
|||
var pkAddressFields: PKAddressField {
|
||||
switch self {
|
||||
case .None: return []
|
||||
case .Phone: return .phone
|
||||
case .Email: return .email
|
||||
case .NameEmail:
|
||||
if #available(iOS 8.3, *) {
|
||||
return [.name, .email]
|
||||
} else {
|
||||
return [.email]
|
||||
}
|
||||
case .PostalAddress: return .postalAddress
|
||||
case .PostalAddressPhone: return [.postalAddress, .phone]
|
||||
case .All: return .all
|
||||
}
|
||||
|
@ -216,7 +202,7 @@ class SettingsViewController: UITableViewController {
|
|||
case .Theme: return 3
|
||||
case .ApplePay: return 2
|
||||
case .RequiredBillingAddressFields: return 3
|
||||
case .RequiredShippingAddressFields: return 7
|
||||
case .RequiredShippingAddressFields: return 4
|
||||
case .ShippingType: return 2
|
||||
case .SMSAutofill: return 2
|
||||
case .Session: return 1
|
||||
|
|
|
@ -95,6 +95,7 @@ typedef NS_ENUM(NSUInteger, STPBillingAddressFields) {
|
|||
- (instancetype)initWithABRecord:(ABRecordRef)record;
|
||||
- (ABRecordRef)ABRecordValue;
|
||||
#pragma clang diagnostic pop
|
||||
- (PKContact *)PKContactValue NS_AVAILABLE_IOS(9.0);
|
||||
|
||||
- (BOOL)containsRequiredFields:(STPBillingAddressFields)requiredFields;
|
||||
- (BOOL)containsRequiredShippingAddressFields:(PKAddressField)requiredFields;
|
||||
|
|
|
@ -79,19 +79,12 @@
|
|||
|
||||
- (ABRecordRef)ABRecordValue {
|
||||
ABRecordRef record = ABPersonCreate();
|
||||
NSArray<NSString *>*nameComponents = [self.name componentsSeparatedByString:@" "];
|
||||
NSString *firstName = [nameComponents firstObject];
|
||||
NSString *lastName = [self.name stringByReplacingOccurrencesOfString:firstName withString:@""];
|
||||
lastName = [lastName stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
|
||||
if ([lastName length] == 0) {
|
||||
lastName = nil;
|
||||
}
|
||||
if (firstName != nil) {
|
||||
CFStringRef firstNameRef = (__bridge CFStringRef)firstName;
|
||||
if ([self firstName] != nil) {
|
||||
CFStringRef firstNameRef = (__bridge CFStringRef)[self firstName];
|
||||
ABRecordSetValue(record, kABPersonFirstNameProperty, firstNameRef, nil);
|
||||
}
|
||||
if (lastName != nil) {
|
||||
CFStringRef lastNameRef = (__bridge CFStringRef)lastName;
|
||||
if ([self lastName] != nil) {
|
||||
CFStringRef lastNameRef = (__bridge CFStringRef)[self lastName];
|
||||
ABRecordSetValue(record, kABPersonLastNameProperty, lastNameRef, nil);
|
||||
}
|
||||
if (self.phone != nil) {
|
||||
|
@ -108,14 +101,7 @@
|
|||
}
|
||||
ABMutableMultiValueRef addressRef = ABMultiValueCreateMutable(kABMultiDictionaryPropertyType);
|
||||
NSMutableDictionary *addressDict = [NSMutableDictionary dictionary];
|
||||
NSString *street = nil;
|
||||
if (self.line1 != nil) {
|
||||
street = [@"" stringByAppendingString:self.line1];
|
||||
}
|
||||
if (self.line2 != nil) {
|
||||
street = [@[street ?: @"", self.line2] componentsJoinedByString:@" "];
|
||||
}
|
||||
addressDict[(NSString *)kABPersonAddressStreetKey] = street;
|
||||
addressDict[(NSString *)kABPersonAddressStreetKey] = [self street];
|
||||
addressDict[(NSString *)kABPersonAddressCityKey] = self.city;
|
||||
addressDict[(NSString *)kABPersonAddressStateKey] = self.state;
|
||||
addressDict[(NSString *)kABPersonAddressZIPKey] = self.postalCode;
|
||||
|
@ -127,6 +113,51 @@
|
|||
|
||||
#pragma clang diagnostic pop
|
||||
|
||||
- (PKContact *)PKContactValue {
|
||||
PKContact *contact = [PKContact new];
|
||||
NSPersonNameComponents *name = [NSPersonNameComponents new];
|
||||
name.givenName = [self firstName];
|
||||
name.familyName = [self lastName];
|
||||
contact.name = name;
|
||||
contact.emailAddress = self.email;
|
||||
CNMutablePostalAddress *address = [CNMutablePostalAddress new];
|
||||
address.street = [self street];
|
||||
address.city = self.city;
|
||||
address.state = self.state;
|
||||
address.postalCode = self.postalCode;
|
||||
address.country = self.country;
|
||||
contact.postalAddress = address;
|
||||
contact.phoneNumber = [CNPhoneNumber phoneNumberWithStringValue:self.phone];
|
||||
return contact;
|
||||
}
|
||||
|
||||
- (NSString *)firstName {
|
||||
NSArray<NSString *>*components = [self.name componentsSeparatedByString:@" "];
|
||||
return [components firstObject];
|
||||
}
|
||||
|
||||
- (NSString *)lastName {
|
||||
NSArray<NSString *>*components = [self.name componentsSeparatedByString:@" "];
|
||||
NSString *firstName = [components firstObject];
|
||||
NSString *lastName = [self.name stringByReplacingOccurrencesOfString:firstName withString:@""];
|
||||
lastName = [lastName stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
|
||||
if ([lastName length] == 0) {
|
||||
lastName = nil;
|
||||
}
|
||||
return lastName;
|
||||
}
|
||||
|
||||
- (NSString *)street {
|
||||
NSString *street = nil;
|
||||
if (self.line1 != nil) {
|
||||
street = [@"" stringByAppendingString:self.line1];
|
||||
}
|
||||
if (self.line2 != nil) {
|
||||
street = [@[street ?: @"", self.line2] componentsJoinedByString:@" "];
|
||||
}
|
||||
return street;
|
||||
}
|
||||
|
||||
- (BOOL)containsRequiredFields:(STPBillingAddressFields)requiredFields {
|
||||
BOOL containsFields = YES;
|
||||
switch (requiredFields) {
|
||||
|
|
|
@ -325,7 +325,13 @@
|
|||
}
|
||||
|
||||
- (void)shippingAddressViewControllerDidCancel:(STPShippingAddressViewController *)addressViewController {
|
||||
[self appropriatelyDismissViewController:addressViewController completion:nil];
|
||||
[self appropriatelyDismissViewController:addressViewController completion:^{
|
||||
if (addressViewController.isMidPaymentRequest) {
|
||||
[self.delegate paymentContext:self
|
||||
didFinishWithStatus:STPPaymentStatusUserCancellation
|
||||
error:nil];
|
||||
}
|
||||
}];
|
||||
}
|
||||
|
||||
- (void)shippingAddressViewController:(__unused STPShippingAddressViewController *)addressViewController
|
||||
|
@ -502,8 +508,16 @@
|
|||
paymentRequest.requiredBillingAddressFields = [STPAddress applePayAddressFieldsFromBillingAddressFields:self.configuration.requiredBillingAddressFields];
|
||||
paymentRequest.requiredShippingAddressFields = self.configuration.requiredShippingAddressFields;
|
||||
paymentRequest.currencyCode = self.paymentCurrency.uppercaseString;
|
||||
paymentRequest.shippingMethods = self.shippingMethods;
|
||||
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 80300
|
||||
if (self.selectedShippingMethod != nil) {
|
||||
NSMutableArray<PKShippingMethod *>* orderedShippingMethods = [self.shippingMethods mutableCopy];
|
||||
[orderedShippingMethods removeObject:self.selectedShippingMethod];
|
||||
[orderedShippingMethods insertObject:self.selectedShippingMethod atIndex:0];
|
||||
paymentRequest.shippingMethods = orderedShippingMethods;
|
||||
}
|
||||
else {
|
||||
paymentRequest.shippingMethods = self.shippingMethods;
|
||||
}
|
||||
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_8_3
|
||||
if ([paymentRequest respondsToSelector:@selector(shippingType)]) {
|
||||
paymentRequest.shippingType = [[self class] pkShippingType:self.configuration.shippingType];;
|
||||
}
|
||||
|
@ -511,13 +525,22 @@
|
|||
if (self.shippingAddress != nil) {
|
||||
#pragma clang diagnostic push
|
||||
#pragma clang diagnostic ignored "-Wdeprecated"
|
||||
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_9_0
|
||||
if ([paymentRequest respondsToSelector:@selector(shippingContact)]) {
|
||||
paymentRequest.shippingContact = [self.shippingAddress PKContactValue];
|
||||
}
|
||||
else {
|
||||
paymentRequest.shippingAddress = [self.shippingAddress ABRecordValue];
|
||||
}
|
||||
#else
|
||||
paymentRequest.shippingAddress = [self.shippingAddress ABRecordValue];
|
||||
#endif
|
||||
#pragma clang diagnostic pop
|
||||
}
|
||||
return paymentRequest;
|
||||
}
|
||||
|
||||
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 80300
|
||||
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_8_3
|
||||
+ (PKShippingType)pkShippingType:(STPShippingType)shippingType {
|
||||
switch (shippingType) {
|
||||
case STPShippingTypeShipping:
|
||||
|
|
|
@ -161,6 +161,30 @@
|
|||
XCTAssertNil(postalCode);
|
||||
}
|
||||
|
||||
- (void)testPKContactValue {
|
||||
STPAddress *address = [STPAddress new];
|
||||
address.name = @"John Smith Doe";
|
||||
address.phone = @"8885551212";
|
||||
address.email = @"foo@example.com";
|
||||
address.line1 = @"55 John St";
|
||||
address.city = @"New York";
|
||||
address.state = @"NY";
|
||||
address.postalCode = @"10002";
|
||||
address.country = @"US";
|
||||
|
||||
PKContact *contact = [address PKContactValue];
|
||||
XCTAssertEqualObjects(contact.name.givenName, @"John");
|
||||
XCTAssertEqualObjects(contact.name.familyName, @"Smith Doe");
|
||||
XCTAssertEqualObjects(contact.phoneNumber.stringValue, @"8885551212");
|
||||
XCTAssertEqualObjects(contact.emailAddress, @"foo@example.com");
|
||||
CNPostalAddress *postalAddress = contact.postalAddress;
|
||||
XCTAssertEqualObjects(postalAddress.street, @"55 John St");
|
||||
XCTAssertEqualObjects(postalAddress.city, @"New York");
|
||||
XCTAssertEqualObjects(postalAddress.state, @"NY");
|
||||
XCTAssertEqualObjects(postalAddress.postalCode, @"10002");
|
||||
XCTAssertEqualObjects(postalAddress.country, @"US");
|
||||
}
|
||||
|
||||
- (void)testContainsRequiredFieldsNone {
|
||||
STPAddress *address = [STPAddress new];
|
||||
XCTAssertTrue([address containsRequiredFields:STPBillingAddressFieldsNone]);
|
||||
|
|
Loading…
Reference in New Issue