diff --git a/addons/payment/models/payment_acquirer.py b/addons/payment/models/payment_acquirer.py index 678d3602773..44e340d7ce5 100644 --- a/addons/payment/models/payment_acquirer.py +++ b/addons/payment/models/payment_acquirer.py @@ -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] diff --git a/addons/payment_paypal/models/paypal.py b/addons/payment_paypal/models/paypal.py index 0876c93e88a..62e307a5ae9 100644 --- a/addons/payment_paypal/models/paypal.py +++ b/addons/payment_paypal/models/paypal.py @@ -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)