2014-02-26 2 views
8

Ich habe das Omnipay PayPal_Express-Checkout-Skript auf meiner Website verwendet, und alles funktioniert einwandfrei, wenn ich für eine Bestellung bezahlen, außer die Bestellung wird nicht im PayPal Sandbox-Konto angezeigt.PayPal Express Checkout mit Omnipay zeigt keine Bestellung im Sandbox-Konto an

Es zeigt, wenn ich das gleiche Skript für PayPal_Pro verwende.

Mein Code ist wie folgt:

use Omnipay\Omnipay; 

// PayPal Express: 

if(isset($_POST['paypalexpress'])) { 

$gateway = GatewayFactory::create('PayPal_Express'); 
$gateway->setUsername('{myusername}'); 
$gateway->setPassword('{mypassword}'); 
$gateway->setSignature('{mysignauture}'); 
$gateway->setTestMode(true); 

$response = $gateway->purchase(
array(
    'cancelUrl'=>'http://www.mysite.com/?cancelled', 
    'returnUrl'=>'http://www.mysite.com/?success', 
    'amount' => "12.99", 
    'currency' => 'GBP', 
    'Description' => 'Test Purchase for 12.99' 
    ) 

)->send(); 

$response->redirect(); 
} 

ich zwei Testkonten in meinem Sandbox erstellt habe, eine für die oben genannte API ist und ich benutze mit zu bezahlen. Ich habe versucht, mit den Testkartendaten und dem Login zu bezahlen, aber das Bestelldetail wird nicht im Konto angezeigt.

Kann jemand helfen?

Antwort

11

Es sieht so aus, als ob Sie den completePurchase() Teil vermissen, wenn Paypal zu Ihrem returnUrl zurückkehrt. Mein Code wird davon ausgegangen, dass Sie die Bestelldaten in einer Variablen $ Auftrag haben, aber es ist etwas wie folgt aussehen:

if(isset($_GET['success'])) { 
    $response = $gateway->completePurchase(array(
     'transactionId' => $order->transaction, 
     'transactionReference' => $order->reference, 
     'amount' => $order->total, 
     'currency' => $order->currency, 
    ))->send(); 

    if (! $response->isSuccessful()) 
    { 
     throw new Exception($response->getMessage()); 
    } 
} 

Lassen Sie mich wissen, wenn Sie Hilfe benötigen, um die Auftragsdaten auf Rückkehr abruft. Es kann in einer Sitzung gespeichert werden, bevor Sie umleiten, oder in einer Datenbank. Wenn Sie dies noch nicht getan haben, sehen Sie sich den Beispielcode an: https://github.com/omnipay/example/blob/master/index.php

+0

Vielen Dank für diese, ich die „transactionId“ glauben ist das Zeichen von PayPal aber was ist „transactionReference“. Obwohl ich einen eindeutigen Schlüssel zu "transactionReference" übergeben habe und es funktioniert gut, aber ich muss nur sicher sein. Könntest Du das erläutern? Vielen Dank. – Shina

+0

Hallo Shina. Es ist eine Referenz von Paypal. Nach dem Senden der Kaufanforderung, aber vor der Umleitung, rufen Sie $ response-> getTransactionReference() auf, um die Referenz zu erhalten. – beech

+0

Danke Buche, jetzt habe ich festgestellt, dass mein Token ist das gleiche wie $ response-> getTransactionReference(). Was ist Transaktions-ID? mein zufälliger Schlüssel? – Shina

-2

Dies wird in einer Schriftart mit einem festen Abstand angezeigt. Die ersten vier Leerzeichen werden entfernt, aber alle anderen Leerzeichen bleiben erhalten.

Markdown and HTML are turned off in code blocks: 
<i>This is not italic</i>, and [this is not a link](http://example.com) 

So erstellen Sie keinen Block, sondern ein Inline-Code Spanne, verwenden Sie Backticks:

Der $ Charakter ist gerade eine Abkürzung für window.jQuery.

Wenn Sie eine vorformatierte Block innerhalb einer Liste Spiegelstrich von acht Leerzeichen haben wollen:

  1. Dies ist normaler Text.
  2. Also das ist, aber nun folgt ein Codeblock:

    Skip a line and indent eight spaces. 
    That's four spaces for the list 
    and four to trigger the code block.