Skip to content
This repository has been archived by the owner on Jul 24, 2021. It is now read-only.

jagregory/play-google-checkout

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

17 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

play-googlecheckout

Integrate Google Checkout into your Play application.

Installation

Module installation

Note: this step won’t actually work until we’re up in the module repository. In the meantime you can clone this repository and build the module yourself.

Install the googlecheckout module from the modules repository:

play install googlecheckout

Configuring the module

Add the following to your dependencies.yml to enable it:

require:
    - play
    - play -> googlecheckout 0.1

Add the routes into your routes file to enable the Google Checkout callback:

*    /    module:googlecheckout

Configure your application by adding the following settings to your application.conf:

# Google checkout
googlecheckout.merchantid=**your_sandbox_merchant_id**
googlecheckout.merchantkey=**your_sandbox_merchant_key**
%prod.googlecheckout.merchantid=**your_production_merchant_id**
%prod.googlecheckout.merchantkey=**your_production_merchant_key**
%prod.googlecheckout.sandbox=false

You can optionally supply a googlecheckout.currency to use a different currency than USD.

Usage

Submitting orders

The googlecheckout module relies on the Google Checkout SDK to interact with Google Checkout. To submit orders you do it the same way you normally would with the SDK, except you can use the GoogleCheckoutApiFactory.build() factory method to create an instance of the Checkout API using the settings from your Play application.conf.

A basic example:

public class Basket extends QuidsinController {
  public static void checkout() {
    ApiContext api = null;
    
    try {
      api = GoogleCheckoutApiFactory.build();
    } catch (GoogleCheckoutInitializationException ex) {
      error(ex);
    }
    
    CartPoster.CheckoutShoppingCartBuilder cart = api.cartPoster().makeCart();
    cart.addItem("Test item", "An item for testing", 10.50, 1);

    CheckoutRedirect checkoutRedirect = cart.buildAndPost();
    String redirectUrl = checkoutRedirect.getRedirectUrl();

    redirect(redirectUrl);
  }
}

What that Controller does is create the Google Checkout API context, build a cart, then add a single item to the cart. The cart.buildAndPost() method-call submits the cart to Google Checkout, and they will respond with a redirect URL which you send your users to; this URL is where they’ll complete the transaction on Google’s servers.

That’s it as far as creating orders is concerned. You can leave it at that and use Google’s merchant tools to manage all your orders; however, if you need to be notified about when orders are created, authorised, declined etc then read on.

Receiving notifications from Google Checkout

The Google Checkout API works by POSTing you notifications to a specific publicly available URL on your website. When you receive one of these POSTs from Google, you can update the state of your system based on what they say.

The googlecheckout module exposes a fixed URL at /google-checkout-callback which Google will POST to. Make sure you configure your Google Checkout account to post to this URL (should be https://your-application.com/google-checkout-callback). Also, make sure your Callback contents are set to “Notification Serial Number” and your API version to at least 2.5.

By default the googlecheckout module doesn’t do anything with incoming notifications from Google, this may change in the future but right now it seems everybody’s usage differs at this point so it’s best to leave it up to the individual implementor. To handle notifications you need to extend the GoogleCheckout.NotificationHandler class in a very similar way to how the Secure module works.

For example:

public class MyPaymentNotificationHandler extends GoogleCheckout.NotificationHandler {}

At a minimum you should implement the boolean alreadyHandled(String serialNumber, OrderSummary orderSummary, Notification notification) and static void rememberSerialNumber(String serialNumber, OrderSummary orderSummary, Notification notification) methods, which are required for Google Checkout notifications to function correctly.

In short, implement the rememberSerialNumber method by saving the serial number in a database table, then implement the alreadyHandled method by looking up in that table whether there’s already a row in there for the supplied serial number. From there you can start overriding the other methods to react to new orders being created, orders being authorised, charged, refunded, etc…

If you follow the Google Checkout Custom Processing tutorial you should be able to figure most of the rest of this out.

All the methods which are available to override are in the NotificationHandler nested class within GoogleCheckout.java (around line 105).

Bugs etc…

The googlecheckout module is provided as-is with no warranty or even expectation that it will work for you. It’s been extracted from an in-house solution and only tested on our one system. Feel free to raise issues on our Github repository.

History

  • v0.1: Initial version, nothing too fancy

About

Google Checkout Play! module

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published