3

2checkout API を使用して、アプリケーションに支払いを統合しています。私は彼らのAPI チュートリアルに従っています。私は彼らのアプローチにわずかな修正を加えました。以下は、チュートリアルで変更されていないフロントエンド コードです。

<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 トークン フィールドを追加しました。

このことはうまくいっています。

第2弾は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);

エラー

Builder.php 行 2099 の BadMethodCallException: 未定義のメソッド Illuminate\Database\Query\Builder::privateKey() への呼び出し

ここで何が間違っていますか?

4

1 に答える 1

4

Twocheckout問題は、ファイルの先頭に次のようにインポートしているという名前のモデルがあることです。

use App\TwoCheckout;

これは、そのコントローラ ファイルでのすべての使用がEloquent モデルを参照することを意味します。これは、 2checkout ライブラリTwocheckoutから同じ名前のクラスにアクセスできないことを意味します。次のように、モデル クラス名にエイリアスを使用できることを修正するには、次のようにします。

use App\TwoCheckout as TwoCheckoutModel;

モデルクラスが必要な場合は、それを使用してください:

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

そうすれば、クラス名Twocheckoutは正しいライブラリ クラスを参照します。

于 2016-01-13T06:20:32.773 に答える