2012-07-31 10 views
8

Ich versuche Paypal Adaptive-Payment-API zu verwenden und es schwierig zu haben, es in Produktion zu schalten. Alles funktioniert wie erwartet im Sandbox-Modus und ich bekomme eine angemessene Antwort, aber wenn ich zu meiner Live-APP-ID wechsel, funktioniert es nicht.Paypal Adaptive Payments funktioniert im Sandbox-Modus, aber nicht Produktion

Dies sind die Konfigurationswerte I für Sandbox bin

PayPal URL : https://www.sandbox.paypal.com/webapps/adaptivepayment/flow/pay?paykey=[TOKEN_HERE] 
Application ID : APP-80W284485P519543T 

Diese Werte sind für mich in Sandbox-Modus arbeiten. Aber wenn ich auf die unter den Produktionswerten zu wechseln, wird er seine Arbeit

PayPal URL : https://www.paypal.com/webapps/adaptivepayment/flow/pay?paykey=[TOKEN_HERE] 
Application ID : [ACTUAL APP ID] 

This is what I mean by stops working. 
  • Im Produktionsmodus wird die Anwendung die paykey
  • es auf die Paypal-URL Hängt und dann leitet es auf ihrer Website
  • Vor Ort laden, erhalte ich die folgende Meldung

This transaction has already been approved. Please visit your PayPal Account Overview to see the details 

Die endgültige URL es bis auf endet - https://ic.paypal.com/webapps/adaptivepayment/flow/payinit?execution=e6s1

Screenshot - http://screencast.com/t/28qJZ9CIk

Es gibt auch eine dort ‚Return‘ Taste, und wenn ich darauf klicke ich jedes Mal an einem anderen Ort getroffen zu bekommen (Sieht aus wie ich werde, um zufällige failUrls gesendet)

ich den Code enthalten habe ich unten

$payRequest = new PayRequest(); 
$payRequest->actionType  = "PAY"; 
$payRequest->cancelUrl  = $cancelURL; //my success and fail urls 
$payRequest->returnUrl  = $returnURL; 

$payRequest->clientDetails = new ClientDetailsType(); 
$payRequest->clientDetails->applicationId = $this->config['application_id']; 
$payRequest->clientDetails->deviceId  = $this->config['device_id']; 
$payRequest->clientDetails->ipAddress  = $this->CI->input->ip_address(); 

$payRequest->currencyCode = $currencyCode; 

$payRequest->requestEnvelope = new RequestEnvelope(); 
$payRequest->requestEnvelope->errorLanguage = "en_US"; 

//I set the receiver and the amounts. I also define that these are digital goods payments  
$receiver1 = new receiver(); 
$receiver1->email = $opts['receiver_email']; 
$receiver1->amount = $opts['amount']; 
$receiver1->paymentType = 'DIGITALGOODS'; 
$payRequest->receiverList = new ReceiverList(); 
$payRequest->receiverList = array($receiver1); 

//Then I make the call 
$ap   = new AdaptivePayments(); 
$response = $ap->Pay($payRequest); 

if(strtoupper($ap->isSuccess) == 'FAILURE') { 
    log_message('error', "PAYMENT_FAIL : " . print_r($ap->getLastError(), true)); 
    return false; 
} else { 
    if($response->paymentExecStatus == "COMPLETED") { 
     header("Location: " . $this->config['success_url']); 
     exit; 
    } else { 
     $token  = $response->payKey; 
     $payPalURL = $this->config['paypal_redirect_url'] . 'paykey='.$token; 
     header("Location: ".$payPalURL); 
     exit; 
    } 
} 

Dieser Code aus ihrer Beispielimplementierung genommen wird, also nicht wirklich sicher Was läuft hier falsch? Weitere Informationen, die relevant sein könnten

  • I adaptive Zahlungen bin mit sicher zu stellen, dass der Sender und der Empfänger tatsächlich die Transaktion hat

  • ich die Zahlungsart als ‚DIGITAL WAREN‘ gesetzt haben

EDIT

ich eine Beispiel-URL mit t enthalten haben er bezahlt Schlüssel beigefügt

https://www.paypal.com/webapps/adaptivepayment/flow/pay?paykey=AP-0H388650F08226841 
+1

Können Sie ein Echo von $ paypalURL einbeziehen? – Robert

+2

@Robert sicher, ich habe die Frage mit dieser Info aktualisiert. – JohnP

Antwort

4

Ich fand das Problem, das mir all diese Trauer gab.

Das Paypal SDK ein paar Konstanten verwendet, die in /sdk/lib/Config/paypal_sdk_clientproperties

Die Konstanten der Benutzername, Passwort enthalten definiert sind, APPLICATION_ID die API-URL und ein paar andere. Diese werden direkt in der Datei /sdk/lib/CallerServices,php verwendet. Im Gegensatz zu dem, was Sie in einer API erwarten würden, werden diese Werte in der Setup-Phase nicht injiziert. Wenn Sie diese Datei nicht bemerken und die Werte nicht ändern, funktioniert der obige Code nicht.

Um das Problem zu beheben, aktualisieren Sie einfach die in der Datei definierten Werte und Sie sollten gut gehen.

Verwandte Themen