Stripe



Charger Stripe via Composer

"require": {
	"stripe/stripe-php": "@stable"
},
Stripe.js

Clés API

Formulaire
{{ form_start(formstripe, {'attr': {'id': 'payment-form'}}) }}
	<div class="texte-alert"><span class='payment-errors'></span></div>

	{{ form_label(formstripe.firstname, 'Prénom') }}<br />
	{{ form_widget(formstripe.firstname) }}<br />

	{% if form_errors(formstripe.firstname) is not empty %}
		<div class="texte-alert">{{ form_errors(formstripe.firstname) }}</div>
	{% endif %}

	{{ form_label(formstripe.lastname, 'Nom') }}<br />
	{{ form_widget(formstripe.lastname) }}<br />

	{% if form_errors(formstripe.lastname) is not empty %}
		<div class="texte-alert">{{ form_errors(formstripe.lastname) }}</div>
	{% endif %}

	<label class="required" for="number">Numéro de carte</label><br />
	<input data-stripe="number" id="number" placeholder="Numéro de carte" value="4242 4242 4242 4242" type="text" required>

	<h4 class="titre-date-cb">Date d'expiration</h4>
	<div id="virement-expiration">
		<div>
			<label class="required" for="exp-month">Mois d'expiration</label><br />
			<input data-stripe="exp-month" id="exp-month" placeholder="Mois d'expiration" value="09" type="number" required>
		</div>
		<div>
			<label class="required" for="exp-year">Année d'expiration</label><br />
			<input data-stripe="exp-year" id="exp-year" placeholder="Année d'expiration" value="18" type="number" required>
		</div>
	</div>
	<div id="virement-crypto">
		<label class="required" for="cvc">Cryptogramme visuel</label><br />
		<input data-stripe="cvc" id="cvc" placeholder="Cryptogramme visuel" value="123" type="number" required>
	</div>
	
	<button type="submit" class="bouton action-principale">Finaliser ma commande</button>
{{ form_end(formstripe) }}

<script type="text/javascript" src="https://js.stripe.com/v2/"></script>
Javascript
// Fill in your publishable key
Stripe.setPublishableKey('{{ publishablekey }}');

var stripeResponseHandler = function(status, response) {
	//debugger

	var $form = $('#payment-form');

	if (response.error) {
		// Show the errors on the form
		$form.find('.payment-errors').text(response.error.message);
		$form.find('button').prop('disabled', false);
	} else {
		// token contains id, last4, and card type
		var token = response.id;
		// Insert the token into the form so it gets submitted to the server
		$form.append($('<input type="hidden" name="stripeToken" />').val(token));
		// and re-submit

		$form.get(0).submit();
	}
};

$(function($) {
	$('#payment-form').submit(function(e) {
		var $form = $(this);

		// Disable the submit button to prevent repeated clicks
		$form.find('button').prop('disabled', true);

		Stripe.card.createToken($form, stripeResponseHandler);

		// Prevent the form from submitting with the default action
		return false;
	});
});
Traitement

Class Stripe
class Stripe
{
	private $api_key;

	public function __construct(Application $app)
	{
		$this->api_key = $app['config']['stripe']['secretkey'];
	}

	public function api(string $endpoint, array $data): \stdClass
	{
		$ch = curl_init();

		curl_setopt_array($ch, [
			CURLOPT_URL            => "https://api.stripe.com/v1/$endpoint",
			CURLOPT_RETURNTRANSFER => true,
			CURLOPT_USERPWD        => $this->api_key,
			CURLOPT_HTTPAUTH       => CURLAUTH_BASIC,
			CURLOPT_POSTFIELDS     => http_build_query($data),
			CURLOPT_SSL_VERIFYPEER => false
		]);

		$response = json_decode(curl_exec($ch));
		curl_close($ch);

		if(property_exists($response, 'error')) {
			throw new \Exception($response->error->message);
		}

		return $response;
	}
}
Créer un customer
$stripe = $app['manager.stripe'];

/*
    curl https://api.stripe.com/v1/customers \
       -u sk_test_iOseHvdXsRnYspLWWCnJUUYk: \
       -d source=tok_19r5wZEXRwkA5xc2JBuTP4IR \
       -d description="Mason Martinez" \
       -d email="mason.martinez.09@example.com"
*/

$customer = $stripe->api("customers", [
    'source'      => $_POST["stripeToken"],
    'description' => $data["firstname"]." ".$data["lastname"],
    'email'       => $user->getUsername()
]);

$customer_id = $customer->id;

Effectuer un paiement
/*
    curl https://api.stripe.com/v1/charges \
       -u sk_test_iOseHvdXsRnYspLWWCnJUUYk: \
       -d amount=2000 \
       -d currency=eur \
       -d customer=cus_ABTSBGl6uCQaWr
*/

$charge = $stripe->api("charges", [
    'amount'   => $totalTTC*100, // Centimes €
    'currency' => 'eur',
    'customer' => $customer_id
]);

if ($charge->status == 'succeeded') {  }