ScottG
ScottG

Reputation: 93

Passing sever side zip/postcode to Stripe checkout

I am trying set up Stripe checkout so I can pass my server side customer zip/postcode to the Stripe checkout. It seems like it should be very simple but I cannot get it to work!

At it's simplest, the code I am using is:

<form action="charge.php" method="POST">
<script
  src="https://checkout.stripe.com/v2/checkout.js" class="stripe-button"
  data-key="pk_test_redacted"
  data-amount="2000"
  data-name="Demo Site"
  data-description="2 widgets (£20.00)"
  data-currency="gbp"
  data-address_zip="NG15 6UR">
</script>
</form> 

the transaction works fine but it does not pass the zip/postcode so that it can be AVS checked.

What am I doing wrong?

Edit:

So apparently you cannot pass address information using checkout.js - you can only get the form to require the address from the customer when they put their card details in using

data-address="true2"

As far as I can tell, this means I can either hassle the customer by getting them to add their address details when I already have them!

or I have to use stripe.js which means I have build my own form, make it look pretty, validate it etc. Not a massive thing but, when there is a form there that does everything I need but accept address form fields passed at form creation, it is a little annoying :-(

If anyone knows otherwise I would love to hear it but this info came from the #stripe irc channel so I think it is probably correct.

Upvotes: 4

Views: 3164

Answers (2)

Joel Davey
Joel Davey

Reputation: 2603

Untested but there may be a solution as you can update a card before the charge , you are able to update the customers card from the $token that you pass to your backend processor in php for example:

$cu = Stripe_Customer::retrieve($customer->id);
$card = $cu->cards->retrieve($token);
$card->address_city = $form['city'];
$card->address_line1 = $form['address_line_1'];
$card->address_line2 = $form['address_line_2'];
$card->address_state = $form['county'];
$card->address_country = "United Kingdom";
$card->address_zip = $form['postcode'];

Then take the charge

$charge = Stripe_Charge::create(array(
    'customer' => $customer->id, etc...

Upvotes: 1

ScottG
ScottG

Reputation: 93

As said in the Edit, I did have to use stripe.js and make my own form. Shame this small omission means quite a bit of extra work - but still much better than Paypal's mess of APIs and documentation! Cheaper too.

Upvotes: 3

Related Questions