2016-07-12 4 views
0

Ich versuche, die PayPal-APIAufruf der Controller in der ich bin: nicht gefunden

namespace App\Http\Controllers; 

use PayPal; 
use Redirect; 

class PaypalPaymentController extends Controller{ 

    private $_apiContext; 

    public function __construct() 
    { 
    $this->_apiContext = PayPal::ApiContext(
    config('services.paypal.client_id'), 
    config('services.paypal.secret')); 

    $this->_apiContext->setConfig(array(
     'mode' => 'sandbox', 
     'service.EndPoint' => 'https://api.sandbox.paypal.com', 
     'http.ConnectionTimeOut' => 30, 
     'log.LogEnabled' => true, 
     'log.FileName' => storage_path('logs/paypal.log'), 
     'log.LogLevel' => 'FINE' 
    )); 

    } 

    public function getCheckout() 
    { 
    $payer = PayPal::Payer(); 
    $payer->setPaymentMethod('paypal'); 

    $amount = PayPal:: Amount(); 
    $amount->setCurrency('EUR'); 
    $amount->setTotal(500); // This is the simple way, 
    // you can alternatively describe everything in the order separately; 
    // Reference the PayPal PHP REST SDK for details. 

    $transaction = PayPal::Transaction(); 
    $transaction->setAmount($amount); 
    $transaction->setDescription('Altaro VM Backup'); 

    $redirectUrls = PayPal:: RedirectUrls(); 
    $redirectUrls->setReturnUrl(action('[email protected]')); 
    $redirectUrls->setCancelUrl(action('[email protected]')); 

    $payment = PayPal::Payment(); 
    $payment->setIntent('sale'); 
    $payment->setPayer($payer); 
    $payment->setRedirectUrls($redirectUrls); 
    $payment->setTransactions(array($transaction)); 

    $response = $payment->create($this->_apiContext); 
    $redirectUrl = $response->links[1]->href; 

    return Redirect::to($redirectUrl); 
    } 

    public function getDone(Request $request) 
    { 
    $id = $request->get('paymentId'); 
    $token = $request->get('token'); 
    $payer_id = $request->get('PayerID'); 

    $payment = PayPal::getById($id, $this->_apiContext); 

    $paymentExecution = PayPal::PaymentExecution(); 

    $paymentExecution->setPayerId($payer_id); 
    $executePayment = $payment->execute($paymentExecution, $this->_apiContext); 

    // Clear the shopping cart, write to database, send notifications, etc. 

    // Thank the user for the purchase 
    return "Merci pour votre achat"; 
    } 

    public function getCancel() 
    { 
    // Curse and humiliate the user for cancelling this most sacred payment (yours) 
    return "Erreur"; 
    } 

} 

zu implementieren Wie Sie im Controller sehen kann ich versuche, andere Funktion der Steuerung zu nennen ich bin in:

$redirectUrls->setReturnUrl(action('[email protected]')); 
$redirectUrls->setCancelUrl(action('[email protected]')); 

Aber ich habe folgende Fehlermeldung:

InvalidArgumentException in UrlGenerator.php line 602: 
Action App\Http\Controllers\[email protected] not defined. 

ich verstehe nicht, wie es überhaupt möglich ist ... ich überprüfte mehrere Zeit S die Rechtschreibung, hier ist alles in Ordnung.

Irgendwelche Gedanken?

EDIT:

ich dies auch versucht:

$redirectUrls->setReturnUrl(route('paypal.done')); 
$redirectUrls->setCancelUrl(route('paypal.cancel')); 

mit diesen Routen:

Route::get('done', [ 
    'as' => 'paypal.done', 
    'uses' => '[email protected]' 
]); 

Route::get('cancel', [ 
    'as' => 'paypal.cancel', 
    'uses' => '[email protected]' 
]); 

Es funktioniert!

+0

Aus den Augen scheint es eher ein Problem mit der Paypal API als Laravel überhaupt. Mein Gedanke ist, dass Paypal 'action ('PaypalPaymentController @ getDone')' nicht als Aktion erkennt. Vielleicht erwartet es einen Rückruf? –

+0

TIPP: Sie sollten '$ redirectUrl = $ response-> links [1] -> href;' nicht verwenden. Ich empfehle stattdessen $ response-> getApprovalLink(); 'stattdessen. –

+0

TIPP: Außerdem müssen Sie den ''service.EndPoint'' nicht mehr senden. Es wird automatisch aus dem Modus ermittelt. –

Antwort

0

Ich denke, Sie müssen auch eine Route zu den Methoden definieren, sonst kann die URL nicht erstellt werden und gibt einen Fehler zurück.

+0

Danke, es hat funktioniert! Siehe meine Bearbeitung –

Verwandte Themen