Caused by NewConnectionError on API to fetch payment processors

Dear All,
I have enabled the ecommerce and discovery using the documentation here

I have also setup ecommerce using the steps prescribed at:

To be specific I have configured ecommerce using the below commands:

tutor config save --set ECOMMERCE_HOST=ecommerce.localhost
tutor config save --set 'ECOMMERCE_ENABLED_PAYMENT_PROCESSORS=["cybersource", "paypal"]'
tutor config save --set 'ECOMMERCE_ENABLED_CLIENT_SIDE_PAYMENT_PROCESSORS=["paypal"]'
tutor config save --set "ECOMMERCE_PAYMENT_PROCESSORS=$(cat ecommerce-config.yml)"

My paypal configuration is:

paypal:
  cancel_checkout_path: /checkout/cancel-checkout/
  client_id: CLIENTID
  client_secret: CLIENTSECRET
  error_url: /checkout/error/
  mode: sandbox
  receipt_url: /checkout/receipt/

Below is how my env file looks like:

ACTIVATE_HTTPS: false
ACTIVATE_SMTP: true
ANDROID_OAUTH2_SECRET: lKMMMN5g9sEYhlLa4kfZ39qj
CMS_HOST: studio.localhost
CONTACT_EMAIL: contact@myedx.com
DISCOVERY_MYSQL_PASSWORD: DoLt26E4
DISCOVERY_OAUTH2_SECRET: ik9f7eEM
DISCOVERY_SECRET_KEY: PpAN8mjj1V06JJtlcbfH
ECOMMERCE_API_KEY: YX5MPFvT9rzM9LOgu1Ae
ECOMMERCE_ENABLED_CLIENT_SIDE_PAYMENT_PROCESSORS:
- paypal
ECOMMERCE_ENABLED_PAYMENT_PROCESSORS:
- cybersource
- paypal
ECOMMERCE_EXTRA_PAYMENT_PROCESSOR_CLASSES: []
ECOMMERCE_HOST: ecommerce.localhost
ECOMMERCE_MYSQL_PASSWORD: U0LFSS8qOy
ECOMMERCE_OAUTH2_SECRET: W4CFYSS6Bi
ECOMMERCE_PAYMENT_PROCESSORS:
  paypal:
    cancel_checkout_path: /checkout/cancel-checkout/
    client_id: CLIENTID
    client_secret: CLIENTSECRET
    error_url: /checkout/error/
    mode: sandbox
    receipt_url: /checkout/receipt/
ECOMMERCE_SECRET_KEY: 53tNaapgzbqwwj6wpIqJU2
ID: xJlbTlvvzbaTiZss3bKLhhZNOY
LANGUAGE_CODE: en
LMS_HOST: localhost
MYSQL_ROOT_PASSWORD: NDDS2BpSBD
NOTIFICATION_EMAIL_EDX_LOGO: static/images/mail-header-logo.png
OPENEDX_MYSQL_PASSWORD: PkSSnTkIYs
OPENEDX_SECRET_KEY: rp3wSS4gO1DDarT4GvsOKr9JR4
PLATFORM_NAME: MyEdX
PLUGINS:
- discovery
- ecommerce
- figures

I am unable to go to the checkout page. I get a 500 Error. I did also go through a similar issue listed on this forum but that was a different error.

I am getting a NewConnectionError. It seems the API call to /api/v2/payment/processors/ is timing out even though the discovery service is up. Can someone let me know what I am missing. Thanks

Below is the error Log:

Attaching to tutor_local_ecommerce-worker_1, tutor_local_ecommerce_1, tutor_local_lms-worker_1, tutor_local_lms-worker-beat_1, tutor_local_discovery_1, tutor_local_nginx_1, tutor_local_lms_1, tutor_local_cms-worker_1, tutor_local_cms_1, tutor_local_forum_1, tutor_local_mysql_1, tutor_local_mongodb_1, tutor_local_openedx-assets_1, tutor_local_ecommerce-assets_1, tutor_local_discovery-assets_1, tutor_local_elasticsearch_1, tutor_local_smtp_1, tutor_local_memcached_1, tutor_local_rabbitmq_1
tutor_local_discovery-assets_1 exited with code 0
tutor_local_ecommerce-assets_1 exited with code 0
tutor_local_openedx-assets_1 exited with code 0
lms_1               | 2020-06-03 11:12:22,096 INFO 11 [tracking] logger.py:50 - {"username": "", "event_type": "/change_enrollment", "ip": "172.20.0.1", "agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36", "host": "localhost", "referer": "http://localhost/courses/course-v1:Raifox+CS1010112+2020_T2/about", "accept_language": "en-GB,en-US;q=0.9,en;q=0.8", "event": "{\"POST\": {\"course_id\": [\"course-v1:Raifox+CS1010112+2020_T2\"], \"enrollment_action\": [\"enroll\"]}, \"GET\": {}}", "event_source": "server", "context": {"user_id": null, "org_id": "", "course_id": "", "path": "/change_enrollment"}, "time": "2020-06-03T11:12:22.096594+00:00", "page": null}
nginx_1             | 172.20.0.1 - - [03/Jun/2020:11:12:22 +0000] http://localhost "POST /change_enrollment HTTP/1.1" 403 0 "http://localhost/courses/course-v1:Raifox+CS1010112+2020_T2/about" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36" "-"
lms_1               | 172.20.0.1 - - [03/Jun/2020:11:12:22 +0000] "POST /change_enrollment HTTP/1.0" 403 - "http://localhost/courses/course-v1:Raifox+CS1010112+2020_T2/about" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36"
lms_1               | 2020-06-03 11:12:22,126 INFO 10 [tracking] logger.py:50 - {"username": "", "event_type": "/register", "ip": "172.20.0.1", "agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36", "host": "localhost", "referer": "http://localhost/courses/course-v1:Raifox+CS1010112+2020_T2/about", "accept_language": "en-GB,en-US;q=0.9,en;q=0.8", "event": "{\"POST\": {}, \"GET\": {\"course_id\": [\"course-v1:Raifox CS1010112 2020_T2\"], \"enrollment_action\": [\"enroll\"]}}", "event_source": "server", "context": {"user_id": null, "org_id": "", "course_id": "", "path": "/register"}, "time": "2020-06-03T11:12:22.126610+00:00", "page": null}
lms_1               | 2020-06-03 11:12:22,141 ERROR 10 [openedx.core.djangoapps.user_authn.views.login_form] login_form.py:92 - Unknown tpa_hint provider: 'tpa_hint'
lms_1               | Traceback (most recent call last):
lms_1               |   File "/openedx/edx-platform/openedx/core/djangoapps/user_authn/views/login_form.py", line 76, in login_and_registration_form
lms_1               |     provider_id = next_args['tpa_hint'][0]
lms_1               | KeyError: 'tpa_hint'
nginx_1             | 172.20.0.1 - - [03/Jun/2020:11:12:22 +0000] http://localhost "GET /register?course_id=course-v1:Raifox+CS1010112+2020_T2&enrollment_action=enroll HTTP/1.1" 200 41071 "http://localhost/courses/course-v1:Raifox+CS1010112+2020_T2/about" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36" "-"
lms_1               | 172.20.0.1 - - [03/Jun/2020:11:12:22 +0000] "GET /register?course_id=course-v1:Raifox+CS1010112+2020_T2&enrollment_action=enroll HTTP/1.0" 200 41071 "http://localhost/courses/course-v1:Raifox+CS1010112+2020_T2/about" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36"
lms_1               | 2020-06-03 11:12:47,407 INFO 10 [tracking] logger.py:50 - {"username": "", "event_type": "/user_api/v1/account/login_session/", "ip": "172.20.0.1", "agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36", "host": "localhost", "referer": "http://localhost/login?course_id=course-v1:Raifox+CS1010112+2020_T2&enrollment_action=enroll", "accept_language": "en-GB,en-US;q=0.9,en;q=0.8", "event": "{\"POST\": {\"analytics\": [\"{\\\"enroll_course_id\\\":\\\"course-v1:Raifox+CS1010112+2020_T2\\\"}\"], \"password\": \"********\", \"email\": [\"shashi.kiran@raifox.com\"], \"remember\": [\"false\"]}, \"GET\": {}}", "event_source": "server", "context": {"user_id": null, "org_id": "", "course_id": "", "path": "/user_api/v1/account/login_session/"}, "time": "2020-06-03T11:12:47.407162+00:00", "page": null}
lms_1               | 2020-06-03 11:12:47,496 INFO 10 [audit] models.py:2245 - Login success - user.id: 5
nginx_1             | 172.20.0.1 - - [03/Jun/2020:11:12:47 +0000] http://localhost "POST /user_api/v1/account/login_session/ HTTP/1.1" 200 0 "http://localhost/login?course_id=course-v1:Raifox+CS1010112+2020_T2&enrollment_action=enroll" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36" "-"
lms_1               | 172.20.0.1 - - [03/Jun/2020:11:12:47 +0000] "POST /user_api/v1/account/login_session/ HTTP/1.0" 200 - "http://localhost/login?course_id=course-v1:Raifox+CS1010112+2020_T2&enrollment_action=enroll" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36"
lms_1               | 2020-06-03 11:12:47,849 INFO 10 [tracking] logger.py:50 - {"username": "shashi.kiran", "event_type": "/account/finish_auth", "ip": "172.20.0.1", "agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36", "host": "localhost", "referer": "http://localhost/login?course_id=course-v1:Raifox+CS1010112+2020_T2&enrollment_action=enroll", "accept_language": "en-GB,en-US;q=0.9,en;q=0.8", "event": "{\"POST\": {}, \"GET\": {\"course_id\": [\"course-v1:Raifox CS1010112 2020_T2\"], \"enrollment_action\": [\"enroll\"], \"next\": [\"/dashboard\"]}}", "event_source": "server", "context": {"user_id": 5, "org_id": "", "course_id": "", "path": "/account/finish_auth"}, "time": "2020-06-03T11:12:47.849150+00:00", "page": null}
lms_1               | 172.20.0.1 - - [03/Jun/2020:11:12:47 +0000] "GET /account/finish_auth?course_id=course-v1%3ARaifox+CS1010112+2020_T2&enrollment_action=enroll&next=%2Fdashboard HTTP/1.0" 200 8136 "http://localhost/login?course_id=course-v1:Raifox+CS1010112+2020_T2&enrollment_action=enroll" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36"
nginx_1             | 172.20.0.1 - - [03/Jun/2020:11:12:47 +0000] http://localhost "GET /account/finish_auth?course_id=course-v1%3ARaifox+CS1010112+2020_T2&enrollment_action=enroll&next=%2Fdashboard HTTP/1.1" 200 8136 "http://localhost/login?course_id=course-v1:Raifox+CS1010112+2020_T2&enrollment_action=enroll" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36" "-"
nginx_1             | 172.20.0.1 - - [03/Jun/2020:11:12:48 +0000] http://localhost "GET /static/js/student_account/views/finish_auth_factory.f7c5a7b3c8b5.js?raw HTTP/1.1" 200 4257 "http://localhost/account/finish_auth?course_id=course-v1%3ARaifox+CS1010112+2020_T2&enrollment_action=enroll&next=%2Fdashboard" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36" "-"
nginx_1             | 172.20.0.1 - - [03/Jun/2020:11:12:48 +0000] http://localhost "GET /static/js/vendor/jquery.cookie.js HTTP/1.1" 200 1941 "http://localhost/account/finish_auth?course_id=course-v1%3ARaifox+CS1010112+2020_T2&enrollment_action=enroll&next=%2Fdashboard" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36" "-"
lms_1               | 2020-06-03 11:12:48,409 INFO 10 [tracking] logger.py:50 - {"username": "shashi.kiran", "event_type": "/api/commerce/v0/baskets/", "ip": "172.20.0.1", "agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36", "host": "localhost", "referer": "http://localhost/account/finish_auth?course_id=course-v1%3ARaifox+CS1010112+2020_T2&enrollment_action=enroll&next=%2Fdashboard", "accept_language": "en-GB,en-US;q=0.9,en;q=0.8", "event": "{\"POST\": {}, \"GET\": {}}", "event_source": "server", "context": {"user_id": 5, "org_id": "", "course_id": "", "path": "/api/commerce/v0/baskets/"}, "time": "2020-06-03T11:12:48.408880+00:00", "page": null}
nginx_1             | 172.20.0.1 - - [03/Jun/2020:11:12:48 +0000] http://localhost "POST /api/commerce/v0/baskets/ HTTP/1.1" 406 97 "http://localhost/account/finish_auth?course_id=course-v1%3ARaifox+CS1010112+2020_T2&enrollment_action=enroll&next=%2Fdashboard" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36" "-"
lms_1               | 172.20.0.1 - - [03/Jun/2020:11:12:48 +0000] "POST /api/commerce/v0/baskets/ HTTP/1.0" 406 97 "http://localhost/account/finish_auth?course_id=course-v1%3ARaifox+CS1010112+2020_T2&enrollment_action=enroll&next=%2Fdashboard" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36"
lms_1               | 2020-06-03 11:12:48,629 INFO 10 [tracking] logger.py:50 - {"username": "shashi.kiran", "event_type": "/course_modes/choose/course-v1:Raifox+CS1010112+2020_T2/", "ip": "172.20.0.1", "agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36", "host": "localhost", "referer": "http://localhost/account/finish_auth?course_id=course-v1%3ARaifox+CS1010112+2020_T2&enrollment_action=enroll&next=%2Fdashboard", "accept_language": "en-GB,en-US;q=0.9,en;q=0.8", "event": "{\"POST\": {}, \"GET\": {}}", "event_source": "server", "context": {"user_id": 5, "org_id": "", "course_id": "", "path": "/course_modes/choose/course-v1:Raifox+CS1010112+2020_T2/"}, "time": "2020-06-03T11:12:48.629706+00:00", "page": null}
nginx_1             | 172.20.0.1 - - [03/Jun/2020:11:12:48 +0000] http://localhost "GET /course_modes/choose/course-v1:Raifox+CS1010112+2020_T2/ HTTP/1.1" 302 0 "http://localhost/account/finish_auth?course_id=course-v1%3ARaifox+CS1010112+2020_T2&enrollment_action=enroll&next=%2Fdashboard" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36" "-"
lms_1               | 172.20.0.1 - - [03/Jun/2020:11:12:48 +0000] "GET /course_modes/choose/course-v1:Raifox+CS1010112+2020_T2/ HTTP/1.0" 302 - "http://localhost/account/finish_auth?course_id=course-v1%3ARaifox+CS1010112+2020_T2&enrollment_action=enroll&next=%2Fdashboard" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36"
lms_1               | 2020-06-03 11:12:48,674 INFO 10 [tracking] logger.py:50 - {"username": "shashi.kiran", "event_type": "/verify_student/start-flow/course-v1:Raifox+CS1010112+2020_T2/", "ip": "172.20.0.1", "agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36", "host": "localhost", "referer": "http://localhost/account/finish_auth?course_id=course-v1%3ARaifox+CS1010112+2020_T2&enrollment_action=enroll&next=%2Fdashboard", "accept_language": "en-GB,en-US;q=0.9,en;q=0.8", "event": "{\"POST\": {}, \"GET\": {\"purchase_workflow\": [\"single\"]}}", "event_source": "server", "context": {"user_id": 5, "org_id": "", "course_id": "", "path": "/verify_student/start-flow/course-v1:Raifox+CS1010112+2020_T2/"}, "time": "2020-06-03T11:12:48.674457+00:00", "page": null}
lms_1               | 2020-06-03 11:12:48,712 INFO 10 [lms.djangoapps.verify_student.views] views.py:294 - Entering payment flow for user '5', course 'course-v1:Raifox+CS1010112+2020_T2', with current step 'None'
lms_1               | 2020-06-03 11:12:48,779 WARNING 10 [py.warnings] client.py:159 - /openedx/venv/local/lib/python2.7/site-packages/edx_rest_api_client/client.py:159: UserWarning: EdxRestApiClient is deprecated. Use OAuthAPIClient instead.
lms_1               |   warnings.warn('EdxRestApiClient is deprecated. Use OAuthAPIClient instead.')
lms_1               | 
lms_1               | 2020-06-03 11:12:49,860 ERROR 10 [root] signals.py:21 - Uncaught exception from None
lms_1               | Traceback (most recent call last):
lms_1               |   File "/openedx/venv/local/lib/python2.7/site-packages/django/core/handlers/exception.py", line 41, in inner
lms_1               |     response = get_response(request)
lms_1               |   File "/openedx/venv/local/lib/python2.7/site-packages/django/core/handlers/base.py", line 249, in _legacy_get_response
lms_1               |     response = self._get_response(request)
lms_1               |   File "/openedx/venv/local/lib/python2.7/site-packages/django/core/handlers/base.py", line 187, in _get_response
lms_1               |     response = self.process_exception_by_middleware(e, request)
lms_1               |   File "/openedx/venv/local/lib/python2.7/site-packages/django/core/handlers/base.py", line 185, in _get_response
lms_1               |     response = wrapped_callback(request, *callback_args, **callback_kwargs)
lms_1               |   File "/openedx/venv/local/lib/python2.7/site-packages/django/utils/decorators.py", line 185, in inner
lms_1               |     return func(*args, **kwargs)
lms_1               |   File "/openedx/venv/local/lib/python2.7/site-packages/django/views/generic/base.py", line 68, in view
lms_1               |     return self.dispatch(request, *args, **kwargs)
lms_1               |   File "/openedx/venv/local/lib/python2.7/site-packages/django/views/generic/base.py", line 88, in dispatch
lms_1               |     return handler(request, *args, **kwargs)
lms_1               |   File "/openedx/venv/local/lib/python2.7/site-packages/django/utils/decorators.py", line 67, in _wrapper
lms_1               |     return bound_func(*args, **kwargs)
lms_1               |   File "/openedx/venv/local/lib/python2.7/site-packages/django/contrib/auth/decorators.py", line 23, in _wrapped_view
lms_1               |     return view_func(request, *args, **kwargs)
lms_1               |   File "/openedx/venv/local/lib/python2.7/site-packages/django/utils/decorators.py", line 63, in bound_func
lms_1               |     return func.__get__(self, type(self))(*args2, **kwargs2)
lms_1               |   File "/openedx/edx-platform/lms/djangoapps/verify_student/views.py", line 407, in get
lms_1               |     processors = ecommerce_api_client(request.user).payment.processors.get()
lms_1               |   File "/openedx/venv/local/lib/python2.7/site-packages/slumber/__init__.py", line 155, in get
lms_1               |     resp = self._request("GET", params=kwargs)
lms_1               |   File "/openedx/venv/local/lib/python2.7/site-packages/slumber/__init__.py", line 97, in _request
lms_1               |     resp = self._store["session"].request(method, url, data=data, params=params, files=files, headers=headers)
lms_1               |   File "/openedx/venv/local/lib/python2.7/site-packages/requests/sessions.py", line 533, in request
lms_1               |     resp = self.send(prep, **send_kwargs)
lms_1               |   File "/openedx/venv/local/lib/python2.7/site-packages/requests/sessions.py", line 646, in send
lms_1               |     r = adapter.send(request, **kwargs)
lms_1               |   File "/openedx/venv/local/lib/python2.7/site-packages/requests/adapters.py", line 516, in send
lms_1               |     raise ConnectionError(e, request=request)
lms_1               | ConnectionError: HTTPConnectionPool(host='ecommerce.localhost', port=80): Max retries exceeded with url: /api/v2/payment/processors/ (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7fbe21bf9190>: Failed
1 Like

@shashi.kiran This is one of the many issues with DNS in the current Ironwood release of Tutor. Basically, it’s supposed to work in production because DNS addressing will work there, but it will not work when testing ecommerce locally. I’m pleased to say that I had a breakthrough just yesterday, and this kind of issue will be a thing of the past in Juniper.

@regis Much thanks for the update.

As you had suggested. The ecommerce plugin is working with Staging servers[not localhost]