Alguém implementou a API do PayPal por meio de um aplicativo nativo do iPhone?

Parece que a única maneira de ficar “no aplicativo” é dar a eles um UIWebView do site móvel paypal e permitir que eles concluam a transação, caso contrário, o usuário precisaria usar a chave da API.

Isso soa certo e alguém já viu ou viu algum código de exemplo? Eu tenho que pensar que isso é um pedaço comum de código.

ATUALIZAÇÃO: A Apple permitirá isso? É um aplicativo de caridade, então estou assumindo que não há problema.

Re-UPDATE: eu assumi errado. A Apple não permitirá pagamentos diretamente em aplicativos usando o paypal. Você tem que redirect para uma interface da web.

Re-Update: Conforme respondido abaixo, este código ainda pode ser útil para a compra de bens físicos


Atualizar:

Embora esse código funcione, os termos da App Store não permitem que você use esse código em um aplicativo.


Resposta Original:

Eu percebi isso depois de uma pesquisa pesada sobre API. Abaixo está um método que cria um HTTP POST para enviar para o Paypal e faz um NSURLRequest. Você pode preencher as variables ​​de formato de string apropriadas. Eu usei o HTTP Client para verificar o que estava fazendo.

- (void)sendPayPalRequestPOST{ perfomingSetMobileCheckout=YES; 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]; NSLog(parameterString); 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]; }else{ NSLog(@"theConnection is NULL"); } } 

Depois disso, você precisará analisar a resposta, pegar a chave de session e criar um UIWebView para levá-los ao site paypal móvel. O Paypal permite que você especifique um “URL de retorno” que você pode fazer o que quiser. Apenas continue verificando o UIWebview no método delegado para esse endereço e, em seguida, você sabe que a transação foi concluída.

Então você envia mais um HTTP Post (similar ao anterior) ao Paypal para finalizar a transação. Você pode encontrar as informações da API nos documentos da API do Paypal Mobile Checkout.

A Apple permitirá checkouts personalizados para compras físicas. Conversei com eles no iPhone Tech Talks, em Londres, e eles disseram que não suportariam compras físicas com In App Purchase, pois teriam que lidar com reembolsos, etc. Eles também se referiam a aplicativos existentes que tinham checkouts personalizados.

Tente seguir este link. Eu acredito que isso ajudaria você.

É muito simples de entender. O link tem um stream muito simples e nomes fáceis de variables

http://helpmesolve.blogspot.com/

Quando você diz “eu presumi errado” sobre a Apple permitindo doações de caridade dentro de um aplicativo, você pode fornecer mais alguma informação? Estou trabalhando em um aplicativo e há uma exigência para permitir doações de caridade … Não consegui encontrar nada da Apple proibindo-o estritamente, mas não consegui encontrar um aplicativo que permita doações de caridade armazenar, também.

(Eu me esforcei para postar isso aqui e não como uma nova pergunta de alto nível, mas você é a primeira pessoa com quem me deparo com conhecimento direto sobre as doações de caridade em uma questão de aplicativo para iPhone).

Não é possível usar a biblioteca de pagamentos móveis do Paypal?

https://www.x.com/community/ppx/xspaces/mobile/mep?view=overview

Dependendo da complexidade de suas necessidades, o iOS SDK do PayPal (lançado em março de 2013) pode ser o ticket.