
Stripe payment gateway integration
Stripe payment gateway offers 2 ways of integration in PHP –
- Stripe checkout integration
- Stripe custom integration (Stripe.js)
Strip checkout integration:
The easiest way to integrate Stripe is via Checkout, an embedded tool that takes care of building an HTML form, validating user input, and securing your customers’ card data. Using Checkout, sensitive credit card information is sent directly to Stripe, and does not touch your server. Stripe returns to your site a token representation of the card, and this token can then be used in a charge request.
Embedding Checkout in your site
To get started, add the following code to your payment page:
1 2 3 4 5 6 7 8 9 10 11 12 |
<form action="/your-charge-code" method="POST"> <script src="https://checkout.stripe.com/checkout.js" class="stripe-button" data-key="pk_test_6pRNASCoBOKtIshFeQd4XMUh" data-amount="999" data-name="ILovePHP.net" data-description="Donation" data-image="http://www.ilovephp.net/wp-content/uploads/2016/03/small-3.jpg" data-locale="auto" data-zip-code="true"> </script> </form> |
Reference link : https://stripe.com/docs/checkout/tutorial
Stripe custom integration (Stripe.js):
For a more custom approach, you can instead use Stripe with your own payment form via Stripe.js.
Processing payments with Custom Stripe integration has two components:
- Securely collecting the payment details
- Using the collected payment method in a charge request
Below code example show you demonstrate you the custom stripe integration with stripe.js.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 |
<?php // Stripe library require 'stripe/Stripe.php'; $params = array( "testmode" => "on", "private_live_key" => "sk_live_xxxxxxxxxxxxxxxxxxxxx", "public_live_key" => "pk_live_xxxxxxxxxxxxxxxxxxxxx", "private_test_key" => "sk_test_xxxxxxxxxxxxxxxxxxxxx", "public_test_key" => "pk_test_xxxxxxxxxxxxxxxxxxxxx" ); if ($params['testmode'] == "on") { Stripe::setApiKey($params['private_test_key']); $pubkey = $params['public_test_key']; } else { Stripe::setApiKey($params['private_live_key']); $pubkey = $params['public_live_key']; } if(isset($_POST['stripeToken'])) { $amount_cents = str_replace(".","","10.52"); // Chargeble amount $invoiceid = "14526321"; // Invoice ID $description = "Invoice #" . $invoiceid . " - " . $invoiceid; try { $charge = Stripe_Charge::create(array( "amount" => $amount_cents, "currency" => "usd", "source" => $_POST['stripeToken'], "description" => $description) ); if ($charge->card->address_zip_check == "fail") { throw new Exception("zip_check_invalid"); } else if ($charge->card->address_line1_check == "fail") { throw new Exception("address_check_invalid"); } else if ($charge->card->cvc_check == "fail") { throw new Exception("cvc_check_invalid"); } // Payment has succeeded, no exceptions were thrown or otherwise caught $result = "success"; } catch(Stripe_CardError $e) { $error = $e->getMessage(); $result = "declined"; } catch (Stripe_InvalidRequestError $e) { $result = "declined"; } catch (Stripe_AuthenticationError $e) { $result = "declined"; } catch (Stripe_ApiConnectionError $e) { $result = "declined"; } catch (Stripe_Error $e) { $result = "declined"; } catch (Exception $e) { if ($e->getMessage() == "zip_check_invalid") { $result = "declined"; } else if ($e->getMessage() == "address_check_invalid") { $result = "declined"; } else if ($e->getMessage() == "cvc_check_invalid") { $result = "declined"; } else { $result = "declined"; } } echo "<BR>Stripe Payment Status : ".$result; echo "<BR>Stripe Response : "; print_r($charge); exit; } ?> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Stripe Pay Custom Integration Demo</title> </head> <body> <link href="style.css" type="text/css" rel="stylesheet" /> <h1 class="bt_title">Stripe Pay Demo</h1> <div class="dropin-page"> <form action="" method="POST" id="payment-form"> <span class="payment-errors"></span> <div class="form-row"> <label> <span>Card Number</span> <input type="text" size="20" data-stripe="number"> </label> </div> <div class="form-row"> <label> <span>Expiration (MM/YY)</span> <input type="text" size="2" data-stripe="exp_month"> </label> <span> / </span> <input type="text" size="2" data-stripe="exp_year"> </div> <div class="form-row"> <label> <span>CVC</span> <input type="text" size="4" data-stripe="cvc"> </label> </div> <input type="submit" class="submit" value="Submit Payment"> </form> </div> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script> <script type="text/javascript" src="https://js.stripe.com/v2/"></script> <!-- TO DO : Place below JS code in js file and include that JS file --> <script type="text/javascript"> Stripe.setPublishableKey('<?php echo $params['public_test_key']; ?>'); $(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'); 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; // 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(); } }; </script> </body> </html> |
You can download all above demos from below link :
Download Source Code
Or
Browse source code in github : https://github.com/sagarsdeshmukh/Stripe_gateway_integration_demo_with_PHP
If you have any additional questions Or queries, don’t hesitate to let me know!, Just put comment below or contact @ my mail id sagarsdeshmukh@gmail.com
Hope you enjoy my post 🙂