Has anyone implemented the PayPal API through a native iPhone app?

It seems the only way to stay “in app” is to give them a UIWebView of the paypal mobile site and let them complete the transaction there, otherwise the user would need to use their API key.

Does this sound right and has anyone got or seen any sample code? I have to think this is a common piece of code.

  • Paypal MPL login button disabled on device
  • Will use of the PayPal iOS library get my app rejected?
  • paypal status is pending
  • PayPal email ID of the user who has approved Future Payment
  • Xcode 5.1 and compiling error for architecture x86_64
    Will Apple allow this?
    It is a charity app, so I am assuming there is no issue.

    I assumed wrong.
    Apple will not allow payments directly within apps using paypal. You have to re-direct to a web interface.

    6 Solutions Collect From Internet About “Has anyone implemented the PayPal API through a native iPhone app?”

    As answered below this code may still be useful for the purchase of physical goods


    Although this code works, App Store terms won’t allow you to use this code within an app.

    Original Answer:

    I figured this out after some heavy API research. Below is a method that creates an HTTP POST to send to Paypal and makes an NSURLRequest. You can fill in the appropriate string format variables. I used HTTP Client to check what I was doing.

    - (void)sendPayPalRequestPOST{
    recordResults = FALSE;
    NSString *parameterString = [NSString stringWithFormat:@"USER=%@&PWD=%@&SIGNATURE=%@&VERSION=57.0&METHOD=SetMobileCheckout&AMT=%.2f&CURRENCYCODE=USD&DESC=%@&RETURNURL=%@", userName, password, signature, self.donationAmount, @"Some Charge", returnCallURL];
    NSURL *url = [NSURL URLWithString:paypalUrlNVP];
    NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:url];
    NSString *msgLength = [NSString stringWithFormat:@"%d", [parameterString length]];
    [theRequest addValue: msgLength forHTTPHeaderField:@"Content-Length"];
    [theRequest setHTTPMethod:@"POST"];
    [theRequest setHTTPBody: [parameterString dataUsingEncoding:NSUTF8StringEncoding]];
    NSURLConnection *theConnection = [[NSURLConnection alloc] initWithRequest:theRequest delegate:self];
    if( theConnection ){
        webData = [[NSMutableData data] retain];
        [self displayConnectingView];
        NSLog(@"theConnection is NULL");

    After this you need to parse the response, grab the session key and create a UIWebView to take them to the mobile paypal site. Paypal lets you specify a “return URL” which you can make anything you want. Just keep checking the UIWebview in the delegate method for this address and then you know the transaction is complete.

    Then you send one more HTTP Post (similar to the one above) to Paypal to finalize the transaction. You can find the API information in the Paypal Mobile Checkout API docs.

    Apple will allow custom checkouts for physical purchases. I talked with them at the iPhone Tech Talks in London and they said that they will not support physical purchases with In App Purchase as they would have to deal with refunds, etc. They also referred to existing apps that have custom checkouts.

    Try to follow this link . I believe it would help you.

    It’s very simple to understand. The link has very simple flow & easy variable names


    When you say “I assumed wrong” about Apple allowing charitable donations within an app, can you provide any more information? I’m working on an app and there’s a requirement to allow charitable donations…I haven’t been able to find anything from Apple strictly forbidding it, but I haven’t been able to find an app that allows charitable donations in the store, either.

    (I struggled with whether to post this here and not as a new top-level question, but you’re the first person I’ve come across with direct knowledge about the charitable giving within an iPhone app question).

    Is it not possible using Paypal’s Mobile Payment Library?


    Depending on the complexity of your needs, PayPal’s iOS SDK (released March 2013) might be the ticket.