Единый заряд с StripeJS с использованием Laravel 5.2

Я абсолютно не могу найти в Интернете ничего, что могло бы помочь мне интегрировать полосу с 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' =>'ChargeController@pay']);

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

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 вместо кассира. В настоящее время я смотрю на эту ошибку

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

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

2 ответа

Решение

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

вот решение

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

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

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!';
        }
    }
}

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

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

"laravel/cashier": "~6.0"

Вам также необходимо добавить поставщиков в ваш файл config/app.php:

Laravel\Cashier\CashierServiceProvider::class

В config/services добавьте ключи Stripe API, и это все для настройки. Чтобы использовать полосу для покупки одного товара, просто нажмите кнопку Покупка полосой:

{!! 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, чтобы увидеть различные данные, которые проходит кнопка полосы.

Другие вопросы по тегам