Commit f409cf0d by Marko Jevtić Committed by GitHub

Merge pull request #1025 from edx/mjevtic/SOL-1955

[SOL-1955] Add interstitial for CyberSource payments
parents 80141cec 9d1f8188
import json
from django.conf import settings
from django.core import mail
import httpretty
from oscar.test import factories
......@@ -11,6 +10,7 @@ from ecommerce.core.tests import toggle_switch
from ecommerce.courses.tests.factories import CourseFactory
from ecommerce.extensions.catalogue.tests.mixins import CourseCatalogTestMixin
from ecommerce.extensions.checkout.signals import send_course_purchase_email
from ecommerce.extensions.checkout.utils import get_receipt_page_url
from ecommerce.tests.testcases import TestCase
LOGGER_NAME = 'ecommerce.extensions.checkout.signals'
......@@ -89,8 +89,9 @@ class SignalTests(CourseCatalogTestMixin, TestCase):
credit_hours=2,
credit_provider_name=credit_provider_name,
platform_name=self.site.name,
receipt_url=self.site.siteconfiguration.build_ecommerce_url(
'{}?order_number={}'.format(settings.RECEIPT_PAGE_PATH, order.number)
receipt_url=get_receipt_page_url(
order_number=order.number,
site_configuration=order.site.siteconfiguration
)
)
)
......
......@@ -39,3 +39,8 @@ class PCIViolation(PaymentError):
If we are raising this exception BAD things are happening, and the service MUST be taken offline IMMEDIATELY!
"""
pass
class InvalidBasketError(PaymentError):
""" Payment was made for an invalid basket. """
pass
......@@ -7,6 +7,7 @@ import uuid
from decimal import Decimal
from django.conf import settings
from django.core.urlresolvers import reverse
from oscar.apps.payment.exceptions import UserCancelled, GatewayError, TransactionDeclined
from oscar.core.loading import get_model
from suds.client import Client
......@@ -15,7 +16,6 @@ from suds.wsse import Security, UsernameToken
from ecommerce.core.constants import ISO_8601_FORMAT
from ecommerce.core.url_utils import get_ecommerce_url
from ecommerce.extensions.checkout.utils import get_receipt_page_url
from ecommerce.extensions.payment.constants import CYBERSOURCE_CARD_TYPE_MAP
from ecommerce.extensions.payment.exceptions import (
InvalidSignatureError, InvalidCybersourceDecision, PartialAuthorizationError, PCIViolation,
......@@ -152,9 +152,8 @@ class Cybersource(BasePaymentProcessor):
'amount': str(basket.total_incl_tax),
'currency': basket.currency,
'consumer_id': basket.owner.username,
'override_custom_receipt_page': get_receipt_page_url(
order_number=basket.order_number,
site_configuration=site.siteconfiguration
'override_custom_receipt_page': site.siteconfiguration.build_ecommerce_url(
reverse('cybersource_redirect')
),
'override_custom_cancel_page': self.cancel_page_url,
}
......
......@@ -171,8 +171,11 @@ class PaypalTests(PaypalMixin, PaymentProcessorTestCaseMixin, TestCase):
"""
Ensures that when the otto_receipt_page waffle switch is enabled, the processor uses the new receipt page.
"""
self.toggle_ecommerce_receipt_page(True)
assert self._get_receipt_url() == self.site.siteconfiguration.build_ecommerce_url(settings.RECEIPT_PAGE_PATH)
self.site.siteconfiguration.enable_otto_receipt_page = True
self.assertEqual(
self._get_receipt_url(),
self.site.siteconfiguration.build_ecommerce_url(settings.RECEIPT_PAGE_PATH)
)
def test_switch_disabled_lms_url(self):
"""
......
""" Payment-related URLs """
from django.conf.urls import url
from ecommerce.extensions.payment.views.cybersource import CybersourceNotifyView, CybersourceSubmitView
from ecommerce.extensions.payment.views import cybersource, PaymentFailedView
from ecommerce.extensions.payment.views.paypal import PaypalPaymentExecutionView, PaypalProfileAdminView
urlpatterns = [
url(r'^cybersource/notify/$', CybersourceNotifyView.as_view(), name='cybersource_notify'),
url(r'^cybersource/submit/$', CybersourceSubmitView.as_view(), name='cybersource_submit'),
url(r'^cybersource/notify/$', cybersource.CybersourceNotifyView.as_view(), name='cybersource_notify'),
url(r'^cybersource/redirect/$', cybersource.CybersourceInterstitialView.as_view(), name='cybersource_redirect'),
url(r'^cybersource/submit/$', cybersource.CybersourceSubmitView.as_view(), name='cybersource_submit'),
url(r'^error/$', PaymentFailedView.as_view(), name='payment_error'),
url(r'^paypal/execute/$', PaypalPaymentExecutionView.as_view(), name='paypal_execute'),
url(r'^paypal/profiles/$', PaypalProfileAdminView.as_view(), name='paypal_profiles'),
]
from django.core.urlresolvers import reverse
from django.views.generic import TemplateView
class PaymentFailedView(TemplateView):
template_name = 'checkout/payment_error.html'
def get_context_data(self, **kwargs):
context = super(PaymentFailedView, self).get_context_data(**kwargs)
context.update({
'basket_url': reverse('basket:summary'),
'payment_support_email': self.request.site.siteconfiguration.payment_support_email
})
return context
{% extends 'edx/base.html' %}
{% load i18n %}
{% load staticfiles %}
{% block title %}
{% trans "Payment Failed" %}
{% endblock title %}
{% block navbar %}
{% include 'edx/partials/_student_navbar.html' %}
{% endblock navbar %}
{% block content %}
<div class="container content-wrapper receipt-cancel-error">
<h1>{% trans "Payment Failed" %}</h1>
<p>
{% blocktrans %}
A system error occurred while processing your payment. <strong>You have not been charged.</strong>
{% endblocktrans %}</p>
<p>
{% with "<a class='nav-link' href='mailto:"|add:payment_support_email|add:"'>"|safe as start_link %}
{% blocktrans with end_link="</a>"|safe %}
Please wait a few minutes and then try again. For help, contact {{ start_link }}{{ payment_support_email }}{{ end_link }}.
{% endblocktrans %}
{% endwith %}
</p>
<p>
{% with "<a class='nav-link' href='|add:basket_url|add:'>"|safe as start_link %}
{% blocktrans with end_link="</a>"|safe %}
To try again, visit the {{ start_link }}basket page{{ end_link }}.
{% endblocktrans %}
{% endwith %}
</p>
</div>
{% endblock content %}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment