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