2016-01-13 2 views
2

Я использую API 2checkout для интеграции платежей в своем приложении. Я следую их API Tutorial. Я внес небольшие изменения в их подход. Ниже приведен немодифицированный код интерфейса с помощью учебника.Как добавить обычную библиотеку PHP в Laravel?

<form id="myCCForm" action="payment.php" method="post"> 
<input id="token" name="token" type="hidden" value=""> 
<div> 
    <label> 
     <span>Card Number</span> 
    </label> 
    <input id="ccNo" type="text" size="20" value="" autocomplete="off" required /> 
</div> 
<div> 
    <label> 
     <span>Expiration Date (MM/YYYY)</span> 
    </label> 
    <input type="text" size="2" id="expMonth" required /> 
    <span>/</span> 
    <input type="text" size="2" id="expYear" required /> 
</div> 
<div> 
    <label> 
     <span>CVC</span> 
    </label> 
    <input id="cvv" size="4" type="text" value="" autocomplete="off" required /> 
</div> 
<input type="submit" value="Submit Payment"> 

Я изменил линию <form id="myCCForm" action="payment.php" method="post"> к <form id="myCCForm" action="{{route('postPayment)}}" method="post">, а также добавили CSRF маркер в поле данной формы.

Эта вещь отлично работает.

Вторая часть - это сценарий на стороне сервера, который я хочу обработать в приложении Laravel. В учебнике это написано в файле payment.php. Скрипт работает отлично в payment.php, но я пытаюсь записать его в контроллер следующим образом:

<?php 

namespace App\Http\Controllers; 

use Illuminate\Http\Request; 

use App\Http\Requests; 
use App\Http\Controllers\Controller; 
use App\TwoCheckout; 



class PaymentsController extends Controller 
{ 

    /** 
    * Display a listing of the resource. 
    * 
    * @return \Illuminate\Http\Response 
    */ 
    public function index() 
    { 
     $twoCheckOut = TwoCheckout::find(1); 
     return view('payment')->with('twoCheckOut',$twoCheckOut); 
    } 

    public function process() 
    { 
     require_once("2checkout-php/lib/Twocheckout.php"); 

     Twocheckout::privateKey('6CC34113-3588-4B09-8ECB-958C0B3299F3'); 
     Twocheckout::sellerId('901303383'); 
     Twocheckout::sandbox(true); 


     try { 
      $charge = Twocheckout_Charge::auth(array(
       "sellerId" => "901303383", 
       "merchantOrderId" => "123", 
       "token" => 'Y2U2OTdlZjMtOGQzMi00MDdkLWJjNGQtMGJhN2IyOTdlN2Ni', 
       "currency" => 'USD', 
       "total" => '10.00', 
       "billingAddr" => array(
        "name" => 'Testing Tester', 
        "addrLine1" => '123 Test St', 
        "city" => 'Columbus', 
        "state" => 'OH', 
        "zipCode" => '43123', 
        "country" => 'USA', 
        "email" => '[email protected]', 
        "phoneNumber" => '555-555-5555' 
       ), 
       "shippingAddr" => array(
        "name" => 'Testing Tester', 
        "addrLine1" => '123 Test St', 
        "city" => 'Columbus', 
        "state" => 'OH', 
        "zipCode" => '43123', 
        "country" => 'USA', 
        "email" => '[email protected]', 
        "phoneNumber" => '555-555-5555' 
       ) 
      ), 'array'); 
      if ($charge['response']['responseCode'] == 'APPROVED') { 
       echo "Thanks for your Order!"; 
      } 
     } catch (Twocheckout_Error $e) { 
      $e->getMessage(); 
     } 
    } 


} 

проблема возникает в следующих строках.

require_once("2checkout-php/lib/Twocheckout.php"); 

      Twocheckout::privateKey('6CC34113-3588-4B09-8ECB-958C0B3299F3'); 
      Twocheckout::sellerId('901303383'); 
      Twocheckout::sandbox(true); 

ОШИБКА

BadMethodCallException в Builder.php линии 2099: Призыв к неопределенным метод Осветите \ Database \ Query \ Builder :: PrivateKey()

Что я делаете неправильно здесь?

ответ

4

Проблема заключается в том, что у вас есть модель под названием Twocheckout, что вы импортируете в верхней части файла с:

use App\TwoCheckout; 

Это означает, что все виды использования Twocheckout в этом файле контроллера будет относиться к красноречивой модели , что, в свою очередь, означает, что вы не можете получить доступ к классу с тем же именем, что и с 2checkout library. Чтобы исправить это можно использовать псевдоним для имени модели класса, как так:

use App\TwoCheckout as TwoCheckoutModel; 

А где вам нужен класс модели просто использовать, что:

public function index() 
{ 
    $twoCheckOut = TwoCheckoutModel::find(1); 
    return view('payment')->with('twoCheckOut', $twoCheckOut); 
} 

Таким образом, имя класса Twocheckout будет ссылаться правильный класс библиотеки.

+0

изменил название модели с TwoCheckout на TwoCheckoutAccount ... еще одна ошибка для строки 'Twocheckout :: privateKey ('6CC34113-3588-4B09-8ECB-958C0B3299F3');' * App 'класса \ Http \ Controllers \ Twocheckout 'not found * –

+0

Это потому, что он разрешает внутри пространства имен контроллеров, что является 'App \ Http \ Controllers'. Вы можете добавить дополнительный оператор 'use Twocheckout;', чтобы указать, что класс должен быть разрешен в глобальном пространстве имен. – Bogdan

+0

Спасибо Bogdan :) –

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

  • Нет связанных вопросов^_^