2016-06-03 1 views
0

Я абсолютно ничего не могу найти, чтобы помочь мне интегрировать полосу с Laravel 5.2. Это было сложным, чтобы узнать эту структуру из-за многих Устаревшие между версиями :(Single Charge With StripeJS с использованием Laravel 5.2

Во всяком случае, вот что я работаю с

JS-файла для захвата входа

$(function() { 
    var $form = $('#payment-form'); 
    $form.submit(function(event) { 
    // Disable the submit button to prevent repeated clicks: 
    $form.find('.submit').prop('disabled', true); 

    // Request a token from Stripe: 
    Stripe.card.createToken($form, stripeResponseHandler); 

    // Prevent the form from being submitted: 
    return false; 
    }); 
}); 
function stripeResponseHandler(status, response) { 
    // Grab the form: 
    var $form = $('#payment-form'); 
    var CSRF_TOKEN = $('meta[name="csrf-token"]').attr('content'); 

    if (response.error) { // Problem! 

    // Show the errors on the form: 
    $form.find('.payment-errors').text(response.error.message); 
    $form.find('.submit').prop('disabled', false); // Re-enable submission 

    } else { // Token was created! 

    // Get the token ID: 
    var token = response.id; 
    console.log(token); 
    // Insert the token ID into the form so it gets submitted to the server: 
    $form.append($('<input type="hidden" name="stripeToken">').val(token)); 

    // Submit the form: 
    $form.get(0).submit(); 
    } 
}; 

когда форма делается я маршрут пользователь {{ route('success') }} через атрибут action="" в форме.

Route::any('/success', ['as' => 'success', 'uses' =>'[email protected]']); 

вот мой контроллер с код, предоставляемый полоска ... как вы можете видеть, что это не будет работать

namespace App\Http\Controllers; 

use Illuminate\Http\Request; 
use App\Http\Requests; 
use App\Http\Requests\CreateSongRequest; 
use Illuminate\Foundation\Http\FormRequest; 
use Billable; 
use Input; 

class ChargeController extends Controller 
{ 
    public function pay(Request $request){ 
     if(Input::has('stripeToken')){ 
      $token = Input::get('stripeToken'); 
      $amount = 10; 
// I cannot use this part even though it is in the stripe documentation 
      $customer = Stripe_Customer::create(array(
           'card' => $token 
          )); 
      $charge = Stripe_Charge::create(array(
         'customer' => $customer->id, 
         'amount' => ($amount*100), 
         'currency' => 'usd', 
         'description' => "test" 
        )); 
      echo 'success!'; 
     } 
    } 
} 

Я смотрю на использование StripeJS documentation вместо кассира. В настоящее время я смотрю на эту ошибку

Fatal error: Class 'App\Http\Controllers\Stripe_Customer' not found

И вот где документация заканчивается. Любая помощь? Я бы предпочел использовать кассир, но я не могу найти никакой документации для использования без подписки, а веб-сайт laravel не очень помогает.

+0

у вас есть класс Stripe_Customer? –

+0

Эта ошибка ищет контроллер, существует ли Stripe_Controller в этом месте? –

+0

@AchrafKhouadja класс не существует, потому что нет учебников, чтобы рассказать мне, что добавить туда. документы StripeJS останавливаются там –

ответ

1

ответ Кевина нормально, во всяком случае, если вы все еще заинтересуют о том, что случилось с вашим кодом

здесь решение

Попробуйте этот код в контроллере

Прежде всего, вам нужно добавить этот пакет

composer require stripe/stripe-php 

Тогда попробуйте

class ChargeController extends Controller 
{ 

    public function __construct(){ 
    \Stripe\Stripe::setApiKey('d8e8fca2dc0f896fd7cb4cb0031ba249'); 
    } 

    public function pay(Request $request){ 
     if(Input::has('stripeToken')){ 
      $token = Input::get('stripeToken'); 
      $amount = 10; 

      $charge = \Stripe\Charge::create(array(
         'customer' => $customer->id, 
         'amount' => ($amount*100), 
         'currency' => 'usd', 
         'description' => "test", 
         'card' => $token 
        )); 
      echo 'charged successfuly!'; 
     } 
    } 
} 

Если это порождает ошибку, связанную с идентификатором клиента, вы можете сначала создать клиента, а затем оплатить

2

Я рекомендую использовать Кассир. В вашем композитору требуется:

"laravel/cashier": "~6.0" 

Вам нужно добавить к поставщикам в вашей конфигурации/app.php, а также:

Laravel\Cashier\CashierServiceProvider::class 

При конфигурации/услуги добавить свои ключи API нашивки и это о это для настройки. Для того, чтобы использовать полосу для одной покупки продукта просто интегрировать кнопку нашивки Purchase:

{!! Form::open(array('url' => '/checkout')) !!} 
    {!! Form::hidden('product_id', $product->id) !!} 
    <script 
    src="https://checkout.stripe.com/checkout.js" class="stripe-button" 
    data-key="{{env('STRIPE_API_PUBLIC')}}" 
    data-name="your app" 
    data-billingAddress=true 
    data-shippingAddress=true 
    data-label="Buy ${{ $product->price }}" 
    data-description="{{ $product->name }}" 
    data-amount="{{ $product->priceToCents() }}"> 
    </script> 
{!! Form::close() !!} 

В качестве альтернативы вы можете интегрировать тележку и передать всю покупку в полоску оттуда, но это немного сложнее. Я настоятельно рекомендую это, это помогло мне понять все это для моего магазина: https://leanpub.com/easyecommerce

После того, как от вида маршрута, вы передаете в метод контроллера, где вы берете запрос:

public function index(Request $request) 
{ .... 

Вы можете var_dump в см. различные данные, которые проходит кнопка полосы.

+0

Но как вы «заряжаете» карту на бэкэнде? Из того, что я понимаю с помощью этого метода, является то, что он генерирует токен, но вам нужно что-то делать с ним. –

+0

Я понял. Страница '/ checkout' должна содержать код PHP здесь https://stripe.com/docs/charges –

+0

Да, они обрабатываются с их конца, но вы также можете захватить все эти данные в своем контроллере в качестве запроса –