Как добавить простую библиотеку PHP в Laravel?

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

<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" => 'testingtester@2co.com',
"phoneNumber" => '555-555-5555'
),
"shippingAddr" => array(
"name" => 'Testing Tester',
"addrLine1" => '123 Test St',
"city" => 'Columbus',
"state" => 'OH',
"zipCode" => '43123',
"country" => 'USA',
"email" => 'testingtester@2co.com',
"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:
Вызов неопределенного метода Illuminate \ Database \ Query \ Builder :: privateKey ()

Что я здесь не так делаю?

3

Решение

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

use App\TwoCheckout;

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

use App\TwoCheckout as TwoCheckoutModel;

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

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

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

4

Другие решения

Других решений пока нет …