Following are short descriptions of each class and component of the framework.  This will give you a quick reference.

First off, you have to have a PayPal Business or Premiere account for this to be useful.  For it to be more useful, and to use Instant Payment Notifications, you need to enable that option in the preferences area of your account settings on PayPal's site.

############  Classes

WOPayPal - Principal framework class.  Registers observer for PayPalNotificationListener and sets it up to be the receiver of notifications posted by PayPalAction's ipnAction() method.

PayPalAction - This is a DirectAction subclass and offers functionality for receiving Instant Payment Notifications from PayPal.  Your app would access it like this: "http://yourdomain/cgi-bin/WebObjects/YourApp.woa/wa/PayPalAction/theActionNameAction"
    When this class receives an IPN, it does the validation with PayPal, and then posts the appropriate notification, which will be picked up by PayPalNotificationListener's observer.  The observer will in turn call the appropriate methods (defined in the PayPalNotificationListener.Delegate interface) on the class that is registered as PayPalNotificationListener's delegate. (PayPalNotificationRecorder implements the PayPalNotificationListener interface.) 

PayPalEmailURLUTF8Encoder - PayPal has their own groovy character encoding style for encoding their e-mail style URLs.  This should allow you to encode your links to their liking.

PayPalNotificationListener - The PayPalNotificationListener class is a receiver for notifications from PayPalAction's ipnAction method, which broadcasts notifications of different events having to do with "Instant Payment Notification" transaction notifications from PayPal.  The observer gets registered to receive notifications, and the Delegate interface defines what it can do with the notifications.  If a delegate is registered and implements some subset of the methods defined in the PayPalNotificationListener.Delegate interface, PayPalNotificationListener invokes the appropriate method on the delegate object.

PayPalNotificationLogger - What good is a notification of payment if you're not going to keep a record of it?  This is an example class that implements the PayPalNotificationListener.Delegate interface.  Your application should implement a similar class and register an instance of it as PayPalNotificationListener's delegate (PayPalNotificationListener.setDelegate(yourReallyCoolDelegateObject)) in order to "record" the transactions sent as Instant Payment Notifications.

PayPalSingleItemLinkBase - a base class that provides the common functionality of both PayPalSingleItemHyperlink and PayPalSingleItemFormLink.


############  WOComponents

CancelledPayPalTransaction - A very basic page to which PayPal can point your customer if he cancels a transaction.  You can override this behavior by simply defining a property: "CancelledPayPalTransactionComponent" that is the name of the component you want returned in its place. 

PayPalAddToCartHyperLink - A re-usable, stateless WOComponent for creating a hyperlink, around embeddable content, that will add the item to the user's PayPal shopping cart (opens a new window, or brings window to front if already open).

PayPalDonateFormLink - A re-usable, stateless WOComponent for creating a simple form with a submit button or image button for PayPal Donations.

PayPalDonateHyperLink - A re-usable, stateless WOComponent for creating a hyperlink, around embeddable content, for PayPal Donations.

PayPalSingleItemFormLink - A re-usable, stateless WOComponent for creating a simple form with a submit button or image button for PayPal Single Item Purchases.

PayPalSingleItemHyperLink - A re-usable, stateless WOComponent for creating a hyperlink around embeddable content for PayPal Single Item Purchases.

PayPalViewShoppingCartHyperLink - A re-usable, stateless WOComponent for creating a hyperlink, around embeddable content, that will open the user's PayPal shopping cart (opens a new window, or brings window to front if already open).

SuccessfulPayPalTransaction - A very basic page to which PayPal can point your customer when he successfully completes a transaction.  You can override this behavior by simply defining a property: "SuccessfulPayPalTransactionComponent" that is the name of the component you want returned in its place.


