In my iOS app I need to check if a user's PayPal email address is valid. What is the easiest way of implementing this? Ive been looking at using the GetVerifiedStatus api and tried the following code:
NSDictionary *dict1 = [[NSDictionary alloc]initWithObjectsAndKeys:email, @"emailAddress", nil];
NSDictionary *postDict = [[NSDictionary alloc]initWithObjectsAndKeys: dict1,@"accountIdentifier",@"NONE",@"matchCriteria",
[[NSDictionary alloc] initWithObjectsAndKeys:@"en_US", @"errorLanguage", @"detailLevel", @"ReturnAll", nil], @"requestEnvelope", nil];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"https://svcs.sandbox.paypal.com/AdaptiveAccounts/GetVerifiedStatus"]] cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData timeoutInterval:60.0];
[request setHTTPMethod:@"POST"];
[request addValue:@"your_user_id" forHTTPHeaderField:@"X-PAYPAL-SECURITY-USERID"];
[request addValue:@"your_password" forHTTPHeaderField:@"X-PAYPAL-SECURITY-PASSWORD"];
[request addValue:@"your_signature" forHTTPHeaderField:@"X-PAYPAL-SECURITY-SIGNATURE"];
[request addValue:@"APP-80W284485P519543T" forHTTPHeaderField:@"X-PAYPAL-APPLICATION-ID"];
[request addValue:@"JSON" forHTTPHeaderField:@"X-PAYPAL-REQUEST-DATA-FORMAT"];
[request addValue:@"JSON" forHTTPHeaderField:@"X-PAYPAL-RESPONSE-DATA-FORMAT"];
[request addValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[request addValue:@"en_US" forHTTPHeaderField:@"Accept-Language"];
NSError *dError = nil;
NSData *postData = [NSJSONSerialization dataWithJSONObject:postDict options:0 error:&dError];
[request setHTTPBody:postData];
NSError *error = nil;
NSHTTPURLResponse *res = nil;
NSData *retData = [NSURLConnection sendSynchronousRequest:request returningResponse:&res error:&error];
if (error)
{
NSLog(@"Error getting paypal verification: %@", error);
}
else
{
NSError *jsonError = nil;
NSDictionary *details = [NSJSONSerialization JSONObjectWithData:retData options:kNilOptions error:&jsonError];
if (jsonError != nil) {
NSLog(@"Error parsing JSON %@", jsonError);
}
else {
NSLog(@"Paypal Verified: %@", details);
[self savePayPal];
}
}
But its not working correctly and I get the following response:
Paypal Verified: { error = ( { category = Application; domain = PLATFORM; errorId = 580023; message = "Cannot determine PayPal Account status"; severity = Error; subdomain = Application; } ); responseEnvelope = { ack = Failure; build = 21336090; correlationId = 96eea5ecc47fb; timestamp = "2016-04-26T13:41:52.437-07:00"; };
So does anyone know why I'm getting "Cannot determine PayPal Account status" and is this the best method for validating a PayPal email address?
Based on the error message, the email address in your API request is not an existed PayPal sandbox account, so PayPal throws out the "Cannot determine PayPal Account status" error message. You can register a sandbox account at developer.paypal.com ,refer to https://developer.paypal.com/docs/integration/paypal-here/sandbox-testing/managing-sandbox-accounts/?mark=sandbox, then put this new sandbox account in your API request, have a try.