Paypal Integration / JNSI

652 views
Skip to first unread message

Sydney

unread,
May 12, 2012, 9:41:58 AM5/12/12
to google-we...@googlegroups.com
I use the Paypal Adaptive API. So far I managed to display the paypal page using a lightbox. But I have a problem when trying to close the lightbox. I failed in Step 4

3. Include the PayPal JavaScript functions from dg.js.

</script>

4. Create an embedded flow object and associate it with your payment form or button.

<script>
var dgFlow = new PAYPAL.apps.DGFlow({ trigger: 'submitBtn' });
</script>

After Completing This Task:

On the pages you identify as the return and cancel URLs in the Pay API operation, you must
include the PayPal JavaScript functions from dg.js and close the PayPal window, as in the
following example:

dgFlow = top.dgFlow || top.opener.top.dgFlow;
dgFlow.closeFlow();
top.close();

What I did:

For step 4, I call the following JNSI method:

    private native void paypalLight() /*-{
var dgFlow = new $wnd.PAYPAL.apps.DGFlow({
trigger : 'submitBtn'
});
    }-*/;

The paypal page is displayed in the lightbox, than I click the cancel button. My cancelURL is http://127.0.0.1:8888/xxx.html?gwt.codesvr=127.0.0.1:9997#!homePage;cancel=true and in this page I process the cancel parameter by calling the following JNSI:

    public static native void paypalClose() /*-{
dgFlow = $wnd.top.dgFlow || $wnd.top.opener.top.dgFlow;
dgFlow.closeFlow();
$wnd.top.close();
    }-*/;

When I cancel the transaction, the cancelUrl gets called, and the paypalClose method is called. I get the error: (TypeError): $wnd.top.opener is null.

Any ideas?
Thanks



Mayumi

unread,
May 27, 2012, 2:21:25 PM5/27/12
to google-we...@googlegroups.com
How did you end up fixing this?

Sydney

unread,
May 28, 2012, 4:42:58 AM5/28/12
to google-we...@googlegroups.com
    public static native void paypalClose() /*-{
if (top && top.opener && top.opener.top) {
top.opener.top.dgFlow.closeFlow();
top.close();
} else if (top) {
top.dgFlow.closeFlow();
top.close();
}
    }-*/;

Mayumi

unread,
May 28, 2012, 11:06:23 AM5/28/12
to google-we...@googlegroups.com
Thank you so much for the reply!

So you're calling JSNI above from the return/cancel page correct?
If so are you doing something like window.parent. paypalClose() from inside the IFRAME that paypal insert
the return/cancel pages from?

Thanks!

Sydney

unread,
May 28, 2012, 4:13:46 PM5/28/12
to google-we...@googlegroups.com
When the user cancels or finishes the purchase, Paypal redirects the user to a page within the iframe or popup window. My cancel URL looks like this http://127.0.0.1:8888/xxx.html?gwt.codesvr=127.0.0.1:9997#!homePage;cancel=true. I am using GWTP so the following code should give you an idea on how it works:

    @Override
    public void prepareFromRequest(PlaceRequest placeRequest) {
        super.prepareFromRequest(placeRequest);
        String cancel = placeRequest.getParameter("cancel", "");
        if ("true".equals(cancel)) {
            paypalClose();
        }
    }

    public static native void paypalClose() /*-{
if (top && top.opener && top.opener.top) {
top.opener.top.dgFlow.closeFlow();
top.close();
} else if (top) {
top.dgFlow.closeFlow();
top.close();
}
    }-*/;

top.close() will close the paypal flow (iframe or popup window).

Mayumi

unread,
May 28, 2012, 5:25:01 PM5/28/12
to google-we...@googlegroups.com
Thanks :)


On Saturday, 12 May 2012 08:41:58 UTC-5, Sydney wrote:

Harry

unread,
Jun 18, 2013, 7:52:26 PM6/18/13
to google-we...@googlegroups.com
I'm using gwtp and smartgwt UI components. Can anyone help me with some code to link the submit button to the paypal script? How do I get the id of the submit button?

private ButtonItem btnPay = new ButtonItem("Pay");

I plan to create a button such as the above which will, on click, use the action handler on the server to create the payment.

Then hopefully call the JSNI below to open an iFrame / mini window and initiate the user's approval flow

private native void paypalLight() /*-{
var dgFlow = new $wnd.PAYPAL.apps.DGFlow({
trigger : 'btnPay'
});
}-*/;

My question is: How do I link the btnPay button's dom id to the trigger in JSNI code?

TIA
Reply all
Reply to author
Forward
0 new messages