Я использую Stripe iOS SDK, чтобы создавать клиентов и принимать платежи в моем приложении. При этом в документации Stripe (https://stripe.com/docs/mobile/ios/standard)) я замечаю, что они создают эфемерный ключ (нового клиента) каждый раз, когда отображается экран способов оплаты? Данные карты моего пользователя сохраняются, как и должны, но проблема с
эта строка:
STPCustomerContext * customerContext = [[STPCustomerContext alloc]
initWithKeyProvider: [StripeAPIBackend sharedInstance]];
означает, что каждый раз, когда мой пользователь выбирает способ оплаты, он не виден, поскольку каждый раз при нажатии кнопки создается новый идентификатор клиента. Кто-нибудь знает, как я могу предотвратить это?
ViewController.m
- (void)handlePaymentMethodsButtonTapped {
STPCustomerContext *customerContext = [[STPCustomerContext alloc] initWithKeyProvider:[StripeAPIBackend sharedInstance]];
// Setup payment methods view controller
STPPaymentMethodsViewController *paymentMethodsViewController = [[STPPaymentMethodsViewController alloc] initWithConfiguration:[STPPaymentConfiguration sharedConfiguration] theme:[STPTheme defaultTheme] customerContext:customerContext delegate:self];
// Present payment methods view controller
UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:paymentMethodsViewController];
[self presentViewController:navigationController animated:YES completion:nil];
}
StripeAPIBackend.m
- (void)createCustomerKeyWithAPIVersion:(NSString *)apiVersion completion:(STPJSONResponseCompletionBlock)completion {
NSString *email = @"test@test.com";
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
manager.responseSerializer = [AFJSONResponseSerializer serializerWithReadingOptions:NSJSONReadingAllowFragments];
[manager POST:self.baseURL.absoluteString
parameters:@{@"api_version": apiVersion, @"email": email}
// progress:nil
success:^(NSURLSessionDataTask *task, id responseObject) {
completion(responseObject, nil);
} failure:^(NSURLSessionDataTask *task, NSError *error) {
completion(nil, error);
}];
}