Problem occured during checkout.Please contact support

@regis,
when i try to open this link , i get this :


then when i try to log in with staff account,it returns this

500 is good! This is an error that we can debug. What are the logs from the discovery container right after triggering the 500 error?

Here is the discovery’logs after this:

docker-compose -f /home/tutor/.local/share/tutor/env/local/docker-compose.yml --project-name tutor_local logs --tail 200 discovery
Attaching to tutor_local_discovery_1
discovery_1         |   File "/openedx/venv/lib/python3.5/site-packages/django/core/handlers/exception.py", line 41, in inner
discovery_1         |     response = get_response(request)
discovery_1         |   File "/openedx/venv/lib/python3.5/site-packages/django/core/handlers/base.py", line 249, in _legacy_get_response
discovery_1         |     response = self._get_response(request)
discovery_1         |   File "/openedx/venv/lib/python3.5/site-packages/django/core/handlers/base.py", line 187, in _get_response
discovery_1         |     response = self.process_exception_by_middleware(e, request)
discovery_1         |   File "/openedx/venv/lib/python3.5/site-packages/django/core/handlers/base.py", line 185, in _get_response
discovery_1         |     response = wrapped_callback(request, *callback_args, **callback_kwargs)
discovery_1         |   File "/openedx/venv/lib/python3.5/site-packages/django/views/decorators/cache.py", line 57, in _wrapped_view_func
discovery_1         |     response = view_func(request, *args, **kwargs)
discovery_1         |   File "/openedx/venv/lib/python3.5/site-packages/django/views/decorators/csrf.py", line 58, in wrapped_view
discovery_1         |     return view_func(*args, **kwargs)
discovery_1         |   File "/openedx/venv/lib/python3.5/site-packages/social_django/utils.py", line 50, in wrapper
discovery_1         |     return func(request, backend, *args, **kwargs)
discovery_1         |   File "/openedx/venv/lib/python3.5/site-packages/social_django/views.py", line 32, in complete
discovery_1         |     redirect_name=REDIRECT_FIELD_NAME, *args, **kwargs)
discovery_1         |   File "/openedx/venv/lib/python3.5/site-packages/social_core/actions.py", line 41, in do_complete
discovery_1         |     user = backend.complete(user=user, *args, **kwargs)
discovery_1         |   File "/openedx/venv/lib/python3.5/site-packages/social_core/backends/base.py", line 40, in complete
discovery_1         |     return self.auth_complete(*args, **kwargs)
discovery_1         |   File "/openedx/venv/lib/python3.5/site-packages/auth_backends/backends.py", line 164, in auth_complete
discovery_1         |     user = super(EdXOpenIdConnect, self).auth_complete(*args, **kwargs)
discovery_1         |   File "/openedx/venv/lib/python3.5/site-packages/social_core/utils.py", line 252, in wrapper
discovery_1         |     return func(*args, **kwargs)
discovery_1         |   File "/openedx/venv/lib/python3.5/site-packages/social_core/backends/oauth.py", line 401, in auth_complete
discovery_1         |     method=self.ACCESS_TOKEN_METHOD
discovery_1         |   File "/openedx/venv/lib/python3.5/site-packages/social_core/backends/open_id_connect.py", line 181, in request_access_token
discovery_1         |     self.id_token = self.validate_and_return_id_token(response['id_token'])
discovery_1         |   File "/openedx/venv/lib/python3.5/site-packages/social_core/backends/open_id_connect.py", line 171, in validate_and_return_id_token
discovery_1         |     self.validate_claims(id_token)
discovery_1         |   File "/openedx/venv/lib/python3.5/site-packages/auth_backends/backends.py", line 189, in validate_claims
discovery_1         |     raise AuthTokenError(self, 'Invalid issuer')
discovery_1         | social_core.exceptions.AuthTokenError: Token error: Invalid issuer
discovery_1         | 2020-04-28 10:42:55,877 ERROR 10 [django.request] /openedx/venv/lib/python3.5/site-packages/django/core/handlers/exception.py:135 - Internal Server Error: /complete/edx-oidc/
discovery_1         | Traceback (most recent call last):
discovery_1         |   File "/openedx/venv/lib/python3.5/site-packages/django/core/handlers/exception.py", line 41, in inner
discovery_1         |     response = get_response(request)
discovery_1         |   File "/openedx/venv/lib/python3.5/site-packages/django/core/handlers/base.py", line 249, in _legacy_get_response
discovery_1         |     response = self._get_response(request)
discovery_1         |   File "/openedx/venv/lib/python3.5/site-packages/django/core/handlers/base.py", line 187, in _get_response
discovery_1         |     response = self.process_exception_by_middleware(e, request)
discovery_1         |   File "/openedx/venv/lib/python3.5/site-packages/django/core/handlers/base.py", line 185, in _get_response
discovery_1         |     response = wrapped_callback(request, *callback_args, **callback_kwargs)
discovery_1         |   File "/openedx/venv/lib/python3.5/site-packages/django/views/decorators/cache.py", line 57, in _wrapped_view_func
discovery_1         |     response = view_func(request, *args, **kwargs)
discovery_1         |   File "/openedx/venv/lib/python3.5/site-packages/django/views/decorators/csrf.py", line 58, in wrapped_view
discovery_1         |     return view_func(*args, **kwargs)
discovery_1         |   File "/openedx/venv/lib/python3.5/site-packages/social_django/utils.py", line 50, in wrapper
discovery_1         |     return func(request, backend, *args, **kwargs)
discovery_1         |   File "/openedx/venv/lib/python3.5/site-packages/social_django/views.py", line 32, in complete
discovery_1         |     redirect_name=REDIRECT_FIELD_NAME, *args, **kwargs)
discovery_1         |   File "/openedx/venv/lib/python3.5/site-packages/social_core/actions.py", line 41, in do_complete
discovery_1         |     user = backend.complete(user=user, *args, **kwargs)
discovery_1         |   File "/openedx/venv/lib/python3.5/site-packages/social_core/backends/base.py", line 40, in complete
discovery_1         |     return self.auth_complete(*args, **kwargs)
discovery_1         |   File "/openedx/venv/lib/python3.5/site-packages/auth_backends/backends.py", line 164, in auth_complete
discovery_1         |     user = super(EdXOpenIdConnect, self).auth_complete(*args, **kwargs)
discovery_1         |   File "/openedx/venv/lib/python3.5/site-packages/social_core/utils.py", line 252, in wrapper
discovery_1         |     return func(*args, **kwargs)
discovery_1         |   File "/openedx/venv/lib/python3.5/site-packages/social_core/backends/oauth.py", line 401, in auth_complete
discovery_1         |     method=self.ACCESS_TOKEN_METHOD
discovery_1         |   File "/openedx/venv/lib/python3.5/site-packages/social_core/backends/open_id_connect.py", line 181, in request_access_token
discovery_1         |     self.id_token = self.validate_and_return_id_token(response['id_token'])
discovery_1         |   File "/openedx/venv/lib/python3.5/site-packages/social_core/backends/open_id_connect.py", line 171, in validate_and_return_id_token
discovery_1         |     self.validate_claims(id_token)
discovery_1         |   File "/openedx/venv/lib/python3.5/site-packages/auth_backends/backends.py", line 189, in validate_claims
discovery_1         |     raise AuthTokenError(self, 'Invalid issuer')
discovery_1         | social_core.exceptions.AuthTokenError: Token error: Invalid issuer
discovery_1         | 2020-04-28 10:44:29,575 ERROR 9 [django.request] /openedx/venv/lib/python3.5/site-packages/django/core/handlers/exception.py:135 - Internal Server Error: /complete/edx-oidc/
discovery_1         | Traceback (most recent call last):
discovery_1         |   File "/openedx/venv/lib/python3.5/site-packages/social_core/utils.py", line 252, in wrapper
discovery_1         |     return func(*args, **kwargs)
discovery_1         |   File "/openedx/venv/lib/python3.5/site-packages/social_core/backends/oauth.py", line 401, in auth_complete
discovery_1         |     method=self.ACCESS_TOKEN_METHOD
discovery_1         |   File "/openedx/venv/lib/python3.5/site-packages/social_core/backends/open_id_connect.py", line 180, in request_access_token
discovery_1         |     response = self.get_json(*args, **kwargs)
discovery_1         |   File "/openedx/venv/lib/python3.5/site-packages/social_core/backends/base.py", line 238, in get_json
discovery_1         |     return self.request(url, *args, **kwargs).json()
discovery_1         |   File "/openedx/venv/lib/python3.5/site-packages/social_core/backends/base.py", line 234, in request
discovery_1         |     response.raise_for_status()
discovery_1         |   File "/openedx/venv/lib/python3.5/site-packages/requests/models.py", line 840, in raise_for_status
discovery_1         |     raise HTTPError(http_error_msg, response=self)
discovery_1         | requests.exceptions.HTTPError: 400 Client Error: Bad Request for url: http://lms:8000/oauth2/access_token/
discovery_1         | 
discovery_1         | During handling of the above exception, another exception occurred:
discovery_1         | 
discovery_1         | Traceback (most recent call last):
discovery_1         |   File "/openedx/venv/lib/python3.5/site-packages/django/core/handlers/exception.py", line 41, in inner
discovery_1         |     response = get_response(request)
discovery_1         |   File "/openedx/venv/lib/python3.5/site-packages/django/core/handlers/base.py", line 249, in _legacy_get_response
discovery_1         |     response = self._get_response(request)
discovery_1         |   File "/openedx/venv/lib/python3.5/site-packages/django/core/handlers/base.py", line 187, in _get_response
discovery_1         |     response = self.process_exception_by_middleware(e, request)
discovery_1         |   File "/openedx/venv/lib/python3.5/site-packages/django/core/handlers/base.py", line 185, in _get_response
discovery_1         |     response = wrapped_callback(request, *callback_args, **callback_kwargs)
discovery_1         |   File "/openedx/venv/lib/python3.5/site-packages/django/views/decorators/cache.py", line 57, in _wrapped_view_func
discovery_1         |     response = view_func(request, *args, **kwargs)
discovery_1         |   File "/openedx/venv/lib/python3.5/site-packages/django/views/decorators/csrf.py", line 58, in wrapped_view
discovery_1         |     return view_func(*args, **kwargs)
discovery_1         |   File "/openedx/venv/lib/python3.5/site-packages/social_django/utils.py", line 50, in wrapper
discovery_1         |     return func(request, backend, *args, **kwargs)
discovery_1         |   File "/openedx/venv/lib/python3.5/site-packages/social_django/views.py", line 32, in complete
discovery_1         |     redirect_name=REDIRECT_FIELD_NAME, *args, **kwargs)
discovery_1         |   File "/openedx/venv/lib/python3.5/site-packages/social_core/actions.py", line 41, in do_complete
discovery_1         |     user = backend.complete(user=user, *args, **kwargs)
discovery_1         |   File "/openedx/venv/lib/python3.5/site-packages/social_core/backends/base.py", line 40, in complete
discovery_1         |     return self.auth_complete(*args, **kwargs)
discovery_1         |   File "/openedx/venv/lib/python3.5/site-packages/auth_backends/backends.py", line 164, in auth_complete
discovery_1         |     user = super(EdXOpenIdConnect, self).auth_complete(*args, **kwargs)
discovery_1         |   File "/openedx/venv/lib/python3.5/site-packages/social_core/utils.py", line 255, in wrapper
discovery_1         |     raise AuthCanceled(args[0], response=err.response)
discovery_1         | social_core.exceptions.AuthCanceled: Authentication process canceled
discovery_1         | 2020-04-28 10:44:29,575 ERROR 9 [django.request] /openedx/venv/lib/python3.5/site-packages/django/core/handlers/exception.py:135 - Internal Server Error: /complete/edx-oidc/
discovery_1         | Traceback (most recent call last):
discovery_1         |   File "/openedx/venv/lib/python3.5/site-packages/social_core/utils.py", line 252, in wrapper
discovery_1         |     return func(*args, **kwargs)
discovery_1         |   File "/openedx/venv/lib/python3.5/site-packages/social_core/backends/oauth.py", line 401, in auth_complete
discovery_1         |     method=self.ACCESS_TOKEN_METHOD
discovery_1         |   File "/openedx/venv/lib/python3.5/site-packages/social_core/backends/open_id_connect.py", line 180, in request_access_token
discovery_1         |     response = self.get_json(*args, **kwargs)
discovery_1         |   File "/openedx/venv/lib/python3.5/site-packages/social_core/backends/base.py", line 238, in get_json
discovery_1         |     return self.request(url, *args, **kwargs).json()
discovery_1         |   File "/openedx/venv/lib/python3.5/site-packages/social_core/backends/base.py", line 234, in request
discovery_1         |     response.raise_for_status()
discovery_1         |   File "/openedx/venv/lib/python3.5/site-packages/requests/models.py", line 840, in raise_for_status
discovery_1         |     raise HTTPError(http_error_msg, response=self)
discovery_1         | requests.exceptions.HTTPError: 400 Client Error: Bad Request for url: http://lms:8000/oauth2/access_token/
discovery_1         | 
discovery_1         | During handling of the above exception, another exception occurred:
discovery_1         | 
discovery_1         | Traceback (most recent call last):
discovery_1         |   File "/openedx/venv/lib/python3.5/site-packages/django/core/handlers/exception.py", line 41, in inner
discovery_1         |     response = get_response(request)
discovery_1         |   File "/openedx/venv/lib/python3.5/site-packages/django/core/handlers/base.py", line 249, in _legacy_get_response
discovery_1         |     response = self._get_response(request)
discovery_1         |   File "/openedx/venv/lib/python3.5/site-packages/django/core/handlers/base.py", line 187, in _get_response
discovery_1         |     response = self.process_exception_by_middleware(e, request)
discovery_1         |   File "/openedx/venv/lib/python3.5/site-packages/django/core/handlers/base.py", line 185, in _get_response
discovery_1         |     response = wrapped_callback(request, *callback_args, **callback_kwargs)
discovery_1         |   File "/openedx/venv/lib/python3.5/site-packages/django/views/decorators/cache.py", line 57, in _wrapped_view_func
discovery_1         |     response = view_func(request, *args, **kwargs)
discovery_1         |   File "/openedx/venv/lib/python3.5/site-packages/django/views/decorators/csrf.py", line 58, in wrapped_view
discovery_1         |     return view_func(*args, **kwargs)
discovery_1         |   File "/openedx/venv/lib/python3.5/site-packages/social_django/utils.py", line 50, in wrapper
discovery_1         |     return func(request, backend, *args, **kwargs)
discovery_1         |   File "/openedx/venv/lib/python3.5/site-packages/social_django/views.py", line 32, in complete
discovery_1         |     redirect_name=REDIRECT_FIELD_NAME, *args, **kwargs)
discovery_1         |   File "/openedx/venv/lib/python3.5/site-packages/social_core/actions.py", line 41, in do_complete
discovery_1         |     user = backend.complete(user=user, *args, **kwargs)
discovery_1         |   File "/openedx/venv/lib/python3.5/site-packages/social_core/backends/base.py", line 40, in complete
discovery_1         |     return self.auth_complete(*args, **kwargs)
discovery_1         |   File "/openedx/venv/lib/python3.5/site-packages/auth_backends/backends.py", line 164, in auth_complete
discovery_1         |     user = super(EdXOpenIdConnect, self).auth_complete(*args, **kwargs)
discovery_1         |   File "/openedx/venv/lib/python3.5/site-packages/social_core/utils.py", line 255, in wrapper
discovery_1         |     raise AuthCanceled(args[0], response=err.response)
discovery_1         | social_core.exceptions.AuthCanceled: Authentication process canceled
discovery_1         | 2020-04-28 10:44:29,575 ERROR 9 [django.request] /openedx/venv/lib/python3.5/site-packages/django/core/handlers/exception.py:135 - Internal Server Error: /complete/edx-oidc/
discovery_1         | Traceback (most recent call last):
discovery_1         |   File "/openedx/venv/lib/python3.5/site-packages/social_core/utils.py", line 252, in wrapper
discovery_1         |     return func(*args, **kwargs)
discovery_1         |   File "/openedx/venv/lib/python3.5/site-packages/social_core/backends/oauth.py", line 401, in auth_complete
discovery_1         |     method=self.ACCESS_TOKEN_METHOD
discovery_1         |   File "/openedx/venv/lib/python3.5/site-packages/social_core/backends/open_id_connect.py", line 180, in request_access_token
discovery_1         |     response = self.get_json(*args, **kwargs)
discovery_1         |   File "/openedx/venv/lib/python3.5/site-packages/social_core/backends/base.py", line 238, in get_json
discovery_1         |     return self.request(url, *args, **kwargs).json()
discovery_1         |   File "/openedx/venv/lib/python3.5/site-packages/social_core/backends/base.py", line 234, in request
discovery_1         |     response.raise_for_status()
discovery_1         |   File "/openedx/venv/lib/python3.5/site-packages/requests/models.py", line 840, in raise_for_status
discovery_1         |     raise HTTPError(http_error_msg, response=self)
discovery_1         | requests.exceptions.HTTPError: 400 Client Error: Bad Request for url: http://lms:8000/oauth2/access_token/
discovery_1         | 
discovery_1         | During handling of the above exception, another exception occurred:
discovery_1         | 
discovery_1         | Traceback (most recent call last):
discovery_1         |   File "/openedx/venv/lib/python3.5/site-packages/django/core/handlers/exception.py", line 41, in inner
discovery_1         |     response = get_response(request)
discovery_1         |   File "/openedx/venv/lib/python3.5/site-packages/django/core/handlers/base.py", line 249, in _legacy_get_response
discovery_1         |     response = self._get_response(request)
discovery_1         |   File "/openedx/venv/lib/python3.5/site-packages/django/core/handlers/base.py", line 187, in _get_response
discovery_1         |     response = self.process_exception_by_middleware(e, request)
discovery_1         |   File "/openedx/venv/lib/python3.5/site-packages/django/core/handlers/base.py", line 185, in _get_response
discovery_1         |     response = wrapped_callback(request, *callback_args, **callback_kwargs)
discovery_1         |   File "/openedx/venv/lib/python3.5/site-packages/django/views/decorators/cache.py", line 57, in _wrapped_view_func
discovery_1         |     response = view_func(request, *args, **kwargs)
discovery_1         |   File "/openedx/venv/lib/python3.5/site-packages/django/views/decorators/csrf.py", line 58, in wrapped_view
discovery_1         |     return view_func(*args, **kwargs)
discovery_1         |   File "/openedx/venv/lib/python3.5/site-packages/social_django/utils.py", line 50, in wrapper
discovery_1         |     return func(request, backend, *args, **kwargs)
discovery_1         |   File "/openedx/venv/lib/python3.5/site-packages/social_django/views.py", line 32, in complete
discovery_1         |     redirect_name=REDIRECT_FIELD_NAME, *args, **kwargs)
discovery_1         |   File "/openedx/venv/lib/python3.5/site-packages/social_core/actions.py", line 41, in do_complete
discovery_1         |     user = backend.complete(user=user, *args, **kwargs)
discovery_1         |   File "/openedx/venv/lib/python3.5/site-packages/social_core/backends/base.py", line 40, in complete
discovery_1         |     return self.auth_complete(*args, **kwargs)
discovery_1         |   File "/openedx/venv/lib/python3.5/site-packages/auth_backends/backends.py", line 164, in auth_complete
discovery_1         |     user = super(EdXOpenIdConnect, self).auth_complete(*args, **kwargs)
discovery_1         |   File "/openedx/venv/lib/python3.5/site-packages/social_core/utils.py", line 255, in wrapper
discovery_1         |     raise AuthCanceled(args[0], response=err.response)
discovery_1         | social_core.exceptions.AuthCanceled: Authentication process canceled

It looks like discovery and the LMS are not using the same JWT issuer, which is strange. Are you quite sure that you did run quickstart in your installation?

Yes,i’m sure and i followed the installation’s guide from this link: https://docs.tutor.overhang.io/quickstart.html.But when i tried to enable the discovery and ecommerce plugins i got the manifest unknown error. So i followed the instructions from from this discussion(Course discovery on amazon image is not installing) by building the images of discovery and ecommerce manually.

Are you running the Tutor AMI?

Can you check that the JWT issuer is correct in discovery by running:

tutor local run discovery ./manage.py shell -c "from django.conf import settings; print(settings.JWT_AUTH['JWT_ISSUER'])"

This should print https://elearning.skiillz.com/oauth2

Yes,i’m running tutor on aws Ec2 instance.

And i get https://elearning.skiillz.com/oauth2 :

docker-compose -f /home/tutor/.local/share/tutor/env/local/docker-compose.yml --project-name tutor_local run --rm discovery ./manage.py shell -c from django.conf import settings; print(settings.JWT_AUTH['JWT_ISSUER'])
Starting tutor_local_mongodb_1  ... done
Starting tutor_local_rabbitmq_1 ... done
Starting tutor_local_mysql_1    ... done
Starting tutor_local_smtp_1     ... done
Starting tutor_local_elasticsearch_1 ... done
Starting tutor_local_memcached_1     ... done
Starting tutor_local_forum_1         ... done
Starting tutor_local_lms_1           ... done
https://elearning.skiillz.com/oauth2

I managed to reproduce the issue, but it does not occur in development mode, so fixing it is going to be a little tricky.

I think I found a fix. The problem is that the OAUTH_OIDC_ISSUER setting is incorrectly defined in the LMS and the CMS. Can you please attempt to install and enable the following plugin:

name: fixoauth
version: 0.1.0
patches:
  openedx-common-settings: |
    OAUTH_OIDC_ISSUER =  "{{ JWT_COMMON_ISSUER }}"

This plugin solved my issue. If it works for you then I’ll fix the tutor settings and make a new release.

Hello @regis ,
Can you tell me how to do it please,

tutor plugins install https://gist.githubusercontent.com/regisb/e33e867c8daea2467df8398b8b474e80/raw/8245915d0c2063713865646b1aceb948c5601260/fixdiscoveryoauth.yml
tutor plugins enable fixdiscoveryoauth
tutor config save
tutor local reboot

The OAUTH_OIDC_ISSUER is fine for now but the ecommerce still has some error,these is the ecommerce’s logs(tutor local logs --tail=100 ecommerce) after i push the checkout button:

docker-compose -f /home/tutor/.local/share/tutor/env/local/docker-compose.yml --project-name tutor_local logs --tail 200 ecommerce
Attaching to tutor_local_ecommerce_1
ecommerce_1         | 2020-04-29 08:20:11,270 INFO 11 [ecommerce.extensions.api.v2.views.baskets] /openedx/ecommerce/ecommerce/extensions/api/v2/views/baskets.py:192 - Added product with SKU [D091E4F] to basket [2]
ecommerce_1         | 2020-04-29 08:20:11,291 INFO 11 [ecommerce.extensions.analytics.utils] /openedx/ecommerce/ecommerce/extensions/analytics/utils.py:88 - basket_frozen: amount="10.00", basket_id="2", currency="USD", user_id="3"
ecommerce_1         | 2020-04-29 08:20:11,293 INFO 11 [paypalrestsdk.api] /openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/api.py:188 - Request[POST]: https://api.sandbox.paypal.com/v1/oauth2/token
ecommerce_1         | 2020-04-29 08:20:11,293 DEBUG 11 [paypalrestsdk.api] /openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/api.py:193 - Level: sandbox
ecommerce_1         | 2020-04-29 08:20:11,293 DEBUG 11 [paypalrestsdk.api] /openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/api.py:195 - Request: 
ecommerce_1         | Headers: {'PayPal-Request-Id': 'bcef7af1-ce6a-4db1-9ad5-ae524687f9a5', 'Content-Type': 'application/x-www-form-urlencoded', 'Authorization': u'Basic VE1ERFNZM01OUDVZVTphbmphcmFzb2ExOQ==', 'Accept': 'application/json', 'User-Agent': 'PayPalSDK/PayPal-Python-SDK 1.13.1 (requests 2.21.0; python 2.7.17; OpenSSL 1.1.1  11 Sep 2018)'}
ecommerce_1         | Body: grant_type=client_credentials
ecommerce_1         | 2020-04-29 08:20:12,155 INFO 11 [paypalrestsdk.api] /openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/api.py:205 - Response[401]: Unauthorized, Duration: 0.861348s.
ecommerce_1         | 2020-04-29 08:20:12,155 DEBUG 11 [paypalrestsdk.api] /openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/api.py:209 - debug_id: bf25601512b54
ecommerce_1         | 2020-04-29 08:20:12,155 DEBUG 11 [paypalrestsdk.api] /openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/api.py:212 - Headers: {'Content-Length': '77', 'X-Paypal-Token-Service': 'IAAS', 'Paypal-Debug-Id': 'bf25601512b54', 'Cache-Control': 'max-age=0, no-cache, no-store, must-revalidate', 'Date': 'Wed, 29 Apr 2020 08:20:11 GMT', 'Content-Type': 'application/json'}
ecommerce_1         | Body: {"error":"invalid_client","error_description":"Client Authentication failed"}
ecommerce_1         | 2020-04-29 08:20:12,155 ERROR 11 [ecommerce.extensions.payment.processors.paypal] /openedx/ecommerce/ecommerce/extensions/payment/processors/paypal.py:215 - After 1 retries, creating PayPal payment for basket [2] still experienced exception.
ecommerce_1         | Traceback (most recent call last):
ecommerce_1         |   File "/openedx/ecommerce/ecommerce/extensions/payment/processors/paypal.py", line 176, in get_transaction_parameters
ecommerce_1         |     payment.create()
ecommerce_1         |   File "/openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/resource.py", line 163, in create
ecommerce_1         |     new_attributes = self.api.post(self.path, self.to_dict(), headers, refresh_token)
ecommerce_1         |   File "/openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/api.py", line 279, in post
ecommerce_1         |     return self.request(util.join_url(self.endpoint, action), 'POST', body=params or {}, headers=headers or {}, refresh_token=refresh_token)
ecommerce_1         |   File "/openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/api.py", line 162, in request
ecommerce_1         |     self.headers(refresh_token=refresh_token, headers=headers or {}), headers or {})
ecommerce_1         |   File "/openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/api.py", line 251, in headers
ecommerce_1         |     token_hash = self.get_token_hash(refresh_token=refresh_token, headers=headers or {})
ecommerce_1         |   File "/openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/api.py", line 110, in get_token_hash
ecommerce_1         |     }, headers or {}))
ecommerce_1         |   File "/openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/api.py", line 214, in http_call
ecommerce_1         |     return self.handle_response(response, response.content.decode('utf-8'))
ecommerce_1         |   File "/openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/api.py", line 227, in handle_response
ecommerce_1         |     raise exceptions.UnauthorizedAccess(response, content)
ecommerce_1         | UnauthorizedAccess: Failed. Response status: 401. Response message: Unauthorized. Error message: {"error":"invalid_client","error_description":"Client Authentication failed"}
ecommerce_1         | 2020-04-29 08:20:12,187 ERROR 11 [ecommerce.extensions.api.v2.views.baskets] /openedx/ecommerce/ecommerce/extensions/api/v2/views/baskets.py:223 - Failed to initiate checkout for Basket [2]. The basket has been deleted.
ecommerce_1         | Traceback (most recent call last):
ecommerce_1         |   File "/openedx/ecommerce/ecommerce/extensions/api/v2/views/baskets.py", line 220, in create
ecommerce_1         |     response_data = self._checkout(basket, payment_processor(request.site), request)
ecommerce_1         |   File "/openedx/ecommerce/ecommerce/extensions/api/v2/views/baskets.py", line 268, in _checkout
ecommerce_1         |     parameters = payment_processor.get_transaction_parameters(basket, request=self.request)
ecommerce_1         |   File "/openedx/ecommerce/ecommerce/extensions/payment/processors/paypal.py", line 176, in get_transaction_parameters
ecommerce_1         |     payment.create()
ecommerce_1         |   File "/openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/resource.py", line 163, in create
ecommerce_1         |     new_attributes = self.api.post(self.path, self.to_dict(), headers, refresh_token)
ecommerce_1         |   File "/openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/api.py", line 279, in post
ecommerce_1         |     return self.request(util.join_url(self.endpoint, action), 'POST', body=params or {}, headers=headers or {}, refresh_token=refresh_token)
ecommerce_1         |   File "/openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/api.py", line 162, in request
ecommerce_1         |     self.headers(refresh_token=refresh_token, headers=headers or {}), headers or {})
ecommerce_1         |   File "/openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/api.py", line 251, in headers
ecommerce_1         |     token_hash = self.get_token_hash(refresh_token=refresh_token, headers=headers or {})
ecommerce_1         |   File "/openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/api.py", line 110, in get_token_hash
ecommerce_1         |     }, headers or {}))
ecommerce_1         |   File "/openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/api.py", line 214, in http_call
ecommerce_1         |     return self.handle_response(response, response.content.decode('utf-8'))
ecommerce_1         |   File "/openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/api.py", line 227, in handle_response
ecommerce_1         |     raise exceptions.UnauthorizedAccess(response, content)
ecommerce_1         | UnauthorizedAccess: Failed. Response status: 401. Response message: Unauthorized. Error message: {"error":"invalid_client","error_description":"Client Authentication failed"}
ecommerce_1         | 2020-04-29 08:25:37,307 DEBUG 11 [edx_rest_framework_extensions.permissions] /openedx/venv/local/lib/python2.7/site-packages/edx_rest_framework_extensions/permissions.py:57 - Permission JwtRestrictedApplication: returns False.
ecommerce_1         | 2020-04-29 08:25:39,507 WARNING 10 [edx_rest_framework_extensions.auth.jwt.middleware] /openedx/venv/local/lib/python2.7/site-packages/edx_rest_framework_extensions/auth/jwt/middleware.py:62 - The view BasketCreateView allows Jwt Authentication but needs to include the NotJwtRestrictedApplication permission class (adding it for you)
ecommerce_1         | 2020-04-29 08:25:39,510 DEBUG 10 [edx_rest_framework_extensions.permissions] /openedx/venv/local/lib/python2.7/site-packages/edx_rest_framework_extensions/permissions.py:57 - Permission JwtRestrictedApplication: returns False.
ecommerce_1         | 2020-04-29 08:25:39,534 DEBUG 10 [ecommerce.extensions.analytics.utils] /openedx/ecommerce/ecommerce/extensions/analytics/utils.py:144 - Event [Product Added] was NOT fired because no Segment key is set for site configuration [2]
ecommerce_1         | 2020-04-29 08:25:39,534 INFO 10 [ecommerce.extensions.api.v2.views.baskets] /openedx/ecommerce/ecommerce/extensions/api/v2/views/baskets.py:192 - Added product with SKU [D091E4F] to basket [3]
ecommerce_1         | 2020-04-29 08:25:39,556 INFO 10 [ecommerce.extensions.analytics.utils] /openedx/ecommerce/ecommerce/extensions/analytics/utils.py:88 - basket_frozen: amount="10.00", basket_id="3", currency="USD", user_id="3"
ecommerce_1         | 2020-04-29 08:25:39,747 ERROR 10 [ecommerce.extensions.api.v2.views.baskets] /openedx/ecommerce/ecommerce/extensions/api/v2/views/baskets.py:223 - Failed to initiate checkout for Basket [3]. The basket has been deleted.
ecommerce_1         | Traceback (most recent call last):
ecommerce_1         |   File "/openedx/ecommerce/ecommerce/extensions/api/v2/views/baskets.py", line 220, in create
ecommerce_1         |     response_data = self._checkout(basket, payment_processor(request.site), request)
ecommerce_1         |   File "/openedx/ecommerce/ecommerce/extensions/api/v2/views/baskets.py", line 268, in _checkout
ecommerce_1         |     parameters = payment_processor.get_transaction_parameters(basket, request=self.request)
ecommerce_1         |   File "/openedx/ecommerce/ecommerce/extensions/payment/processors/cybersource.py", line 134, in get_transaction_parameters
ecommerce_1         |     parameters = self._generate_parameters(basket, use_client_side_checkout, **kwargs)
ecommerce_1         |   File "/openedx/ecommerce/ecommerce/extensions/payment/processors/cybersource.py", line 186, in _generate_parameters
ecommerce_1         |     'override_custom_cancel_page': self.cancel_page_url,
ecommerce_1         |   File "/openedx/ecommerce/ecommerce/extensions/payment/processors/cybersource.py", line 102, in cancel_page_url
ecommerce_1         |     return get_ecommerce_url(self.configuration['cancel_checkout_path'])
ecommerce_1         | KeyError: u'cancel_checkout_path'
ecommerce_1         | 2020-04-29 08:28:06,092 DEBUG 10 [edx_rest_framework_extensions.permissions] /openedx/venv/local/lib/python2.7/site-packages/edx_rest_framework_extensions/permissions.py:57 - Permission JwtRestrictedApplication: returns False.
ecommerce_1         | 2020-04-29 08:28:06,108 DEBUG 10 [ecommerce.extensions.analytics.utils] /openedx/ecommerce/ecommerce/extensions/analytics/utils.py:144 - Event [Product Added] was NOT fired because no Segment key is set for site configuration [2]
ecommerce_1         | 2020-04-29 08:28:06,109 INFO 10 [ecommerce.extensions.api.v2.views.baskets] /openedx/ecommerce/ecommerce/extensions/api/v2/views/baskets.py:192 - Added product with SKU [D091E4F] to basket [4]
ecommerce_1         | 2020-04-29 08:28:06,130 INFO 10 [ecommerce.extensions.analytics.utils] /openedx/ecommerce/ecommerce/extensions/analytics/utils.py:88 - basket_frozen: amount="10.00", basket_id="4", currency="USD", user_id="3"
ecommerce_1         | 2020-04-29 08:28:06,135 INFO 10 [paypalrestsdk.api] /openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/api.py:188 - Request[POST]: https://api.sandbox.paypal.com/v1/oauth2/token
ecommerce_1         | 2020-04-29 08:28:06,135 DEBUG 10 [paypalrestsdk.api] /openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/api.py:193 - Level: sandbox
ecommerce_1         | 2020-04-29 08:28:06,135 DEBUG 10 [paypalrestsdk.api] /openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/api.py:195 - Request: 
ecommerce_1         | Headers: {'PayPal-Request-Id': '3663e5e9-d8be-488f-8d52-5b48ab0fcd56', 'Content-Type': 'application/x-www-form-urlencoded', 'Authorization': u'Basic VE1ERFNZM01OUDVZVTphbmphcmFzb2ExOQ==', 'Accept': 'application/json', 'User-Agent': 'PayPalSDK/PayPal-Python-SDK 1.13.1 (requests 2.21.0; python 2.7.17; OpenSSL 1.1.1  11 Sep 2018)'}
ecommerce_1         | Body: grant_type=client_credentials
ecommerce_1         | 2020-04-29 08:28:07,041 INFO 10 [paypalrestsdk.api] /openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/api.py:205 - Response[401]: Unauthorized, Duration: 0.906170s.
ecommerce_1         | 2020-04-29 08:28:07,041 DEBUG 10 [paypalrestsdk.api] /openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/api.py:209 - debug_id: b57b92777de28
ecommerce_1         | 2020-04-29 08:28:07,041 DEBUG 10 [paypalrestsdk.api] /openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/api.py:212 - Headers: {'Content-Length': '77', 'X-Paypal-Token-Service': 'IAAS', 'Paypal-Debug-Id': 'b57b92777de28', 'Cache-Control': 'max-age=0, no-cache, no-store, must-revalidate', 'Date': 'Wed, 29 Apr 2020 08:28:06 GMT', 'Content-Type': 'application/json'}
ecommerce_1         | Body: {"error":"invalid_client","error_description":"Client Authentication failed"}
ecommerce_1         | 2020-04-29 08:28:07,042 ERROR 10 [ecommerce.extensions.payment.processors.paypal] /openedx/ecommerce/ecommerce/extensions/payment/processors/paypal.py:215 - After 1 retries, creating PayPal payment for basket [4] still experienced exception.
ecommerce_1         | Traceback (most recent call last):
ecommerce_1         |   File "/openedx/ecommerce/ecommerce/extensions/payment/processors/paypal.py", line 176, in get_transaction_parameters
ecommerce_1         |     payment.create()
ecommerce_1         |   File "/openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/resource.py", line 163, in create
ecommerce_1         |     new_attributes = self.api.post(self.path, self.to_dict(), headers, refresh_token)
ecommerce_1         |   File "/openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/api.py", line 279, in post
ecommerce_1         |     return self.request(util.join_url(self.endpoint, action), 'POST', body=params or {}, headers=headers or {}, refresh_token=refresh_token)
ecommerce_1         |   File "/openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/api.py", line 162, in request
ecommerce_1         |     self.headers(refresh_token=refresh_token, headers=headers or {}), headers or {})
ecommerce_1         |   File "/openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/api.py", line 251, in headers
ecommerce_1         |     token_hash = self.get_token_hash(refresh_token=refresh_token, headers=headers or {})
ecommerce_1         |   File "/openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/api.py", line 110, in get_token_hash
ecommerce_1         |     }, headers or {}))
ecommerce_1         |   File "/openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/api.py", line 214, in http_call
ecommerce_1         |     return self.handle_response(response, response.content.decode('utf-8'))
ecommerce_1         |   File "/openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/api.py", line 227, in handle_response
ecommerce_1         |     raise exceptions.UnauthorizedAccess(response, content)
ecommerce_1         | UnauthorizedAccess: Failed. Response status: 401. Response message: Unauthorized. Error message: {"error":"invalid_client","error_description":"Client Authentication failed"}
ecommerce_1         | 2020-04-29 08:28:07,083 ERROR 10 [ecommerce.extensions.api.v2.views.baskets] /openedx/ecommerce/ecommerce/extensions/api/v2/views/baskets.py:223 - Failed to initiate checkout for Basket [4]. The basket has been deleted.
ecommerce_1         | Traceback (most recent call last):
ecommerce_1         |   File "/openedx/ecommerce/ecommerce/extensions/api/v2/views/baskets.py", line 220, in create
ecommerce_1         |     response_data = self._checkout(basket, payment_processor(request.site), request)
ecommerce_1         |   File "/openedx/ecommerce/ecommerce/extensions/api/v2/views/baskets.py", line 268, in _checkout
ecommerce_1         |     parameters = payment_processor.get_transaction_parameters(basket, request=self.request)
ecommerce_1         |   File "/openedx/ecommerce/ecommerce/extensions/payment/processors/paypal.py", line 176, in get_transaction_parameters
ecommerce_1         |     payment.create()
ecommerce_1         |   File "/openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/resource.py", line 163, in create
ecommerce_1         |     new_attributes = self.api.post(self.path, self.to_dict(), headers, refresh_token)
ecommerce_1         |   File "/openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/api.py", line 279, in post
ecommerce_1         |     return self.request(util.join_url(self.endpoint, action), 'POST', body=params or {}, headers=headers or {}, refresh_token=refresh_token)
ecommerce_1         |   File "/openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/api.py", line 162, in request
ecommerce_1         |     self.headers(refresh_token=refresh_token, headers=headers or {}), headers or {})
ecommerce_1         |   File "/openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/api.py", line 251, in headers
ecommerce_1         |     token_hash = self.get_token_hash(refresh_token=refresh_token, headers=headers or {})
ecommerce_1         |   File "/openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/api.py", line 110, in get_token_hash
ecommerce_1         |     }, headers or {}))
ecommerce_1         |   File "/openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/api.py", line 214, in http_call
ecommerce_1         |     return self.handle_response(response, response.content.decode('utf-8'))
ecommerce_1         |   File "/openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/api.py", line 227, in handle_response
ecommerce_1         |     raise exceptions.UnauthorizedAccess(response, content)
ecommerce_1         | UnauthorizedAccess: Failed. Response status: 401. Response message: Unauthorized. Error message: {"error":"invalid_client","error_description":"Client Authentication failed"}
ecommerce_1         | 2020-04-29 08:38:14,395 DEBUG 10 [edx_rest_framework_extensions.permissions] /openedx/venv/local/lib/python2.7/site-packages/edx_rest_framework_extensions/permissions.py:57 - Permission JwtRestrictedApplication: returns False.
ecommerce_1         | 2020-04-29 08:38:17,335 DEBUG 10 [edx_rest_framework_extensions.permissions] /openedx/venv/local/lib/python2.7/site-packages/edx_rest_framework_extensions/permissions.py:57 - Permission JwtRestrictedApplication: returns False.
ecommerce_1         | 2020-04-29 08:38:17,354 DEBUG 10 [ecommerce.extensions.analytics.utils] /openedx/ecommerce/ecommerce/extensions/analytics/utils.py:144 - Event [Product Added] was NOT fired because no Segment key is set for site configuration [2]
ecommerce_1         | 2020-04-29 08:38:17,355 INFO 10 [ecommerce.extensions.api.v2.views.baskets] /openedx/ecommerce/ecommerce/extensions/api/v2/views/baskets.py:192 - Added product with SKU [D091E4F] to basket [5]
ecommerce_1         | 2020-04-29 08:38:17,376 INFO 10 [ecommerce.extensions.analytics.utils] /openedx/ecommerce/ecommerce/extensions/analytics/utils.py:88 - basket_frozen: amount="10.00", basket_id="5", currency="USD", user_id="3"
ecommerce_1         | 2020-04-29 08:38:17,380 INFO 10 [paypalrestsdk.api] /openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/api.py:188 - Request[POST]: https://api.sandbox.paypal.com/v1/oauth2/token
ecommerce_1         | 2020-04-29 08:38:17,381 DEBUG 10 [paypalrestsdk.api] /openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/api.py:193 - Level: sandbox
ecommerce_1         | 2020-04-29 08:38:17,381 DEBUG 10 [paypalrestsdk.api] /openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/api.py:195 - Request: 
ecommerce_1         | Headers: {'PayPal-Request-Id': '317b3f9b-e015-4028-ae6a-7569247c37e2', 'Content-Type': 'application/x-www-form-urlencoded', 'Authorization': u'Basic VE1ERFNZM01OUDVZVTphbmphcmFzb2ExOQ==', 'Accept': 'application/json', 'User-Agent': 'PayPalSDK/PayPal-Python-SDK 1.13.1 (requests 2.21.0; python 2.7.17; OpenSSL 1.1.1  11 Sep 2018)'}
ecommerce_1         | Body: grant_type=client_credentials
ecommerce_1         | 2020-04-29 08:38:18,311 INFO 10 [paypalrestsdk.api] /openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/api.py:205 - Response[401]: Unauthorized, Duration: 0.930010s.
ecommerce_1         | 2020-04-29 08:38:18,311 DEBUG 10 [paypalrestsdk.api] /openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/api.py:209 - debug_id: 67d77441f9c9c
ecommerce_1         | 2020-04-29 08:38:18,311 DEBUG 10 [paypalrestsdk.api] /openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/api.py:212 - Headers: {'Content-Length': '77', 'X-Paypal-Token-Service': 'IAAS', 'Paypal-Debug-Id': '67d77441f9c9c', 'Cache-Control': 'max-age=0, no-cache, no-store, must-revalidate', 'Date': 'Wed, 29 Apr 2020 08:38:17 GMT', 'Content-Type': 'application/json'}
ecommerce_1         | Body: {"error":"invalid_client","error_description":"Client Authentication failed"}
ecommerce_1         | 2020-04-29 08:38:18,311 ERROR 10 [ecommerce.extensions.payment.processors.paypal] /openedx/ecommerce/ecommerce/extensions/payment/processors/paypal.py:215 - After 1 retries, creating PayPal payment for basket [5] still experienced exception.
ecommerce_1         | Traceback (most recent call last):
ecommerce_1         |   File "/openedx/ecommerce/ecommerce/extensions/payment/processors/paypal.py", line 176, in get_transaction_parameters
ecommerce_1         |     payment.create()
ecommerce_1         |   File "/openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/resource.py", line 163, in create
ecommerce_1         |     new_attributes = self.api.post(self.path, self.to_dict(), headers, refresh_token)
ecommerce_1         |   File "/openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/api.py", line 279, in post
ecommerce_1         |     return self.request(util.join_url(self.endpoint, action), 'POST', body=params or {}, headers=headers or {}, refresh_token=refresh_token)
ecommerce_1         |   File "/openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/api.py", line 162, in request
ecommerce_1         |     self.headers(refresh_token=refresh_token, headers=headers or {}), headers or {})
ecommerce_1         |   File "/openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/api.py", line 251, in headers
ecommerce_1         |     token_hash = self.get_token_hash(refresh_token=refresh_token, headers=headers or {})
ecommerce_1         |   File "/openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/api.py", line 110, in get_token_hash
ecommerce_1         |     }, headers or {}))
ecommerce_1         |   File "/openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/api.py", line 214, in http_call
ecommerce_1         |     return self.handle_response(response, response.content.decode('utf-8'))
ecommerce_1         |   File "/openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/api.py", line 227, in handle_response
ecommerce_1         |     raise exceptions.UnauthorizedAccess(response, content)
ecommerce_1         | UnauthorizedAccess: Failed. Response status: 401. Response message: Unauthorized. Error message: {"error":"invalid_client","error_description":"Client Authentication failed"}
ecommerce_1         | 2020-04-29 08:38:18,343 ERROR 10 [ecommerce.extensions.api.v2.views.baskets] /openedx/ecommerce/ecommerce/extensions/api/v2/views/baskets.py:223 - Failed to initiate checkout for Basket [5]. The basket has been deleted.
ecommerce_1         | Traceback (most recent call last):
ecommerce_1         |   File "/openedx/ecommerce/ecommerce/extensions/api/v2/views/baskets.py", line 220, in create
ecommerce_1         |     response_data = self._checkout(basket, payment_processor(request.site), request)
ecommerce_1         |   File "/openedx/ecommerce/ecommerce/extensions/api/v2/views/baskets.py", line 268, in _checkout
ecommerce_1         |     parameters = payment_processor.get_transaction_parameters(basket, request=self.request)
ecommerce_1         |   File "/openedx/ecommerce/ecommerce/extensions/payment/processors/paypal.py", line 176, in get_transaction_parameters
ecommerce_1         |     payment.create()
ecommerce_1         |   File "/openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/resource.py", line 163, in create
ecommerce_1         |     new_attributes = self.api.post(self.path, self.to_dict(), headers, refresh_token)
ecommerce_1         |   File "/openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/api.py", line 279, in post
ecommerce_1         |     return self.request(util.join_url(self.endpoint, action), 'POST', body=params or {}, headers=headers or {}, refresh_token=refresh_token)
ecommerce_1         |   File "/openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/api.py", line 162, in request
ecommerce_1         |     self.headers(refresh_token=refresh_token, headers=headers or {}), headers or {})
ecommerce_1         |   File "/openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/api.py", line 251, in headers
ecommerce_1         |     token_hash = self.get_token_hash(refresh_token=refresh_token, headers=headers or {})
ecommerce_1         |   File "/openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/api.py", line 110, in get_token_hash
ecommerce_1         |     }, headers or {}))
ecommerce_1         |   File "/openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/api.py", line 214, in http_call
ecommerce_1         |     return self.handle_response(response, response.content.decode('utf-8'))
ecommerce_1         |   File "/openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/api.py", line 227, in handle_response
ecommerce_1         |     raise exceptions.UnauthorizedAccess(response, content)
ecommerce_1         | UnauthorizedAccess: Failed. Response status: 401. Response message: Unauthorized. Error message: {"error":"invalid_client","error_description":"Client Authentication failed"}
ecommerce_1         | 2020-04-29 08:38:32,592 DEBUG 11 [edx_rest_framework_extensions.permissions] /openedx/venv/local/lib/python2.7/site-packages/edx_rest_framework_extensions/permissions.py:57 - Permission JwtRestrictedApplication: returns False.
ecommerce_1         | 2020-04-29 08:38:32,610 DEBUG 11 [ecommerce.extensions.analytics.utils] /openedx/ecommerce/ecommerce/extensions/analytics/utils.py:144 - Event [Product Added] was NOT fired because no Segment key is set for site configuration [2]
ecommerce_1         | 2020-04-29 08:38:32,610 INFO 11 [ecommerce.extensions.api.v2.views.baskets] /openedx/ecommerce/ecommerce/extensions/api/v2/views/baskets.py:192 - Added product with SKU [D091E4F] to basket [6]
ecommerce_1         | 2020-04-29 08:38:32,642 INFO 11 [ecommerce.extensions.analytics.utils] /openedx/ecommerce/ecommerce/extensions/analytics/utils.py:88 - basket_frozen: amount="10.00", basket_id="6", currency="USD", user_id="3"
ecommerce_1         | 2020-04-29 08:38:32,683 ERROR 11 [ecommerce.extensions.api.v2.views.baskets] /openedx/ecommerce/ecommerce/extensions/api/v2/views/baskets.py:223 - Failed to initiate checkout for Basket [6]. The basket has been deleted.
ecommerce_1         | Traceback (most recent call last):
ecommerce_1         |   File "/openedx/ecommerce/ecommerce/extensions/api/v2/views/baskets.py", line 220, in create
ecommerce_1         |     response_data = self._checkout(basket, payment_processor(request.site), request)
ecommerce_1         |   File "/openedx/ecommerce/ecommerce/extensions/api/v2/views/baskets.py", line 268, in _checkout
ecommerce_1         |     parameters = payment_processor.get_transaction_parameters(basket, request=self.request)
ecommerce_1         |   File "/openedx/ecommerce/ecommerce/extensions/payment/processors/cybersource.py", line 134, in get_transaction_parameters
ecommerce_1         |     parameters = self._generate_parameters(basket, use_client_side_checkout, **kwargs)
ecommerce_1         |   File "/openedx/ecommerce/ecommerce/extensions/payment/processors/cybersource.py", line 186, in _generate_parameters
ecommerce_1         |     'override_custom_cancel_page': self.cancel_page_url,
ecommerce_1         |   File "/openedx/ecommerce/ecommerce/extensions/payment/processors/cybersource.py", line 102, in cancel_page_url
ecommerce_1         |     return get_ecommerce_url(self.configuration['cancel_checkout_path'])
ecommerce_1         | KeyError: u'cancel_checkout_path'

and here is the logs of ecommerce after i push the checkout with paypal button:

docker-compose -f /home/tutor/.local/share/tutor/env/local/docker-compose.yml --project-name tutor_local logs --tail 200 ecommerce
Attaching to tutor_local_ecommerce_1
ecommerce_1         |   File "/openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/api.py", line 279, in post
ecommerce_1         |     return self.request(util.join_url(self.endpoint, action), 'POST', body=params or {}, headers=headers or {}, refresh_token=refresh_token)
ecommerce_1         |   File "/openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/api.py", line 162, in request
ecommerce_1         |     self.headers(refresh_token=refresh_token, headers=headers or {}), headers or {})
ecommerce_1         |   File "/openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/api.py", line 251, in headers
ecommerce_1         |     token_hash = self.get_token_hash(refresh_token=refresh_token, headers=headers or {})
ecommerce_1         |   File "/openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/api.py", line 110, in get_token_hash
ecommerce_1         |     }, headers or {}))
ecommerce_1         |   File "/openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/api.py", line 214, in http_call
ecommerce_1         |     return self.handle_response(response, response.content.decode('utf-8'))
ecommerce_1         |   File "/openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/api.py", line 227, in handle_response
ecommerce_1         |     raise exceptions.UnauthorizedAccess(response, content)
ecommerce_1         | UnauthorizedAccess: Failed. Response status: 401. Response message: Unauthorized. Error message: {"error":"invalid_client","error_description":"Client Authentication failed"}
ecommerce_1         | 2020-04-29 08:20:06,853 WARNING 11 [edx_rest_framework_extensions.auth.jwt.middleware] /openedx/venv/local/lib/python2.7/site-packages/edx_rest_framework_extensions/auth/jwt/middleware.py:62 - The view PaymentProcessorListView allows Jwt Authentication but needs to include the NotJwtRestrictedApplication permission class (adding it for you)
ecommerce_1         | 2020-04-29 08:20:06,854 DEBUG 11 [edx_rest_framework_extensions.permissions] /openedx/venv/local/lib/python2.7/site-packages/edx_rest_framework_extensions/permissions.py:57 - Permission JwtRestrictedApplication: returns False.
ecommerce_1         | 2020-04-29 08:20:11,253 DEBUG 11 [edx_rest_framework_extensions.permissions] /openedx/venv/local/lib/python2.7/site-packages/edx_rest_framework_extensions/permissions.py:57 - Permission JwtRestrictedApplication: returns False.
ecommerce_1         | 2020-04-29 08:20:11,269 DEBUG 11 [ecommerce.extensions.analytics.utils] /openedx/ecommerce/ecommerce/extensions/analytics/utils.py:144 - Event [Product Added] was NOT fired because no Segment key is set for site configuration [2]
ecommerce_1         | 2020-04-29 08:20:11,270 INFO 11 [ecommerce.extensions.api.v2.views.baskets] /openedx/ecommerce/ecommerce/extensions/api/v2/views/baskets.py:192 - Added product with SKU [D091E4F] to basket [2]
ecommerce_1         | 2020-04-29 08:20:11,291 INFO 11 [ecommerce.extensions.analytics.utils] /openedx/ecommerce/ecommerce/extensions/analytics/utils.py:88 - basket_frozen: amount="10.00", basket_id="2", currency="USD", user_id="3"
ecommerce_1         | 2020-04-29 08:20:11,293 INFO 11 [paypalrestsdk.api] /openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/api.py:188 - Request[POST]: https://api.sandbox.paypal.com/v1/oauth2/token
ecommerce_1         | 2020-04-29 08:20:11,293 DEBUG 11 [paypalrestsdk.api] /openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/api.py:193 - Level: sandbox
ecommerce_1         | 2020-04-29 08:20:11,293 DEBUG 11 [paypalrestsdk.api] /openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/api.py:195 - Request: 
ecommerce_1         | Headers: {'PayPal-Request-Id': 'bcef7af1-ce6a-4db1-9ad5-ae524687f9a5', 'Content-Type': 'application/x-www-form-urlencoded', 'Authorization': u'Basic VE1ERFNZM01OUDVZVTphbmphcmFzb2ExOQ==', 'Accept': 'application/json', 'User-Agent': 'PayPalSDK/PayPal-Python-SDK 1.13.1 (requests 2.21.0; python 2.7.17; OpenSSL 1.1.1  11 Sep 2018)'}
ecommerce_1         | Body: grant_type=client_credentials
ecommerce_1         | 2020-04-29 08:20:12,155 INFO 11 [paypalrestsdk.api] /openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/api.py:205 - Response[401]: Unauthorized, Duration: 0.861348s.
ecommerce_1         | 2020-04-29 08:20:12,155 DEBUG 11 [paypalrestsdk.api] /openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/api.py:209 - debug_id: bf25601512b54
ecommerce_1         | 2020-04-29 08:20:12,155 DEBUG 11 [paypalrestsdk.api] /openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/api.py:212 - Headers: {'Content-Length': '77', 'X-Paypal-Token-Service': 'IAAS', 'Paypal-Debug-Id': 'bf25601512b54', 'Cache-Control': 'max-age=0, no-cache, no-store, must-revalidate', 'Date': 'Wed, 29 Apr 2020 08:20:11 GMT', 'Content-Type': 'application/json'}
ecommerce_1         | Body: {"error":"invalid_client","error_description":"Client Authentication failed"}
ecommerce_1         | 2020-04-29 08:20:12,155 ERROR 11 [ecommerce.extensions.payment.processors.paypal] /openedx/ecommerce/ecommerce/extensions/payment/processors/paypal.py:215 - After 1 retries, creating PayPal payment for basket [2] still experienced exception.
ecommerce_1         | Traceback (most recent call last):
ecommerce_1         |   File "/openedx/ecommerce/ecommerce/extensions/payment/processors/paypal.py", line 176, in get_transaction_parameters
ecommerce_1         |     payment.create()
ecommerce_1         |   File "/openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/resource.py", line 163, in create
ecommerce_1         |     new_attributes = self.api.post(self.path, self.to_dict(), headers, refresh_token)
ecommerce_1         |   File "/openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/api.py", line 279, in post
ecommerce_1         |     return self.request(util.join_url(self.endpoint, action), 'POST', body=params or {}, headers=headers or {}, refresh_token=refresh_token)
ecommerce_1         |   File "/openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/api.py", line 162, in request
ecommerce_1         |     self.headers(refresh_token=refresh_token, headers=headers or {}), headers or {})
ecommerce_1         |   File "/openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/api.py", line 251, in headers
ecommerce_1         |     token_hash = self.get_token_hash(refresh_token=refresh_token, headers=headers or {})
ecommerce_1         |   File "/openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/api.py", line 110, in get_token_hash
ecommerce_1         |     }, headers or {}))
ecommerce_1         |   File "/openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/api.py", line 214, in http_call
ecommerce_1         |     return self.handle_response(response, response.content.decode('utf-8'))
ecommerce_1         |   File "/openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/api.py", line 227, in handle_response
ecommerce_1         |     raise exceptions.UnauthorizedAccess(response, content)
ecommerce_1         | UnauthorizedAccess: Failed. Response status: 401. Response message: Unauthorized. Error message: {"error":"invalid_client","error_description":"Client Authentication failed"}
ecommerce_1         | 2020-04-29 08:20:12,187 ERROR 11 [ecommerce.extensions.api.v2.views.baskets] /openedx/ecommerce/ecommerce/extensions/api/v2/views/baskets.py:223 - Failed to initiate checkout for Basket [2]. The basket has been deleted.
ecommerce_1         | Traceback (most recent call last):
ecommerce_1         |   File "/openedx/ecommerce/ecommerce/extensions/api/v2/views/baskets.py", line 220, in create
ecommerce_1         |     response_data = self._checkout(basket, payment_processor(request.site), request)
ecommerce_1         |   File "/openedx/ecommerce/ecommerce/extensions/api/v2/views/baskets.py", line 268, in _checkout
ecommerce_1         |     parameters = payment_processor.get_transaction_parameters(basket, request=self.request)
ecommerce_1         |   File "/openedx/ecommerce/ecommerce/extensions/payment/processors/paypal.py", line 176, in get_transaction_parameters
ecommerce_1         |     payment.create()
ecommerce_1         |   File "/openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/resource.py", line 163, in create
ecommerce_1         |     new_attributes = self.api.post(self.path, self.to_dict(), headers, refresh_token)
ecommerce_1         |   File "/openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/api.py", line 279, in post
ecommerce_1         |     return self.request(util.join_url(self.endpoint, action), 'POST', body=params or {}, headers=headers or {}, refresh_token=refresh_token)
ecommerce_1         |   File "/openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/api.py", line 162, in request
ecommerce_1         |     self.headers(refresh_token=refresh_token, headers=headers or {}), headers or {})
ecommerce_1         |   File "/openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/api.py", line 251, in headers
ecommerce_1         |     token_hash = self.get_token_hash(refresh_token=refresh_token, headers=headers or {})
ecommerce_1         |   File "/openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/api.py", line 110, in get_token_hash
ecommerce_1         |     }, headers or {}))
ecommerce_1         |   File "/openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/api.py", line 214, in http_call
ecommerce_1         |     return self.handle_response(response, response.content.decode('utf-8'))
ecommerce_1         |   File "/openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/api.py", line 227, in handle_response
ecommerce_1         |     raise exceptions.UnauthorizedAccess(response, content)
ecommerce_1         | UnauthorizedAccess: Failed. Response status: 401. Response message: Unauthorized. Error message: {"error":"invalid_client","error_description":"Client Authentication failed"}
ecommerce_1         | 2020-04-29 08:25:37,307 DEBUG 11 [edx_rest_framework_extensions.permissions] /openedx/venv/local/lib/python2.7/site-packages/edx_rest_framework_extensions/permissions.py:57 - Permission JwtRestrictedApplication: returns False.
ecommerce_1         | 2020-04-29 08:25:39,507 WARNING 10 [edx_rest_framework_extensions.auth.jwt.middleware] /openedx/venv/local/lib/python2.7/site-packages/edx_rest_framework_extensions/auth/jwt/middleware.py:62 - The view BasketCreateView allows Jwt Authentication but needs to include the NotJwtRestrictedApplication permission class (adding it for you)
ecommerce_1         | 2020-04-29 08:25:39,510 DEBUG 10 [edx_rest_framework_extensions.permissions] /openedx/venv/local/lib/python2.7/site-packages/edx_rest_framework_extensions/permissions.py:57 - Permission JwtRestrictedApplication: returns False.
ecommerce_1         | 2020-04-29 08:25:39,534 DEBUG 10 [ecommerce.extensions.analytics.utils] /openedx/ecommerce/ecommerce/extensions/analytics/utils.py:144 - Event [Product Added] was NOT fired because no Segment key is set for site configuration [2]
ecommerce_1         | 2020-04-29 08:25:39,534 INFO 10 [ecommerce.extensions.api.v2.views.baskets] /openedx/ecommerce/ecommerce/extensions/api/v2/views/baskets.py:192 - Added product with SKU [D091E4F] to basket [3]
ecommerce_1         | 2020-04-29 08:25:39,556 INFO 10 [ecommerce.extensions.analytics.utils] /openedx/ecommerce/ecommerce/extensions/analytics/utils.py:88 - basket_frozen: amount="10.00", basket_id="3", currency="USD", user_id="3"
ecommerce_1         | 2020-04-29 08:25:39,747 ERROR 10 [ecommerce.extensions.api.v2.views.baskets] /openedx/ecommerce/ecommerce/extensions/api/v2/views/baskets.py:223 - Failed to initiate checkout for Basket [3]. The basket has been deleted.
ecommerce_1         | Traceback (most recent call last):
ecommerce_1         |   File "/openedx/ecommerce/ecommerce/extensions/api/v2/views/baskets.py", line 220, in create
ecommerce_1         |     response_data = self._checkout(basket, payment_processor(request.site), request)
ecommerce_1         |   File "/openedx/ecommerce/ecommerce/extensions/api/v2/views/baskets.py", line 268, in _checkout
ecommerce_1         |     parameters = payment_processor.get_transaction_parameters(basket, request=self.request)
ecommerce_1         |   File "/openedx/ecommerce/ecommerce/extensions/payment/processors/cybersource.py", line 134, in get_transaction_parameters
ecommerce_1         |     parameters = self._generate_parameters(basket, use_client_side_checkout, **kwargs)
ecommerce_1         |   File "/openedx/ecommerce/ecommerce/extensions/payment/processors/cybersource.py", line 186, in _generate_parameters
ecommerce_1         |     'override_custom_cancel_page': self.cancel_page_url,
ecommerce_1         |   File "/openedx/ecommerce/ecommerce/extensions/payment/processors/cybersource.py", line 102, in cancel_page_url
ecommerce_1         |     return get_ecommerce_url(self.configuration['cancel_checkout_path'])
ecommerce_1         | KeyError: u'cancel_checkout_path'
ecommerce_1         | 2020-04-29 08:28:06,092 DEBUG 10 [edx_rest_framework_extensions.permissions] /openedx/venv/local/lib/python2.7/site-packages/edx_rest_framework_extensions/permissions.py:57 - Permission JwtRestrictedApplication: returns False.
ecommerce_1         | 2020-04-29 08:28:06,108 DEBUG 10 [ecommerce.extensions.analytics.utils] /openedx/ecommerce/ecommerce/extensions/analytics/utils.py:144 - Event [Product Added] was NOT fired because no Segment key is set for site configuration [2]
ecommerce_1         | 2020-04-29 08:28:06,109 INFO 10 [ecommerce.extensions.api.v2.views.baskets] /openedx/ecommerce/ecommerce/extensions/api/v2/views/baskets.py:192 - Added product with SKU [D091E4F] to basket [4]
ecommerce_1         | 2020-04-29 08:28:06,130 INFO 10 [ecommerce.extensions.analytics.utils] /openedx/ecommerce/ecommerce/extensions/analytics/utils.py:88 - basket_frozen: amount="10.00", basket_id="4", currency="USD", user_id="3"
ecommerce_1         | 2020-04-29 08:28:06,135 INFO 10 [paypalrestsdk.api] /openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/api.py:188 - Request[POST]: https://api.sandbox.paypal.com/v1/oauth2/token
ecommerce_1         | 2020-04-29 08:28:06,135 DEBUG 10 [paypalrestsdk.api] /openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/api.py:193 - Level: sandbox
ecommerce_1         | 2020-04-29 08:28:06,135 DEBUG 10 [paypalrestsdk.api] /openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/api.py:195 - Request: 
ecommerce_1         | Headers: {'PayPal-Request-Id': '3663e5e9-d8be-488f-8d52-5b48ab0fcd56', 'Content-Type': 'application/x-www-form-urlencoded', 'Authorization': u'Basic VE1ERFNZM01OUDVZVTphbmphcmFzb2ExOQ==', 'Accept': 'application/json', 'User-Agent': 'PayPalSDK/PayPal-Python-SDK 1.13.1 (requests 2.21.0; python 2.7.17; OpenSSL 1.1.1  11 Sep 2018)'}
ecommerce_1         | Body: grant_type=client_credentials
ecommerce_1         | 2020-04-29 08:28:07,041 INFO 10 [paypalrestsdk.api] /openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/api.py:205 - Response[401]: Unauthorized, Duration: 0.906170s.
ecommerce_1         | 2020-04-29 08:28:07,041 DEBUG 10 [paypalrestsdk.api] /openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/api.py:209 - debug_id: b57b92777de28
ecommerce_1         | 2020-04-29 08:28:07,041 DEBUG 10 [paypalrestsdk.api] /openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/api.py:212 - Headers: {'Content-Length': '77', 'X-Paypal-Token-Service': 'IAAS', 'Paypal-Debug-Id': 'b57b92777de28', 'Cache-Control': 'max-age=0, no-cache, no-store, must-revalidate', 'Date': 'Wed, 29 Apr 2020 08:28:06 GMT', 'Content-Type': 'application/json'}
ecommerce_1         | Body: {"error":"invalid_client","error_description":"Client Authentication failed"}
ecommerce_1         | 2020-04-29 08:28:07,042 ERROR 10 [ecommerce.extensions.payment.processors.paypal] /openedx/ecommerce/ecommerce/extensions/payment/processors/paypal.py:215 - After 1 retries, creating PayPal payment for basket [4] still experienced exception.
ecommerce_1         | Traceback (most recent call last):
ecommerce_1         |   File "/openedx/ecommerce/ecommerce/extensions/payment/processors/paypal.py", line 176, in get_transaction_parameters
ecommerce_1         |     payment.create()
ecommerce_1         |   File "/openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/resource.py", line 163, in create
ecommerce_1         |     new_attributes = self.api.post(self.path, self.to_dict(), headers, refresh_token)
ecommerce_1         |   File "/openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/api.py", line 279, in post
ecommerce_1         |     return self.request(util.join_url(self.endpoint, action), 'POST', body=params or {}, headers=headers or {}, refresh_token=refresh_token)
ecommerce_1         |   File "/openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/api.py", line 162, in request
ecommerce_1         |     self.headers(refresh_token=refresh_token, headers=headers or {}), headers or {})
ecommerce_1         |   File "/openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/api.py", line 251, in headers
ecommerce_1         |     token_hash = self.get_token_hash(refresh_token=refresh_token, headers=headers or {})
ecommerce_1         |   File "/openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/api.py", line 110, in get_token_hash
ecommerce_1         |     }, headers or {}))
ecommerce_1         |   File "/openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/api.py", line 214, in http_call
ecommerce_1         |     return self.handle_response(response, response.content.decode('utf-8'))
ecommerce_1         |   File "/openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/api.py", line 227, in handle_response
ecommerce_1         |     raise exceptions.UnauthorizedAccess(response, content)
ecommerce_1         | UnauthorizedAccess: Failed. Response status: 401. Response message: Unauthorized. Error message: {"error":"invalid_client","error_description":"Client Authentication failed"}
ecommerce_1         | 2020-04-29 08:28:07,083 ERROR 10 [ecommerce.extensions.api.v2.views.baskets] /openedx/ecommerce/ecommerce/extensions/api/v2/views/baskets.py:223 - Failed to initiate checkout for Basket [4]. The basket has been deleted.
ecommerce_1         | Traceback (most recent call last):
ecommerce_1         |   File "/openedx/ecommerce/ecommerce/extensions/api/v2/views/baskets.py", line 220, in create
ecommerce_1         |     response_data = self._checkout(basket, payment_processor(request.site), request)
ecommerce_1         |   File "/openedx/ecommerce/ecommerce/extensions/api/v2/views/baskets.py", line 268, in _checkout
ecommerce_1         |     parameters = payment_processor.get_transaction_parameters(basket, request=self.request)
ecommerce_1         |   File "/openedx/ecommerce/ecommerce/extensions/payment/processors/paypal.py", line 176, in get_transaction_parameters
ecommerce_1         |     payment.create()
ecommerce_1         |   File "/openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/resource.py", line 163, in create
ecommerce_1         |     new_attributes = self.api.post(self.path, self.to_dict(), headers, refresh_token)
ecommerce_1         |   File "/openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/api.py", line 279, in post
ecommerce_1         |     return self.request(util.join_url(self.endpoint, action), 'POST', body=params or {}, headers=headers or {}, refresh_token=refresh_token)
ecommerce_1         |   File "/openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/api.py", line 162, in request
ecommerce_1         |     self.headers(refresh_token=refresh_token, headers=headers or {}), headers or {})
ecommerce_1         |   File "/openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/api.py", line 251, in headers
ecommerce_1         |     token_hash = self.get_token_hash(refresh_token=refresh_token, headers=headers or {})
ecommerce_1         |   File "/openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/api.py", line 110, in get_token_hash
ecommerce_1         |     }, headers or {}))
ecommerce_1         |   File "/openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/api.py", line 214, in http_call
ecommerce_1         |     return self.handle_response(response, response.content.decode('utf-8'))
ecommerce_1         |   File "/openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/api.py", line 227, in handle_response
ecommerce_1         |     raise exceptions.UnauthorizedAccess(response, content)
ecommerce_1         | UnauthorizedAccess: Failed. Response status: 401. Response message: Unauthorized. Error message: {"error":"invalid_client","error_description":"Client Authentication failed"}
ecommerce_1         | 2020-04-29 08:38:14,395 DEBUG 10 [edx_rest_framework_extensions.permissions] /openedx/venv/local/lib/python2.7/site-packages/edx_rest_framework_extensions/permissions.py:57 - Permission JwtRestrictedApplication: returns False.
ecommerce_1         | 2020-04-29 08:38:17,335 DEBUG 10 [edx_rest_framework_extensions.permissions] /openedx/venv/local/lib/python2.7/site-packages/edx_rest_framework_extensions/permissions.py:57 - Permission JwtRestrictedApplication: returns False.
ecommerce_1         | 2020-04-29 08:38:17,354 DEBUG 10 [ecommerce.extensions.analytics.utils] /openedx/ecommerce/ecommerce/extensions/analytics/utils.py:144 - Event [Product Added] was NOT fired because no Segment key is set for site configuration [2]
ecommerce_1         | 2020-04-29 08:38:17,355 INFO 10 [ecommerce.extensions.api.v2.views.baskets] /openedx/ecommerce/ecommerce/extensions/api/v2/views/baskets.py:192 - Added product with SKU [D091E4F] to basket [5]
ecommerce_1         | 2020-04-29 08:38:17,376 INFO 10 [ecommerce.extensions.analytics.utils] /openedx/ecommerce/ecommerce/extensions/analytics/utils.py:88 - basket_frozen: amount="10.00", basket_id="5", currency="USD", user_id="3"
ecommerce_1         | 2020-04-29 08:38:17,380 INFO 10 [paypalrestsdk.api] /openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/api.py:188 - Request[POST]: https://api.sandbox.paypal.com/v1/oauth2/token
ecommerce_1         | 2020-04-29 08:38:17,381 DEBUG 10 [paypalrestsdk.api] /openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/api.py:193 - Level: sandbox
ecommerce_1         | 2020-04-29 08:38:17,381 DEBUG 10 [paypalrestsdk.api] /openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/api.py:195 - Request: 
ecommerce_1         | Headers: {'PayPal-Request-Id': '317b3f9b-e015-4028-ae6a-7569247c37e2', 'Content-Type': 'application/x-www-form-urlencoded', 'Authorization': u'Basic VE1ERFNZM01OUDVZVTphbmphcmFzb2ExOQ==', 'Accept': 'application/json', 'User-Agent': 'PayPalSDK/PayPal-Python-SDK 1.13.1 (requests 2.21.0; python 2.7.17; OpenSSL 1.1.1  11 Sep 2018)'}
ecommerce_1         | Body: grant_type=client_credentials
ecommerce_1         | 2020-04-29 08:38:18,311 INFO 10 [paypalrestsdk.api] /openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/api.py:205 - Response[401]: Unauthorized, Duration: 0.930010s.
ecommerce_1         | 2020-04-29 08:38:18,311 DEBUG 10 [paypalrestsdk.api] /openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/api.py:209 - debug_id: 67d77441f9c9c
ecommerce_1         | 2020-04-29 08:38:18,311 DEBUG 10 [paypalrestsdk.api] /openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/api.py:212 - Headers: {'Content-Length': '77', 'X-Paypal-Token-Service': 'IAAS', 'Paypal-Debug-Id': '67d77441f9c9c', 'Cache-Control': 'max-age=0, no-cache, no-store, must-revalidate', 'Date': 'Wed, 29 Apr 2020 08:38:17 GMT', 'Content-Type': 'application/json'}
ecommerce_1         | Body: {"error":"invalid_client","error_description":"Client Authentication failed"}
ecommerce_1         | 2020-04-29 08:38:18,311 ERROR 10 [ecommerce.extensions.payment.processors.paypal] /openedx/ecommerce/ecommerce/extensions/payment/processors/paypal.py:215 - After 1 retries, creating PayPal payment for basket [5] still experienced exception.
ecommerce_1         | Traceback (most recent call last):
ecommerce_1         |   File "/openedx/ecommerce/ecommerce/extensions/payment/processors/paypal.py", line 176, in get_transaction_parameters
ecommerce_1         |     payment.create()
ecommerce_1         |   File "/openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/resource.py", line 163, in create
ecommerce_1         |     new_attributes = self.api.post(self.path, self.to_dict(), headers, refresh_token)
ecommerce_1         |   File "/openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/api.py", line 279, in post
ecommerce_1         |     return self.request(util.join_url(self.endpoint, action), 'POST', body=params or {}, headers=headers or {}, refresh_token=refresh_token)
ecommerce_1         |   File "/openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/api.py", line 162, in request
ecommerce_1         |     self.headers(refresh_token=refresh_token, headers=headers or {}), headers or {})
ecommerce_1         |   File "/openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/api.py", line 251, in headers
ecommerce_1         |     token_hash = self.get_token_hash(refresh_token=refresh_token, headers=headers or {})
ecommerce_1         |   File "/openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/api.py", line 110, in get_token_hash
ecommerce_1         |     }, headers or {}))
ecommerce_1         |   File "/openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/api.py", line 214, in http_call
ecommerce_1         |     return self.handle_response(response, response.content.decode('utf-8'))
ecommerce_1         |   File "/openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/api.py", line 227, in handle_response
ecommerce_1         |     raise exceptions.UnauthorizedAccess(response, content)
ecommerce_1         | UnauthorizedAccess: Failed. Response status: 401. Response message: Unauthorized. Error message: {"error":"invalid_client","error_description":"Client Authentication failed"}
ecommerce_1         | 2020-04-29 08:38:18,343 ERROR 10 [ecommerce.extensions.api.v2.views.baskets] /openedx/ecommerce/ecommerce/extensions/api/v2/views/baskets.py:223 - Failed to initiate checkout for Basket [5]. The basket has been deleted.
ecommerce_1         | Traceback (most recent call last):
ecommerce_1         |   File "/openedx/ecommerce/ecommerce/extensions/api/v2/views/baskets.py", line 220, in create
ecommerce_1         |     response_data = self._checkout(basket, payment_processor(request.site), request)
ecommerce_1         |   File "/openedx/ecommerce/ecommerce/extensions/api/v2/views/baskets.py", line 268, in _checkout
ecommerce_1         |     parameters = payment_processor.get_transaction_parameters(basket, request=self.request)
ecommerce_1         |   File "/openedx/ecommerce/ecommerce/extensions/payment/processors/paypal.py", line 176, in get_transaction_parameters
ecommerce_1         |     payment.create()
ecommerce_1         |   File "/openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/resource.py", line 163, in create
ecommerce_1         |     new_attributes = self.api.post(self.path, self.to_dict(), headers, refresh_token)
ecommerce_1         |   File "/openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/api.py", line 279, in post
ecommerce_1         |     return self.request(util.join_url(self.endpoint, action), 'POST', body=params or {}, headers=headers or {}, refresh_token=refresh_token)
ecommerce_1         |   File "/openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/api.py", line 162, in request
ecommerce_1         |     self.headers(refresh_token=refresh_token, headers=headers or {}), headers or {})
ecommerce_1         |   File "/openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/api.py", line 251, in headers
ecommerce_1         |     token_hash = self.get_token_hash(refresh_token=refresh_token, headers=headers or {})
ecommerce_1         |   File "/openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/api.py", line 110, in get_token_hash
ecommerce_1         |     }, headers or {}))
ecommerce_1         |   File "/openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/api.py", line 214, in http_call
ecommerce_1         |     return self.handle_response(response, response.content.decode('utf-8'))
ecommerce_1         |   File "/openedx/venv/local/lib/python2.7/site-packages/paypalrestsdk/api.py", line 227, in handle_response
ecommerce_1         |     raise exceptions.UnauthorizedAccess(response, content)
ecommerce_1         | UnauthorizedAccess: Failed. Response status: 401. Response message: Unauthorized. Error message: {"error":"invalid_client","error_description":"Client Authentication failed"}

There are two different errors happening here. The last one is due to the fact that you did not add the “cancel_checkout_path” entry to your payment configuration. Can you please try to address this first? I believe the first one is due to incorrect paypal credentials.

Well,can you show me how to add the cance_checkout_path please?

It’s difficult for me to recommend a precise solution: I don’t know your platform and I have never integrated the Paypal backend in ecommerce. Here are the docs: https://edx-ecommerce.readthedocs.io/en/latest/additional_features/payment_processors.html?highlight=cancel_checkout_path#paypal

According to these docs, you should set cancel_checkout_path to the same value as PAYMENT_PROCESSOR_CANCEL_PATH, which itself is equal to '/checkout/cancel-checkout/' (haaaa the joys of open edx settings…). So using this value should work.

1 Like

Hi @regis,
My platform works well, thanks for your precious help :blush:

1 Like

Maybe you can post your solution here for other users facing the same issue? Thanks!

Hi @regis,
So, my solution for the cancel_checkout_path is that i changed the cancel_page_url in the config.yml at the ECOMMERCE_PAYMENT_PROCESSORS section into cancel_checkout_path.

—Here is my prior ECOMMERCE_PAYMENT_PROCESSORS :

cybersource:
  access_key: SET-ME-PLEASE
  **cancel_page_url**: /checkout/cancel-checkout/
  merchant_id: SET-ME-PLEASE
  payment_page_url: https://testsecureacceptance.cybersource.com/pay
  profile_id: SET-ME-PLEASE
  receipt_page_url: /checkout/receipt/
  secret_key: SET-ME-PLEASE
  send_level_2_3_details: true
  soap_api_url: https://ics2wstest.ic3.com/commerce/1.x/transactionProcessor/CyberSourceTransaction_1.140.wsdl
  sop_access_key: SET-ME-PLEASE
  sop_payment_page_url: https://testsecureacceptance.cybersource.com/silent/pay
  sop_profile_id: SET-ME-PLEASE
  sop_secret_key: SET-ME-PLEASE
  transaction_key: SET-ME-PLEASE
paypal:
  cancel_checkout_path: /checkout/cancel-checkout/
  client_id: SET-ME-PLEASE
  client_secret: SET-ME-PLEASE
  error_url: /checkout/error/
  mode: sandbox
  receipt_url: /checkout/receipt/

—And here it is after changement (in bold):

cybersource:
  access_key: SET-ME-PLEASE
  **cancel_checkout_path**: /checkout/cancel-checkout/
  merchant_id: SET-ME-PLEASE
  payment_page_url: https://testsecureacceptance.cybersource.com/pay
  profile_id: SET-ME-PLEASE
  receipt_page_url: /checkout/receipt/
  secret_key: SET-ME-PLEASE
  send_level_2_3_details: true
  soap_api_url: https://ics2wstest.ic3.com/commerce/1.x/transactionProcessor/CyberSourceTransaction_1.140.wsdl
  sop_access_key: SET-ME-PLEASE
  sop_payment_page_url: https://testsecureacceptance.cybersource.com/silent/pay
  sop_profile_id: SET-ME-PLEASE
  sop_secret_key: SET-ME-PLEASE
  transaction_key: SET-ME-PLEASE
paypal:
  cancel_checkout_path: /checkout/cancel-checkout/
  client_id: SET-ME-PLEASE
  client_secret: SET-ME-PLEASE
  error_url: /checkout/error/
  mode: sandbox
  receipt_url: /checkout/receipt/

And that’s working for me :blush:

You know what’s funny? I was the one who requested a change made to the docs to fix the paypal configuration documentation. However, I did not realize that the cybersource docs was also incorrect.

I’ll fix the readme of the ecommerce plugin right now.