Payment Flow

'''Mark is just doodling here... not sure if this will end up being used, I'm sort of dreaming out loud...'''

This page documents the payment/store flow of the Dreamwidth Payment System. This is meant to capture all of the high level details about all of the pages involved in letting users browse things for sale and then actually complete the transaction.

Architecture
The payment system is designed to be several separate components. In particular, we try to keep the actual payment component separate from the rest of the system. This way we can have a pluggable backend for actually capturing funds, handling refunds, and etc.

The logic for account management should also be separate, so that sites can alter the business rules as needed. The last component (probably) should be the actual shop interface: browsing items, making shopping carts, confirming purchases.

Use Cases
Things we want the user to be able to do. Broken down by functional area, for easier perusal.

Shop Interface
Overview: The shop is how users will decide what to buy. This is where we present what we have available, give information on pricing, and let them put things in a shopping cart. When they are all done, they will have the ability to choose a checkout method.

Some other notes: the shop interface should at all times present the user with information about their current cart. Give them a breakdown of how much money they're spending, how many items, and a way to easily jump to the checkout flow from any page they're on.

Browsing
The browse interface will allow the user to see exactly what we have for sale. This can be in any format we want, but for now it's probably going to be pretty simple. This needs to be designed. Some of the things I can think of offhand:


 * Buying paid time for the active user
 * Buying paid time for another user
 * Buying Dreamwidth points/credits

Functions that must exist on this page, in general:


 * Add to shopping cart
 * See more information about this item

Add to Cart
Adding an item to the cart is fairly straightforward. There may need to be an interstitial page if we need to get more information (which account to apply this toward, etc) but that's up to design. The function must exist, though.

View Cart
The user needs to be able to view their current cart contents. This will show everything they have in their shopping cart currently.

Remove from Cart
This will be on the shopping cart/view cart page, you can remove items.