diff options
| author | tbe-odoo <tbe@odoo.com> | 2017-12-01 11:03:47 +0100 |
|---|---|---|
| committer | tbe-odoo <tbe@odoo.com> | 2017-12-06 16:47:54 +0100 |
| commit | d45f79e58fea9abca167caf30abea79cb005fad6 (patch) | |
| tree | 0576ea3afd48a651d0d5d3afc61c84bd881a19af /addons/payment_stripe/controllers | |
| parent | b8540eefe3b82fc4a54c8a808ce3bfa0bea8a29a (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.py | 28 |
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') |
