2015-02-22 2 views
2

Я пытаюсь интегрировать поток проверок в моем приложении gwt. В соответствии с документацией по https://stripe.com/docs/checkout#integration-customStripe checkout with gwt не работает

мы вызываем вызов configure, а затем добавляем обработчик события завершения платежа. Но по какой-то причине, браузер не может найти функцию обратного вызова (маркер)

 
    Uncaught TypeError: undefined is not a function 
     checkout.js:2 TokenCallback.trigger 
     checkout.js:2 __bindcheckout.js:2 (anonymous function) 
     checkout.js:2 IframeView.closed 
     checkout.js:2 __bindcheckout.js:1 RPC.processMessage 
     checkout.js:1 __bindcheckout.js:1 RPC.message 
     checkout.js:1 (anonymous function) 

Крюки для открытия/закрытия становятся называется хотя

 

    public class StripePaymentHandler { 

     public static void initialize(final String apiKey) { 
     if (!isInjected()) { 
      ScriptInjector.fromUrl("https://checkout.stripe.com/checkout.js").setWindow(ScriptInjector.TOP_WINDOW) 
       .setCallback(new Callback() { 
       @Override 
       public void onFailure(Exception e) { 
        Window.alert("Failed to load stripe"); 
       } 

       @Override 
       public void onSuccess(Void aVoid) { 
        doInitialize(apiKey); 
       } 
       }).inject(); 
     } 
     } 

     public static native void doInitialize(String apiKey) /*-{ 
     console.log('initializing Stripe: '+apiKey); 
     $wnd.callback = function(token) { 
      console.log(token); 
      alert(token); 
     } 

     $wnd.handler = $wnd.StripeCheckout.configure({ 
      key: 'key', 
      image: '/images/logo.png', 
      token: $wnd.callback 
     }); 
     }-*/; 

     public static void completePayment(StripeCheckoutToken token) { 
     Window.alert(token.getId()); 
     } 

     public static native void handlePaymentButtonClicked(String description, double price) /*-{ 

     $wnd.handler.open({ 
      name: 'Ziplly', 
      description: description, 
      amount: price, 
      key: 'key', 
      token: function(token) { 
      console.log(token); 
      alert(token); 
      }, 
      opened: function() { 
      alert('opened'); 
      } 
     }); 
     }-*/; 

     public static native boolean isInjected() /*-{ 
      return typeof $wnd.Stripe !== "undefined"; 
     }-*/; 
    } 

Я был в состоянии проверить, что $ WND. обработчик существует после вызова метода configure. Я также попытался поместить обратный вызов в метод handler.open, но не повезло. Любая помощь по этому поводу будет оценена по достоинству.

EDIT 2 Вот код обработчика кнопок, вызывающий handler.open(). Это работает отлично, но обратный вызов из метода configure (токена) никогда не вызывается, вместо этого я получаю описанную выше ошибку. Имеет ли это смысл?

 

    @Override 
     public void onSuccess(CheckBuyerEligibilityForCouponResult result) { 

     PaymentProviderName providerName = result.getPaymentSetupResponse().getProviderName(); 

     switch (providerName) { 
      case GOOGLE: 
      handleGooglePayment(result.getPaymentSetupResponse()); 
      break; 
      case STRIPE: 
      StripePaymentHandler.handlePaymentButtonClicked("Coupon purchase", 20); 
     } 

+1

На первом взгляде на полосковых документах, должен быть призывом к $ wnd.handler.open (с аргументами, и т.д.), но он не появляется в коде , Кроме того, вы можете поделиться журналом? И что, предположительно, вызывает fullPayment в вашем java-коде - ничего, похоже, не ссылается на него? –

+0

Спасибо за ответ. handlePaymentButtonClicked регистрируется как кнопка клика для кликов. Когда я нажимаю на кнопку оплаты, появляется вызов, и появляется полоса. Я заполняю детали (адрес электронной почты/cc/exp date), а затем нажимаю ok. И я получаю успешный токен назад, но обратный вызов, соответствующий токену в handler.open или StripeCheckout.configure, не вызван. «completePayment» еще не подключен, идея состоит в том, чтобы вызвать «completePayment» из обратного вызова. – user1010373

+0

Но обратный вызов этого не делает, и его очень сложно сказать, почему без полного кода. Вместо того, что вы описали, ваш обратный вызов вызывает 'alert', и в вашем коде нет вызова' handler.open', поэтому это не должно работать вообще. Его трудно помочь, если вы не показываете, что у вас есть, и просто покажите часть, которую, по вашему мнению, нам нужно, помогут, только если вы уже знаете, что не так;). –

ответ

1

мне пришлось добавить идентификатор кнопки методу StripeCheckout.configure(), чтобы решить эту проблему. Вот как это будет выглядеть для вас:

$wnd.handler = $wnd.StripeCheckout.configure(
    $wnd.myButton.id, 
    { 
     key: 'key', 
     image: '/images/logo.png', 
     token: $wnd.callback 
    }); 
Смежные вопросы