Stripe PaymentIntent
請求〜決済
請求情報作成(php)
※laravel
use Stripe\PaymentIntent;
Stripe::setApiKey(‘XXXXXXXXXXXXX’);
Stripe::setApiVersion(‘XXXXXXXXXXXXX’);
$intent = PaymentIntent::create([
’payment_method_types’ => [‘card’],
’currency’ => ‘jpy’,
’amount’ => 20000,
顧客情報参照
’customer’ => $customer->id,
この設定がないと後で決済情報を取得できない
’setup_future_usage’ => ‘off_session’,
true=請求と同時に決済する / false=請求の作成のみで後に決済を行う(ホテルの予約方式)
’capture’ => true/false,
請求先
’transfer_data’ => [
’destination’ => ‘{{CONNECTED_STRIPE_ACCOUNT_ID}}’,
’amount’ => ‘{{金額}}’,
],
]);
return view(‘stripe.create’)->with([
’data’ => [
’client_secret‘ => $intent->client_secret,
],
]);
決済処理(JavaScript)
※html+JavaScript
<script src=”https://js.stripe.com/v3/”></script>
<form id=”payment-form”>
<input id=”name” placeholder=”Jenny Rosen” value=”Jenny Rosen” required />
stripeライブラリを読み込んで自動的にカード情報の入力欄が作成される
<div id=”card-element”>
<!-- Elements will create input elements here -->
</div>
<button id=”submit”>Pay</button>
</form>
<script>
document.addEventListener(‘DOMContentLoaded’, async () => {
let stripe = Stripe(‘XXXXXXXXXXXXXXXXXXXX’);
const clientSecret = “{{ $data[‘client_secret‘] }}”;
const elements = stripe.elements();
const card = elements.create(‘card’);
card.mount(‘#card-element’);
// When the form is submitted…
const form = document.getElementById(‘payment-form’);
let submitted = false;
form.addEventListener(‘submit’, async (e) => {
e.preventDefault();
// Disable double submission of the form
if(submitted) { return; }
submitted = true;
form.querySelector(‘button’).disabled = true;
const nameInput = document.querySelector(‘#name’);
stripeのAPIをcallして請求情報を作成
const {error: stripeError, paymentIntent} = await stripe.confirmCardPayment(
clientSecret,
{
payment_method: {
card: card,
billing_details: {
name: nameInput.value,
},
},
}
);
});
});
</script>
決済情報取得(php)
$customer = Customer::retrieve(‘XXXXXXXXXXXXXXX’);
JavaScript側での決済処理の戻り値paymentIntent.idを取得
$paymentIntentId = 〜;
PaymentIntent情報取得
$paymentIntent = PaymentIntent::retrieve($paymentIntentId);
PaymentMethod情報取得
$paymentMethod = PaymentMethod::retrieve($paymentIntent->payment_method);
$paymentMethod->attach([
’customer’ => $customer->id,
]);
決済情報取得
$paymentMethod = PaymentMethod::all([
’customer’ => $customer->id,
’type’ => ‘card’
]);
顧客情報
作成
use Stripe\Customer;
Stripe::setApiKey(‘XXXXXXXXXXXXX’);
Stripe::setApiVersion(‘XXXXXXXXXXXXX’);
$customer = Customer::create([
’name’ => ‘name’,
’description’ => ‘description’,
]);
呼び出し
use Stripe\Customer;
Stripe::setApiKey(‘XXXXXXXXXXXXX’);
Stripe::setApiVersion(‘XXXXXXXXXXXXX’);
$customer = Customer::retrieve(CustomerID);