51 lines
2.0 KiB
Python
51 lines
2.0 KiB
Python
# -*- coding: utf-'8' "-*-"
|
|
|
|
import requests
|
|
|
|
from odoo import api, models
|
|
from odoo.exceptions import UserError
|
|
from . import payment_acquirer as pa
|
|
|
|
|
|
class PaymentMethodStripe(models.Model):
|
|
_inherit = 'payment.method'
|
|
|
|
@api.model
|
|
def stripe_create(self, values):
|
|
res = None
|
|
payment_acquirer = self.env['payment.acquirer'].browse(values.get('acquirer_id'))
|
|
url_token = 'https://%s/tokens' % payment_acquirer._get_stripe_api_url()
|
|
url_customer = 'https://%s/customers' % payment_acquirer._get_stripe_api_url()
|
|
if values['cc_number']:
|
|
payment_params = {
|
|
'card[number]': values['cc_number'].replace(' ', ''),
|
|
'card[exp_month]': str(values['cc_expiry'][:2]),
|
|
'card[exp_year]': str(values['cc_expiry'][-2:]),
|
|
'card[cvc]': values['cvc'],
|
|
}
|
|
r = requests.post(url_token,
|
|
auth=(payment_acquirer.stripe_secret_key, ''),
|
|
params=payment_params,
|
|
headers=pa.STRIPE_HEADERS)
|
|
token = r.json()
|
|
if token.get('id'):
|
|
customer_params = {
|
|
'source': token['id']
|
|
}
|
|
r = requests.post(url_customer,
|
|
auth=(payment_acquirer.stripe_secret_key, ''),
|
|
params=customer_params,
|
|
headers=pa.STRIPE_HEADERS)
|
|
customer = r.json()
|
|
res = {
|
|
'acquirer_ref': customer['id'],
|
|
'name': 'XXXXXXXXXXXX%s - %s' % (values['cc_number'][-4:], values['cc_holder_name'])
|
|
}
|
|
elif token.get('error'):
|
|
raise UserError(token['error']['message'])
|
|
|
|
# pop credit card info to info sent to create
|
|
for field_name in ["cc_number", "cvc", "cc_holder_name", "cc_expiry", "cc_brand"]:
|
|
values.pop(field_name)
|
|
return res
|