[CLN] payment_*: dead code removal
Old s2s prototype code has been removed. It is not used anywhere and not supported. Moreover ogone s2s implementation use its own set of methods. In a near future a neat implementation of s2s for paypal will be added.
This commit is contained in:
@@ -565,10 +565,6 @@ class PaymentTransaction(osv.Model):
|
||||
# --------------------------------------------------
|
||||
# SERVER2SERVER RELATED METHODS
|
||||
# --------------------------------------------------
|
||||
def s2s_create(self, cr, uid, values, cc_values, context=None):
|
||||
tx_id, tx_result = self.s2s_send(cr, uid, values, cc_values, context=context)
|
||||
self.s2s_feedback(cr, uid, tx_id, tx_result, context=context)
|
||||
return tx_id
|
||||
|
||||
def s2s_do_transaction(self, cr, uid, ids, context=None, **kwargs):
|
||||
tx = self.browse(cr, uid, ids, context=context)[0]
|
||||
|
||||
@@ -116,36 +116,6 @@ class AcquirerPaypal(osv.Model):
|
||||
acquirer = self.browse(cr, uid, ids, context=context)[0]
|
||||
return self._get_paypal_urls(cr, uid, acquirer.environment, context=context)['paypal_form_url']
|
||||
|
||||
def _paypal_s2s_get_access_token(self, cr, uid, ids, context=None):
|
||||
"""
|
||||
Note: see # see http://stackoverflow.com/questions/2407126/python-urllib2-basic-auth-problem
|
||||
for explanation why we use Authorization header instead of urllib2
|
||||
password manager
|
||||
"""
|
||||
res = dict.fromkeys(ids, False)
|
||||
parameters = werkzeug.url_encode({'grant_type': 'client_credentials'})
|
||||
|
||||
for acquirer in self.browse(cr, uid, ids, context=context):
|
||||
tx_url = self._get_paypal_urls(cr, uid, acquirer.environment)['paypal_rest_url']
|
||||
request = urllib2.Request(tx_url, parameters)
|
||||
|
||||
# add other headers (https://developer.paypal.com/webapps/developer/docs/integration/direct/make-your-first-call/)
|
||||
request.add_header('Accept', 'application/json')
|
||||
request.add_header('Accept-Language', 'en_US')
|
||||
|
||||
# add authorization header
|
||||
base64string = base64.encodestring('%s:%s' % (
|
||||
acquirer.paypal_api_username,
|
||||
acquirer.paypal_api_password)
|
||||
).replace('\n', '')
|
||||
request.add_header("Authorization", "Basic %s" % base64string)
|
||||
|
||||
request = urllib2.urlopen(request)
|
||||
result = request.read()
|
||||
res[acquirer.id] = json.loads(result).get('access_token')
|
||||
request.close()
|
||||
return res
|
||||
|
||||
|
||||
class TxPaypal(osv.Model):
|
||||
_inherit = 'payment.transaction'
|
||||
@@ -234,162 +204,3 @@ class TxPaypal(osv.Model):
|
||||
_logger.info(error)
|
||||
res.update(state='error', state_message=error)
|
||||
return tx.write(res)
|
||||
|
||||
# --------------------------------------------------
|
||||
# SERVER2SERVER RELATED METHODS
|
||||
# --------------------------------------------------
|
||||
|
||||
def _paypal_try_url(self, request, tries=3, context=None):
|
||||
""" Try to contact Paypal. Due to some issues, internal service errors
|
||||
seem to be quite frequent. Several tries are done before considering
|
||||
the communication as failed.
|
||||
|
||||
.. versionadded:: pre-v8 saas-3
|
||||
.. warning::
|
||||
|
||||
Experimental code. You should not use it before OpenERP v8 official
|
||||
release.
|
||||
"""
|
||||
done, res = False, None
|
||||
while (not done and tries):
|
||||
try:
|
||||
res = urllib2.urlopen(request)
|
||||
done = True
|
||||
except urllib2.HTTPError as e:
|
||||
res = e.read()
|
||||
e.close()
|
||||
if tries and res and json.loads(res)['name'] == 'INTERNAL_SERVICE_ERROR':
|
||||
_logger.warning('Failed contacting Paypal, retrying (%s remaining)' % tries)
|
||||
tries = tries - 1
|
||||
if not res:
|
||||
pass
|
||||
# raise openerp.exceptions.
|
||||
result = res.read()
|
||||
res.close()
|
||||
return result
|
||||
|
||||
def _paypal_s2s_send(self, cr, uid, values, cc_values, context=None):
|
||||
"""
|
||||
.. versionadded:: pre-v8 saas-3
|
||||
.. warning::
|
||||
|
||||
Experimental code. You should not use it before OpenERP v8 official
|
||||
release.
|
||||
"""
|
||||
tx_id = self.create(cr, uid, values, context=context)
|
||||
tx = self.browse(cr, uid, tx_id, context=context)
|
||||
|
||||
headers = {
|
||||
'Content-Type': 'application/json',
|
||||
'Authorization': 'Bearer %s' % tx.acquirer_id._paypal_s2s_get_access_token()[tx.acquirer_id.id],
|
||||
}
|
||||
data = {
|
||||
'intent': 'sale',
|
||||
'transactions': [{
|
||||
'amount': {
|
||||
'total': '%.2f' % tx.amount,
|
||||
'currency': tx.currency_id.name,
|
||||
},
|
||||
'description': tx.reference,
|
||||
}]
|
||||
}
|
||||
if cc_values:
|
||||
data['payer'] = {
|
||||
'payment_method': 'credit_card',
|
||||
'funding_instruments': [{
|
||||
'credit_card': {
|
||||
'number': cc_values['number'],
|
||||
'type': cc_values['brand'],
|
||||
'expire_month': cc_values['expiry_mm'],
|
||||
'expire_year': cc_values['expiry_yy'],
|
||||
'cvv2': cc_values['cvc'],
|
||||
'first_name': tx.partner_name,
|
||||
'last_name': tx.partner_name,
|
||||
'billing_address': {
|
||||
'line1': tx.partner_address,
|
||||
'city': tx.partner_city,
|
||||
'country_code': tx.partner_country_id.code,
|
||||
'postal_code': tx.partner_zip,
|
||||
}
|
||||
}
|
||||
}]
|
||||
}
|
||||
else:
|
||||
# TODO: complete redirect URLs
|
||||
data['redirect_urls'] = {
|
||||
# 'return_url': 'http://example.com/your_redirect_url/',
|
||||
# 'cancel_url': 'http://example.com/your_cancel_url/',
|
||||
},
|
||||
data['payer'] = {
|
||||
'payment_method': 'paypal',
|
||||
}
|
||||
data = json.dumps(data)
|
||||
|
||||
request = urllib2.Request('https://api.sandbox.paypal.com/v1/payments/payment', data, headers)
|
||||
result = self._paypal_try_url(request, tries=3, context=context)
|
||||
return (tx_id, result)
|
||||
|
||||
def _paypal_s2s_get_invalid_parameters(self, cr, uid, tx, data, context=None):
|
||||
"""
|
||||
.. versionadded:: pre-v8 saas-3
|
||||
.. warning::
|
||||
|
||||
Experimental code. You should not use it before OpenERP v8 official
|
||||
release.
|
||||
"""
|
||||
invalid_parameters = []
|
||||
return invalid_parameters
|
||||
|
||||
def _paypal_s2s_validate(self, cr, uid, tx, data, context=None):
|
||||
"""
|
||||
.. versionadded:: pre-v8 saas-3
|
||||
.. warning::
|
||||
|
||||
Experimental code. You should not use it before OpenERP v8 official
|
||||
release.
|
||||
"""
|
||||
values = json.loads(data)
|
||||
status = values.get('state')
|
||||
if status in ['approved']:
|
||||
_logger.info('Validated Paypal s2s payment for tx %s: set as done' % (tx.reference))
|
||||
tx.write({
|
||||
'state': 'done',
|
||||
'date_validate': values.get('udpate_time', fields.datetime.now()),
|
||||
'paypal_txn_id': values['id'],
|
||||
})
|
||||
return True
|
||||
elif status in ['pending', 'expired']:
|
||||
_logger.info('Received notification for Paypal s2s payment %s: set as pending' % (tx.reference))
|
||||
tx.write({
|
||||
'state': 'pending',
|
||||
# 'state_message': data.get('pending_reason', ''),
|
||||
'paypal_txn_id': values['id'],
|
||||
})
|
||||
return True
|
||||
else:
|
||||
error = 'Received unrecognized status for Paypal s2s payment %s: %s, set as error' % (tx.reference, status)
|
||||
_logger.info(error)
|
||||
tx.write({
|
||||
'state': 'error',
|
||||
# 'state_message': error,
|
||||
'paypal_txn_id': values['id'],
|
||||
})
|
||||
return False
|
||||
|
||||
def _paypal_s2s_get_tx_status(self, cr, uid, tx, context=None):
|
||||
"""
|
||||
.. versionadded:: pre-v8 saas-3
|
||||
.. warning::
|
||||
|
||||
Experimental code. You should not use it before OpenERP v8 official
|
||||
release.
|
||||
"""
|
||||
# TDETODO: check tx.paypal_txn_id is set
|
||||
headers = {
|
||||
'Content-Type': 'application/json',
|
||||
'Authorization': 'Bearer %s' % tx.acquirer_id._paypal_s2s_get_access_token()[tx.acquirer_id.id],
|
||||
}
|
||||
url = 'https://api.sandbox.paypal.com/v1/payments/payment/%s' % (tx.paypal_txn_id)
|
||||
request = urllib2.Request(url, headers=headers)
|
||||
data = self._paypal_try_url(request, tries=3, context=context)
|
||||
return self.s2s_feedback(cr, uid, tx.id, data, context=context)
|
||||
|
||||
Reference in New Issue
Block a user