<div class="mt-8">
<h3 class="text-lg font-medium text-gray-900">{{ __('Change Payment Method') }}</h3>
<div class="mt-2 shadow overflow-hidden sm:rounded-md">
<div class="px-4 py-5 bg-white sm:p-6">
@livewire('tenant.billing.current-payment-method')
<div class="hidden sm:block">
<div class="py-4">
<div class="border-t border-gray-200"></div>
</div>
</div>
<label for="card-holder-name" class="block text-sm font-medium leading-5 text-gray-700">{{ __('Card Holder Name') }}</label>
<div class="mt-1 relative rounded-md shadow-sm">
<input id="card-holder-name" type="text" class="rounded-md shadow-sm border-gray-300 focus:border-indigo-300 focus:ring focus:ring-indigo-200 focus:ring-opacity-50 w-full" placeholder="{{ __('John Doe') }}">
</div>
<div class="mt-2 relative rounded-md shadow-sm">
<div id="card-element" class="rounded-md shadow-sm border-gray-300 focus:border-indigo-300 focus:ring focus:ring-indigo-200 focus:ring-opacity-50 w-full p-3"></div>
</div>
<p id="payment-method-message" class="text-sm"></p>
</div>
<div class="px-4 sm:px-6 py-2 bg-gray-50 flex justify-end">
<button id="card-button" data-secret="{{ $intent->client_secret }}" class="py-2 px-4 border border-transparent text-sm font-medium rounded-md text-white bg-indigo-600 shadow-sm hover:bg-indigo-500 focus:outline-none focus:shadow-outline-blue focus:bg-indigo-500 active:bg-indigo-600 transition duration-150 ease-in-out">
{{ __('Update Payment Method') }}
</button>
</div>
</div>
</div>
<script src="https://js.stripe.com/v3/"></script>
<script>
const stripe = Stripe('{{ env('STRIPE_KEY') }}');
const elements = stripe.elements();
const cardElement = elements.create('card');
cardElement.mount('#card-element');
const cardHolderName = document.getElementById('card-holder-name');
const cardButton = document.getElementById('card-button');
const clientSecret = cardButton.dataset.secret;
function paymentMethodMessage(message, success) {
document.getElementById('payment-method-message').innerHTML = message;
document.getElementById('payment-method-message').classList = 'text-sm mt-4 ' + (success ? 'text-green-500' : 'text-red-500');
}
cardButton.addEventListener('click', async (e) => {
const { setupIntent, error } = await stripe.confirmCardSetup(
clientSecret, {
payment_method: {
card: cardElement,
billing_details: { name: cardHolderName.value }
}
}
);
if (error) {
alert('error')
paymentMethodMessage(error.message, false);
} else {
paymentMethodMessage('Payment method updated successfuly.', true);
@this.set('paymentMethod', setupIntent.payment_method);
@this.call('save');
}
});
</script>
|