Updating Credit Cards using Transparent Redirect
To update credit cards using Transparent Redirect, you’ll need to build an HTML form that submits directly to Braintree. You can:
- update a credit card
- update a credit card and billing address
- update a credit card and create a new billing address
Form Action URL
You should set the action attribute of your form to the url for TransparentRedirect.
braintree.TransparentRedirect.url()
TR Data
The form needs to include a hidden field named tr_data. It needs to include the URL that Braintree will redirect the user to after storing the form params. It also needs to include the token of the credit card to update.
tr_data = braintree.CreditCard.tr_data_for_update({
"payment_method_token": "token_of_payment_method_to_update"
}, "http://example.com/url_to_redirect_to")
Use a hidden field to add tr_data to your form.
<input type="hidden" name="tr_data" value="insert generated tr_data here" />
TR Form Fields
Create text fields for data parameters that you want to have your users enter.
<input type="text" name="credit_card[number]" />
<input type="text" name="credit_card[expiration_date]" />
You can also include other credit card and billing address fields. For example:
<input type="text" name="credit_card[cardholder_name]" />
<input type="text" name="credit_card[billing_address][street_address]" />
<input type="text" name="credit_card[billing_address][postal_code]" />
See the full list of TR html fields.
Create New or Update Existing
If you’re updating a billing address along with the credit card, you’ll need to set the update_existing option of the billing address in the TR data. If this is not set, a new address will be created instead of an existing one being updated.
tr_data = braintree.CreditCard.tr_data_for_update({
"payment_method_token": "token_of_payment_method_to_update",
"credit_card": {
"billing_address": {
"options": {
"update_existing": True
}
}
}
}, "http://example.com/url_to_redirect_to")
TR Confirmation
Before the credit card is actually created, you will need to confirm the TR request. For the confirmation, you will need to use the query string from the URL on the Redirect. Braintree will add parameters to the query string that identify the request, so the redirect URL will look something like:
http://example.com/path?http_status=200&id=vgqssrhqhxfhgrwz&hash=0c3c641f1de3ed1c732c54cab367355350603b28
In web.py, you can get the query string as follows:
# remove leading ? from query string
query_string = web.ctx.query[1:]
Use the query string to confirm. You’ll receive a result object just like if you updated a credit card using the server-to-server API.
result = braintree.TransparentRedirect.confirm(query_string)