Hello-
I am trying to configure the Paypal ECommerce acquirer on my Odoo v11 CE instance. I have followed the instructions that are integrated right into the acquirer itself (https://www.odoo.com/documentation/user/online/ecommerce/shopper_experience/paypal.html) and have had no luck. I've also done countless google searching but can't seem to find anything that was documented or tried on v11.
The problem I'm currently having is that the Paypal acquirer is resulting in a 500 internal server error when the shopper has completed paying for the transaction and they're being redirected back to my site for the confirmation page. The transaction stays "pending" and eventually ends up as an "abandoned shopping cart." The crazy part is, that paypal has already acquired the funds, Odoo just hasn't been notified of this.
Details of my network/vm setup:
I am currently running Odoo 11 community edition - hosted on an Ubuntu instance.
All of the requests coming in to my network go to my web host vm, which then requests that are associated with my Odoo domain name are passed to my Odoo instance through proxy_pass
The Odoo instance also has apache installed on it so that it receives requests through port 80 and 443 versus 8069 with the upstream server being set to 127.0.0.1:8069.
Details on my paypal acquirer setup:
In the acquirer itself, I have:
my paypal e-mail address that is associated with my company
the paypal merchant ID taken from the business settings inside of my paypal account
the paypal pdt token that I received after turning IPN on
and I have the "use IPN" box checked.
Per the instructions, I have also created a system parameter containing my pdt token, labeled with payment_paypal.pdt_token
Even though I'm pretty sure these instructions were created before the paypal acquirer asked for your pdt token anyways?? not really sure because the screen shots of the acquirer setup don't include a blank for the pdt token but my odoo does have a blank for that...
My IPN is set to "https://MYDOMAIN.com/payment/paypal/ipn"
My return url is set to "https://mydomain.com/shop/confirmation"
I've changed the paypal button encoding to UTF-8
What am I missing?! When the 500 internal server error occurs, it appears that paypal was trying to redirect me to a link similar to this: MYDOMAIN.com/payment/paypal/dpn/?amt=9.24&cc=USD&cm={"return_url"%3A "%2Fshop%2Fpayment%2Fvalidate"}&item_name=the product name%3A SO011&item_number=SO011&st=Completed&tx=2VJ801667W5950531
One last thing worth noting is that I have been trying all of this in test mode, using all of my sandbox credentials, attained from the sandbox facilitator log-in.
Hello, can you provide more info on the traceback ?
You will find it in the log or addind ?debug=1 into the url
Thanks
Where would this particular log be located? Adding "?debug=1" to the end of the URL didn't work, and it appears like paypal sandbox is offline for the moment so I can't try it again.
I was actually able to find the log. Here is what I think you're looking for, otherwise let me know if you need more from the log:
2018-09-20 18:00:26,769 11380 INFO MYDOMAIN odoo.addons.payment_paypal.controllers.main: Paypal: validated data
2018-09-20 18:00:26,771 11380 INFO MYDOMAIN odoo.addons.payment_paypal.models.payment: Received a notification from Paypal with IPN version 3.9
2018-09-20 18:00:26,771 11380 WARNING MYDOMAIN odoo.addons.payment_paypal.models.payment: Received a notification from Paypal using sandbox
2018-09-20 18:00:26,782 11380 INFO MYDOMAIN odoo.addons.payment_paypal.models.payment: Validated Paypal payment for tx SO011: set as done
2018-09-20 18:00:26,792 11380 INFO MYDOMAIN odoo.addons.sale_payment.models.payment: <paypal> transaction processed: tx ref:SO011, tx amount: 8.99
2018-09-20 18:00:26,793 11380 INFO MYDOMAIN odoo.addons.sale_payment.models.payment: <paypal> transaction completed, auto-confirming order SO011 (ID 11)
2018-09-20 18:00:26,971 11380 INFO MYDOMAIN werkzeug: 127.0.0.1 - - [20/Sep/2018 18:00:26] "POST /payment/paypal/ipn/ HTTP/1.0" 500 -
2018-09-20 18:00:26,980 11380 ERROR MYDOMAIN werkzeug: Error on request:
Traceback (most recent call last):
File "/usr/local/lib/python3.6/dist-packages/werkzeug/serving.py", line 270, in run_wsgi
execute(self.server.app)
File "/usr/local/lib/python3.6/dist-packages/werkzeug/serving.py", line 258, in execute
application_iter = app(environ, start_response)
File "/odoo/odoo-server/odoo/service/server.py", line 250, in app
return self.app(e, s)
File "/odoo/odoo-server/odoo/service/wsgi_server.py", line 166, in application
return application_unproxied(environ, start_response)
File "/odoo/odoo-server/odoo/service/wsgi_server.py", line 154, in application_unproxied
result = handler(environ, start_response)
File "/odoo/odoo-server/odoo/http.py", line 1318, in __call__
return self.dispatch(environ, start_response)
File "/odoo/odoo-server/odoo/http.py", line 1292, in __call__
return self.app(environ, start_wrapped)
File "/usr/local/lib/python3.6/dist-packages/werkzeug/wsgi.py", line 766, in __call__
return self.app(environ, start_response)
File "/odoo/odoo-server/odoo/http.py", line 1490, in dispatch
result = ir_http._dispatch()
File "/odoo/odoo-server/addons/website_sale/models/ir_http.py", line 15, in _dispatch
return super(IrHttp, cls)._dispatch()
File "/odoo/odoo-server/addons/auth_signup/models/ir_http.py", line 19, in _dispatch
return super(Http, cls)._dispatch()
File "/odoo/odoo-server/addons/web_editor/models/ir_http.py", line 22, in _dispatch
return super(IrHttp, cls)._dispatch()
File "/odoo/odoo-server/addons/http_routing/models/ir_http.py", line 393, in _dispatch
result = super(IrHttp, cls)._dispatch()
File "/odoo/odoo-server/addons/utm/models/ir_http.py", line 26, in _dispatch
response = super(IrHttp, cls)._dispatch()
File "/odoo/odoo-server/odoo/addons/base/ir/ir_http.py", line 212, in _dispatch
return cls._handle_exception(e)
File "/odoo/odoo-server/addons/website/models/ir_http.py", line 169, in _handle_exception
return super(Http, cls)._handle_exception(exception)
File "/odoo/odoo-server/addons/utm/models/ir_http.py", line 31, in _handle_exception
response = super(IrHttp, cls)._handle_exception(exc)
File "/odoo/odoo-server/odoo/addons/base/ir/ir_http.py", line 182, in _handle_exception
return request._handle_exception(exception)
File "/odoo/odoo-server/odoo/http.py", line 770, in _handle_exception
return super(HttpRequest, self)._handle_exception(exception)
File "/odoo/odoo-server/odoo/http.py", line 310, in _handle_exception
raise pycompat.reraise(type(exception), exception, sys.exc_info()[2])
File "/odoo/odoo-server/odoo/tools/pycompat.py", line 87, in reraise
raise value
File "/odoo/odoo-server/odoo/addons/base/ir/ir_http.py", line 208, in _dispatch
result = request.dispatch()
File "/odoo/odoo-server/odoo/http.py", line 829, in dispatch
r = self._call_function(**self.params)
File "/odoo/odoo-server/odoo/http.py", line 342, in _call_function
return checked_call(self.db, *args, **kwargs)
File "/odoo/odoo-server/odoo/service/model.py", line 97, in wrapper
return f(dbname, *args, **kwargs)
File "/odoo/odoo-server/odoo/http.py", line 335, in checked_call
result = self.endpoint(*a, **kw)
File "/odoo/odoo-server/odoo/http.py", line 936, in __call__
return self.method(*args, **kw)
File "/odoo/odoo-server/odoo/http.py", line 515, in response_wrap
response = f(*args, **kw)
File "/odoo/odoo-server/addons/payment_paypal/controllers/main.py", line 98, in paypal_ipn
self.paypal_validate_data(**post)
File "/odoo/odoo-server/addons/payment_paypal/controllers/main.py", line 86, in paypal_validate_data
res = request.env['payment.transaction'].sudo().form_feedback(post, 'paypal')
File "/odoo/odoo-server/addons/account_payment/models/payment.py", line 20, in form_feedback
res = super(PaymentTransaction, self).form_feedback(data, acquirer_name)
File "/odoo/odoo-server/addons/sale_payment/models/payment.py", line 34, in form_feedback
tx._confirm_so()
File "/odoo/odoo-server/addons/website_sale/models/payment.py", line 20, in _confirm_so
result = super(PaymentTransaction, self)._confirm_so()
File "/odoo/odoo-server/addons/sale_payment/models/payment.py", line 71, in _confirm_so
self.sale_order_id.with_context(send_email=True).action_confirm()
File "/odoo/odoo-server/addons/sale/models/sale.py", line 554, in action_confirm
self._action_confirm()
File "/odoo/odoo-server/addons/sale_stock/models/sale_order.py", line 38, in _action_confirm
super(SaleOrder, self)._action_confirm()
File "/odoo/odoo-server/addons/sale/models/sale.py", line 539, in _action_confirm
self.force_quotation_send()
File "/odoo/odoo-server/addons/sale/models/sale.py", line 519, in force_quotation_send
order.with_context(email_ctx).message_post_with_template(email_ctx.get('default_template_id'))
File "/odoo/odoo-server/addons/mail/models/mail_thread.py", line 1985, in message_post_with_template
update_values = composer.onchange_template_id(template_id, kwargs['composition_mode'], self._name, res_id)['value']
File "/odoo/odoo-server/addons/mail/wizard/mail_compose_message.py", line 365, in onchange_template_id
values = self.generate_email_for_composer(template_id, [res_id])[res_id]
File "/odoo/odoo-server/addons/mail/wizard/mail_compose_message.py", line 500, in generate_email_for_composer
template_values = self.env['mail.template'].with_context(tpl_partners_only=True).browse(template_id).generate_email(res_ids, fields=fields)
File "/odoo/odoo-server/addons/mail/models/mail_template.py", line 511, in generate_email
result, format = report.render_qweb_pdf([res_id])
File "/odoo/odoo-server/odoo/addons/base/ir/ir_actions_report.py", line 626, in render_qweb_pdf
raise UserError(_("Unable to find Wkhtmltopdf on this system. The PDF can not be created."))
odoo.exceptions.UserError: ('Unable to find Wkhtmltopdf on this system. The PDF can not be created.', '')
I discovered the problem after looking at these logs (thank you, Jeremy!). I had installed Odoo v11CE on Ubuntu 18.04 which I thought had been compatible. Turns out, there wasn't a suitable Wkhtmltopfd installed. I re-installed Odoo on Ubuntu 16.04 and everything works as it should.