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') { }