This assignment will serve as the “Portfolio Assignment” for this course. A portfolio assignment is an applied assignment that showcases your ability to apply what you learned in this class. You are encouraged to create a free DU portfolioLinks to an external site. in which you can store evidence of what you learned (such as papers, projects, and key course assignments) as you move throughout your coursework at University College. You have the ability to share the portfolio with potential employers or colleagues. Keeping a portfolio will allow you to reflect on, provide context for, and continue to hone your work samples as you build knowledge and skills throughout your time at DU.
PURPOSE OF ASSIGNMENT
This assignment will bring together the learning from the previous assignments. Collect together all your work thus far and put it into a coherent unified high-level design for the system. You are welcome to use previous assignments verbatim where appropriate although you should be sure to incorporate the feedback on them.
As a reminder, here’s the original description of the system we’re creating:
Have you ever stopped to consider what happens when you’re shopping online? In between entering your credit card information and the money getting charged to your account is a very complex set of interactions. During this class, we will explore a simplified payment processing system that does exactly this. We’ll create a design for it and provide sample implementations for some of the components.
Let’s take a look at some of the details of a payment processing system.
FORMS OF PAYMENT
To keep this simple we’ll assume that we only accept credit cards for payment.
The happy shopper needs some way to enter their payment details.
The storefront needs an interface to the processing system where they can enter the shoppers’ details, get confirmation that they can charge the card, and collect the money afterwards.
CREDIT CARD PAYMENTS
Paying by credit card, whether online or in a physical shop, follows a two-step process.
When your card is first run, it performs an “authorization”. This authorization takes the credit card details and the amount requested and sends them to the credit card company. The company then looks up the card and verifies whether or not the payment will succeed. A status code (OK or some kind of error code) is returned, along with an authorization code if the status is OK.
Later on (e.g. once an hour, once a day) all of these authorizations are collected up into a single batch and sent as “payment requests” to the credit card company. A payment request contains the same information as the initial authorization along with the authorization code that was returned. The credit card company will respond with statuses for each payment request and all the money for those requests that succeeded is transferred into the store’s bank account.
PAYMENT PROCESSING SYSTEM
The system needs to implement credit card processing as described above.
CREDIT CARD COMPANY
We shall assume we use a single credit card processor and that processor provides us with an interface for performing authorizations in real time and batch payment requests.
This assignment will bring together the learning from the previous assignments. Collect together all your work thus far and put it into a coherent unified high-level design for the system. You are welcome to use previous assignments verbatim where appropriate although you should be sure to incorporate the feedback on them. You should also incorporate code from the previous assignments as necessary to illustrate your designs. If you use small snippets, then they can go in the document, otherwise, you should organize the code in a coherent package structure and submit it with the document in a zip file.
FORMATTING AND STYLE REQUIREMENTS
1. Refer to the UCOL Format and Style Requirements (Links to an external site.) on the Course Homepage, and be sure to properly cite your sources using Turabian Author-Date style citations (Links to an external site.).
Below we include a sample outline that you may use for inspiration. It is not required that you follow this outline; this is provided merely as a guide. Should you use it you must remove all the text that describes the purpose of the relevant section.
Describe the payment processing system from a high level in your own words.
Provide the basic requirements that your system will satisfy. Include a section on “non-requirements” as appropriate. The latter would be a good place to mention that you won’t support payment types other than credit cards.
Capture the major components of the system and how they interact with one another. A mixture of text and diagrams would be best here. Make sure you cover the full control flow, starting from the user and ending at the credit card processor.
Document the communication protocol you will use across the entire system. It’s possible, even likely, that different parts will use different protocols (e.g. HTTP between the user’s web browser and the payment system; JSON internally to the system; proprietary database driver to communicate with the backend.
Include your resource plan for the system along with how it will scale as your user base grows.
Describe the environment within which the system will run, including and services it will depend on.
Include any implementation details you consider necessary to complete this work.
We covered many topics in this class. Consider whether any of these belong in your design:
1. Specific cloud providers