2013-09-03 3 views
1

Я успешно интегрировал PayPal в свое приложение iOS с использованием библиотеки PayPal MPL. Но проблема в том, как получить идентификатор транзакции из paykey, который я получаю от метода обратного вызова PayPal.Нужно иметь идентификатор транзакции с помощью ключа оплаты PayPal

Я пробовал этот способ, но получаю ошибку неверного запроса.

- (void)paymentSuccessWithKey:(NSString *)payKey andStatus:(PayPalPaymentStatus)paymentStatus 
{ 

NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"https://svcs.paypal.com/AdaptivePayments/PaymentDetails"]]; 

//NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"https://svcs.sandbox.paypal.com/AdaptivePayments/PaymentDetails"]]; 

    NSMutableURLRequest *theRequest=[NSMutableURLRequest requestWithURL:url]; 

    NSString *parameterString = [NSString stringWithFormat:@"payKey=%@&requestEnvelope.errorLanguage=%@",payKey,@"en_US"]; 

    NSString *msgLength = [NSString stringWithFormat:@"%d", [parameterString length]]; 

    [theRequest addValue: msgLength forHTTPHeaderField:@"Content-Length"]; 

    //do post request for parameter passing 
    [theRequest setHTTPMethod:@"POST"]; 

    [theRequest setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"]; 

    //passing key as a http header request 
    [theRequest addValue:api_username forHTTPHeaderField:@"X-PAYPAL-SECURITY-USERID"]; 

    //passing key as a http header request 
    [theRequest addValue:api_password forHTTPHeaderField:@"X-PAYPAL-SECURITY-PASSWORD"]; 

    [theRequest addValue:api_signature forHTTPHeaderField:@"X-PAYPAL-SECURITY-SIGNATURE"]; 

    [theRequest addValue:@"JSON" forHTTPHeaderField:@"X-PAYPAL-REQUEST-DATA-FORMAT"]; 

    [theRequest addValue:@"JSON" forHTTPHeaderField:@"X-PAYPAL-RESPONSE-DATA-FORMAT"]; 

    [theRequest addValue:app_id forHTTPHeaderField:@"X-PAYPAL-APPLICATION-ID"]; 

    [theRequest setHTTPBody: [parameterString dataUsingEncoding:NSUTF8StringEncoding]]; 

    NSURLResponse *response; 
    NSError *err; 
    NSData *responseData = [NSURLConnection sendSynchronousRequest:theRequest returningResponse:&response error:&err]; 

    NSString* s = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding]; 
    NSDictionary *result = [s JSONValue] ; 

} 

Мне нужно сохранить идентификатор транзакции на бэкэнд приложения для будущих ссылок. Нужно знать, как получить его как можно скорее. Любая помощь будет оценена по достоинству.

Благодаря & уважения Панкай

ответ

0

Я не знаю о прошивке, но и для Andorid, мы реализуем PayPalResultDelegate, Serializable интерфейс, в классе, как. я делюсь мой код:

class ResultDelegate implements PayPalResultDelegate, Serializable 
{ 
    private static final long serialVersionUID = 10001L; 

    PaypalDetailImplementation ob = new PaypalDetailImplementation() ; 

    public void onPaymentSucceeded(String payKey, String paymentStatus) 
    { 
     ob.resultTitle = "SUCCESS"; 
     ob.resultInfo = "You have successfully completed your transaction."; 
     ob.resultExtra = "Key: " + payKey; 

     this.displayInformation("onPaymentSucceeded", ob.resultTitle, ob.resultInfo, ob.resultExtra) ; 
    } 

    public void onPaymentFailed(String paymentStatus, String correlationID,String payKey, String errorID, String errorMessage) 
    { 
     ob.resultTitle = "FAILURE"; 
     ob.resultInfo = errorMessage; 
     ob.resultExtra = "Error ID: " + errorID + "\nCorrelation ID: "+ correlationID + "\nPay Key: " + payKey; 

     this.displayInformation("onPaymentFailed", ob.resultTitle, ob.resultInfo, ob.resultExtra) ; 
    } 

    public void onPaymentCanceled(String paymentStatus) 
    { 
     ob.resultTitle = "CANCELED"; 
     ob.resultInfo = "The transaction has been cancelled."; 
     ob.resultExtra = ""; 

     this.displayInformation("onPaymentCanceled", ob.resultTitle, ob.resultInfo, ob.resultExtra) ; 
    } 

    public void displayInformation (String msg , String resultTitle , String resultInfo , String resultExtra) 
    { 
     Log.i("Result as message : ",msg); 
     Log.i(resultTitle,"tushar:onPaymentSucceeded"); 
     Log.i(resultInfo,"tushar:onPaymentSucceeded"); 
     Log.i(resultExtra,"tushar:onPaymentSucceeded"); 

    } 
+1

Спасибо за ваш ответ, но насколько я понимаю выше код не дает идентификатор транзакции. единственное, что он дал, это PayKey, который у меня уже есть. – pankaj

0

Во-первых, это критически важно, чтобы убедиться, что вы не доставляете приложение с API пароль & подписи. В противном случае злоумышленник может разобрать ваше приложение, восстановить учетные данные и выполнить произвольные операции в вашей учетной записи. Read more about verifying a payment.

Но, предполагая, что вы реализовали аналогичный код на своем сервере, он должен работы. Какова точная ошибка, которую вы получаете?

+0

Спасибо за ваш ответ tomwhipple, я уже делал это, но все как моя проблема решена. – pankaj

0

У меня эта проблема решена.

Я делал X-PAYPAL-REQUEST-DATA-FORMAT типа JSON, но когда я сменил его на NV, я начал регистрировать идентификатор транзакции.

Спасибо всем за их ответы.

+0

Что здесь NV? Как вы сказали, вы изменили формат запроса от JSON до NV. –

+0

@NishantTyagi NV - это формат именных значений, поддерживаемый PayPal – pankaj

Смежные вопросы