[FIX] [IMP] payment_acquirer_paypal: fixed get_status (GET request -> give no data to urllib); cleaned a bit the code, extracted paypal contact to a dedicated method that tries 3 times if internal server error is given back by paypal + cleaned tests
bzr revid: tde@openerp.com-20131127152042-8va86q3zxsenjy6i
This commit is contained in:
parent
cea8f80476
commit
256269242a
|
@ -352,6 +352,7 @@ class PaymentTransaction(osv.Model):
|
|||
return True
|
||||
|
||||
def s2s_get_tx_status(self, cr, uid, tx_id, context=None):
|
||||
""" Get the tx status. """
|
||||
tx = self.browse(cr, uid, tx_id, context=context)
|
||||
|
||||
invalid_param_method_name = '_%s_s2s_get_tx_status' % tx.acquirer_id.name
|
||||
|
|
|
@ -97,8 +97,10 @@ class AcquirerPaypal(osv.Model):
|
|||
).replace('\n', '')
|
||||
request.add_header("Authorization", "Basic %s" % base64string)
|
||||
|
||||
result = urllib2.urlopen(request).read()
|
||||
request = urllib2.urlopen(request)
|
||||
result = request.read()
|
||||
res[acquirer.id] = json.loads(result).get('access_token')
|
||||
request.close()
|
||||
return res
|
||||
|
||||
|
||||
|
@ -226,6 +228,23 @@ class TxPaypal(osv.Model):
|
|||
# SERVER2SERVER RELATED METHODS
|
||||
# --------------------------------------------------
|
||||
|
||||
def _paypal_try_url(self, request, tries=3, context=None):
|
||||
try:
|
||||
res = urllib2.urlopen(request)
|
||||
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)
|
||||
return self._paypal_try_url(request, tries=tries - 1, context=context)
|
||||
raise
|
||||
except:
|
||||
raise
|
||||
|
||||
result = res.read()
|
||||
res.close()
|
||||
return result
|
||||
|
||||
def _paypal_s2s_send(self, cr, uid, values, cc_values, context=None):
|
||||
tx_id = self.create(cr, uid, values, context=context)
|
||||
tx = self.browse(cr, uid, tx_id, context=context)
|
||||
|
@ -276,13 +295,8 @@ class TxPaypal(osv.Model):
|
|||
data = json.dumps(data)
|
||||
|
||||
request = urllib2.Request('https://api.sandbox.paypal.com/v1/payments/payment', data, headers)
|
||||
|
||||
result = urllib2.urlopen(request)
|
||||
print 'result', result
|
||||
|
||||
res2 = result.read()
|
||||
print res2
|
||||
return (tx_id, res2)
|
||||
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):
|
||||
invalid_parameters = []
|
||||
|
@ -318,14 +332,12 @@ class TxPaypal(osv.Model):
|
|||
return False
|
||||
|
||||
def _paypal_s2s_get_tx_status(self, cr, uid, tx, context=None):
|
||||
# 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],
|
||||
}
|
||||
data = json.dumps({})
|
||||
url = 'https://api.sandbox.paypal.com/v1/payments/payment/%s' % (tx.paypal_txn_id)
|
||||
print url
|
||||
request = urllib2.Request(url, data, headers)
|
||||
result = urllib2.urlopen(request)
|
||||
print result
|
||||
return True
|
||||
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)
|
||||
|
|
|
@ -48,7 +48,7 @@ class PaypalCommon(PaymentAcquirerCommon):
|
|||
|
||||
class PaypalServer2Server(PaypalCommon):
|
||||
|
||||
def test_00(self):
|
||||
def test_00_tx_management(self):
|
||||
cr, uid, context = self.cr, self.uid, {}
|
||||
|
||||
res = self.payment_acquirer._paypal_s2s_get_access_token(cr, uid, [self.paypal_id], context=context)
|
||||
|
@ -71,75 +71,9 @@ class PaypalServer2Server(PaypalCommon):
|
|||
)
|
||||
|
||||
tx = self.payment_transaction.browse(cr, uid, tx_id, context=context)
|
||||
print tx.paypal_txn_id
|
||||
self.payment_transaction.s2s_get_tx_status(cr, uid, tx_id, context=context)
|
||||
# {
|
||||
# "id":"PAY-2LL14628DB722091TKKHXZHQ",
|
||||
# "create_time":"2013-11-22T15:47:42Z",
|
||||
# "update_time":"2013-11-22T15:48:05Z",
|
||||
# "state":"pending",
|
||||
# "intent":"sale",
|
||||
# "payer": {
|
||||
# "payment_method":"credit_card",
|
||||
# "funding_instruments": [{
|
||||
# "credit_card": {
|
||||
# "type":"visa",
|
||||
# "number":"xxxxxxxxxxxx1111",
|
||||
# "expire_month":"9",
|
||||
# "expire_year":"2015",
|
||||
# "first_name":"Norbert Buyer",
|
||||
# "last_name":"Norbert Buyer",
|
||||
# "billing_address": {
|
||||
# "line1":"Huge Street 2/543",
|
||||
# "city":"Sin City",
|
||||
# "postal_code":"1000",
|
||||
# "country_code":"BE"
|
||||
# }
|
||||
# }
|
||||
# }]
|
||||
# },
|
||||
# "transactions": [{
|
||||
# "amount": {
|
||||
# "total":"0.01",
|
||||
# "currency":"EUR",
|
||||
# "details": {
|
||||
# "subtotal":"0.01"
|
||||
# }
|
||||
# },
|
||||
# "related_resources": [{
|
||||
# "sale": {
|
||||
# "id":"4KU52719R3958614J",
|
||||
# "create_time":"2013-11-22T15:47:42Z",
|
||||
# "update_time":"2013-11-22T15:48:05Z",
|
||||
# "state":"pending",
|
||||
# "amount": {
|
||||
# "total":"0.01",
|
||||
# "currency":"EUR"
|
||||
# },
|
||||
# "pending_reason":"multicurrency",
|
||||
# "parent_payment":"PAY-2LL14628DB722091TKKHXZHQ",
|
||||
# "links": [{
|
||||
# "href":"https://api.sandbox.paypal.com/v1/payments/sale/4KU52719R3958614J",
|
||||
# "rel":"self",
|
||||
# "method":"GET"
|
||||
# },{
|
||||
# "href":"https://api.sandbox.paypal.com/v1/payments/sale/4KU52719R3958614J/refund",
|
||||
# "rel":"refund",
|
||||
# "method":"POST"
|
||||
# },{
|
||||
# "href":"https://api.sandbox.paypal.com/v1/payments/payment/PAY-2LL14628DB722091TKKHXZHQ",
|
||||
# "rel":"parent_payment",
|
||||
# "method":"GET"
|
||||
# }]
|
||||
# }
|
||||
# }]
|
||||
# }],
|
||||
# "links": [{
|
||||
# "href":"https://api.sandbox.paypal.com/v1/payments/payment/PAY-2LL14628DB722091TKKHXZHQ",
|
||||
# "rel":"self",
|
||||
# "method":"GET"
|
||||
# }]
|
||||
# }
|
||||
self.assertTrue(tx.paypal_txn_id is not False, 'paypal: txn_id should have been set after s2s request')
|
||||
|
||||
self.payment_transaction.write(cr, uid, tx_id, {'paypal_txn_id': False}, context=context)
|
||||
|
||||
|
||||
class PaypalForm(PaypalCommon):
|
||||
|
|
Loading…
Reference in New Issue