调用我在的控制器:找不到

时间:2016-07-12 12:55:14

标签: laravel laravel-5 laravel-routing

我正在尝试实施PayPal API

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('PaypalPaymentController@getDone'));
    $redirectUrls->setCancelUrl(action('PaypalPaymentController@getCancel'));

    $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";
  }

}

正如您在控制器中看到的那样,我正在尝试调用控制器的其他功能:

$redirectUrls->setReturnUrl(action('PaypalPaymentController@getDone'));
$redirectUrls->setCancelUrl(action('PaypalPaymentController@getCancel'));

但我有以下错误:

InvalidArgumentException in UrlGenerator.php line 602:
Action App\Http\Controllers\PaypalPaymentController@getDone not defined.

我不明白它是怎么可能的......我多次检查拼写,这里的一切都是正确的。

有什么想法吗?

编辑:

我也试过这个:

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

使用这些路线:

Route::get('done', [
  'as' => 'paypal.done',
  'uses' => 'PaypalPaymentController@getDone'
]);

Route::get('cancel', [
  'as' => 'paypal.cancel',
  'uses' => 'PaypalPaymentController@getCancel'
]);

有效!

1 个答案:

答案 0 :(得分:0)

我认为您还必须定义到方法的路由,否则无法构建URL并返回错误。