summaryrefslogtreecommitdiff
path: root/addons/payment_stripe/controllers
diff options
context:
space:
mode:
authortbe-odoo <tbe@odoo.com>2017-12-01 11:03:47 +0100
committertbe-odoo <tbe@odoo.com>2017-12-06 16:47:54 +0100
commitd45f79e58fea9abca167caf30abea79cb005fad6 (patch)
tree0576ea3afd48a651d0d5d3afc61c84bd881a19af /addons/payment_stripe/controllers
parentb8540eefe3b82fc4a54c8a808ce3bfa0bea8a29a (diff)
[IMP] payment_stripe: Add support of form tokenization
- Added support of form based payment with tokenization to be able to pay Subscriptions and save a payment token for later payments
Diffstat (limited to 'addons/payment_stripe/controllers')
-rw-r--r--addons/payment_stripe/controllers/main.py28
1 files changed, 25 insertions, 3 deletions
diff --git a/addons/payment_stripe/controllers/main.py b/addons/payment_stripe/controllers/main.py
index edfb59dda9f..08ca184455d 100644
--- a/addons/payment_stripe/controllers/main.py
+++ b/addons/payment_stripe/controllers/main.py
@@ -21,8 +21,18 @@ class StripeController(http.Controller):
def stripe_s2s_create(self, **post):
acquirer_id = int(post.get('acquirer_id'))
acquirer = request.env['payment.acquirer'].browse(acquirer_id)
- acquirer.s2s_process(post)
- return werkzeug.utils.redirect(post.get('return_url', '/'))
+ error = None
+ try:
+ acquirer.s2s_process(post)
+ except Exception as e:
+ error = e.message
+
+ return_url = post.get('return_url', '/')
+ if error:
+ separator = '?' if werkzeug.urls.url_parse(return_url).query == '' else '&'
+ return_url += '{}{}'.format(separator, werkzeug.urls.url_encode({'error': error}))
+
+ return werkzeug.utils.redirect(return_url)
@http.route(['/payment/stripe/create_charge'], type='json', auth='public')
def stripe_create_charge(self, **post):
@@ -39,7 +49,19 @@ class StripeController(http.Controller):
tx = TX.sudo().browse(int(tx_id))
if not tx:
raise werkzeug.exceptions.NotFound()
- response = tx._create_stripe_charge(tokenid=post['tokenid'], email=post['email'])
+
+ stripe_token = post['token']
+ response = None
+ if tx.type == 'form_save' and tx.partner_id:
+ payment_token_id = request.env['payment.token'].sudo().create({
+ 'acquirer_id': tx.acquirer_id.id,
+ 'partner_id': tx.partner_id.id,
+ 'stripe_token': stripe_token
+ })
+ tx.payment_token_id = payment_token_id
+ response = tx._create_stripe_charge(acquirer_ref=payment_token_id.acquirer_ref, email=stripe_token['email'])
+ else:
+ response = tx._create_stripe_charge(tokenid=stripe_token['id'], email=stripe_token['email'])
_logger.info('Stripe: entering form_feedback with post data %s', pprint.pformat(response))
if response:
request.env['payment.transaction'].sudo().with_context(lang=None).form_feedback(response, 'stripe')