Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
E
ecommerce
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
edx
ecommerce
Commits
13c0891c
Commit
13c0891c
authored
Dec 19, 2016
by
Marko Jevtic
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fix cybersource receipt page override
parent
5ac25b5f
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
36 additions
and
21 deletions
+36
-21
ecommerce/extensions/checkout/mixins.py
+20
-16
ecommerce/extensions/checkout/utils.py
+7
-3
ecommerce/extensions/payment/processors/cybersource.py
+7
-2
ecommerce/extensions/payment/tests/views/test_cybersource.py
+2
-0
No files found.
ecommerce/extensions/checkout/mixins.py
View file @
13c0891c
...
...
@@ -18,6 +18,7 @@ from ecommerce.extensions.order.constants import PaymentEventTypeName
CommunicationEventType
=
get_model
(
'customer'
,
'CommunicationEventType'
)
logger
=
logging
.
getLogger
(
__name__
)
Order
=
get_model
(
'order'
,
'Order'
)
post_checkout
=
get_class
(
'checkout.signals'
,
'post_checkout'
)
PaymentEvent
=
get_model
(
'order'
,
'PaymentEvent'
)
PaymentEventType
=
get_model
(
'order'
,
'PaymentEventType'
)
...
...
@@ -100,22 +101,25 @@ class EdxOrderPlacementMixin(OrderPlacementMixin):
and basket submission in a transaction. Should be used only in
the context of an exception handler.
"""
with
transaction
.
atomic
():
order
=
self
.
place_order
(
order_number
=
order_number
,
user
=
user
,
basket
=
basket
,
shipping_address
=
shipping_address
,
shipping_method
=
shipping_method
,
shipping_charge
=
shipping_charge
,
order_total
=
order_total
,
billing_address
=
billing_address
,
**
kwargs
)
basket
.
submit
()
return
self
.
handle_successful_order
(
order
,
request
)
try
:
return
Order
.
objects
.
get
(
number
=
order_number
)
except
Order
.
DoesNotExist
:
with
transaction
.
atomic
():
order
=
self
.
place_order
(
order_number
=
order_number
,
user
=
user
,
basket
=
basket
,
shipping_address
=
shipping_address
,
shipping_method
=
shipping_method
,
shipping_charge
=
shipping_charge
,
order_total
=
order_total
,
billing_address
=
billing_address
,
**
kwargs
)
basket
.
submit
()
return
self
.
handle_successful_order
(
order
,
request
)
def
handle_successful_order
(
self
,
order
,
request
=
None
):
# pylint: disable=arguments-differ
"""Send a signal so that receivers can perform relevant tasks (e.g., fulfill the order)."""
...
...
ecommerce/extensions/checkout/utils.py
View file @
13c0891c
...
...
@@ -33,19 +33,23 @@ def get_credit_provider_details(access_token, credit_provider_id, site_configura
return
None
def
get_receipt_page_url
(
site_configuration
,
order_number
=
None
):
def
get_receipt_page_url
(
site_configuration
,
order_number
=
None
,
override_url
=
None
):
""" Returns the receipt page URL.
Args:
order_number (str): Order number
site_configuration (SiteConfiguration): Site Configuration containing the flag for enabling Otto receipt page.
override_url (str): New receipt page to override the default one.
Returns:
str: Receipt page URL.
"""
if
site_configuration
.
enable_otto_receipt_page
:
base_url
=
site_configuration
.
build_ecommerce_url
(
reverse
(
'checkout:receipt'
))
params
=
urllib
.
urlencode
({
'order_number'
:
order_number
})
if
order_number
else
''
if
override_url
:
return
override_url
else
:
base_url
=
site_configuration
.
build_ecommerce_url
(
reverse
(
'checkout:receipt'
))
params
=
urllib
.
urlencode
({
'order_number'
:
order_number
})
if
order_number
else
''
else
:
base_url
=
site_configuration
.
build_lms_url
(
'/commerce/checkout/receipt'
)
params
=
urllib
.
urlencode
({
'orderNum'
:
order_number
})
if
order_number
else
''
...
...
ecommerce/extensions/payment/processors/cybersource.py
View file @
13c0891c
...
...
@@ -16,6 +16,7 @@ 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,8 +153,12 @@ class Cybersource(BasePaymentProcessor):
'amount'
:
str
(
basket
.
total_incl_tax
),
'currency'
:
basket
.
currency
,
'consumer_id'
:
basket
.
owner
.
username
,
'override_custom_receipt_page'
:
site
.
siteconfiguration
.
build_ecommerce_url
(
reverse
(
'cybersource_redirect'
)
'override_custom_receipt_page'
:
get_receipt_page_url
(
site_configuration
=
site
.
siteconfiguration
,
order_number
=
basket
.
order_number
,
override_url
=
site
.
siteconfiguration
.
build_ecommerce_url
(
reverse
(
'cybersource_redirect'
)
)
),
'override_custom_cancel_page'
:
self
.
cancel_page_url
,
}
...
...
ecommerce/extensions/payment/tests/views/test_cybersource.py
View file @
13c0891c
...
...
@@ -44,6 +44,8 @@ class CybersourceSubmitViewTests(CybersourceMixin, TestCase):
super
(
CybersourceSubmitViewTests
,
self
)
.
setUp
()
self
.
user
=
self
.
create_user
()
self
.
client
.
login
(
username
=
self
.
user
.
username
,
password
=
self
.
password
)
self
.
site
.
siteconfiguration
.
enable_otto_receipt_page
=
True
self
.
site
.
siteconfiguration
.
save
()
def
_generate_data
(
self
,
basket_id
):
return
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment