0

自 2012 年 google io 以来,我们一直在使用 google wallet inapp-payments。

最近我们看到这个错误:

未捕获的 ReferenceError:未定义 goog

代码非常简单:

<script type="text/javascript" src="https://www.google.com/jsapi"></script>
<script type="text/javascript">
  google.load('payments', '1.0', {

    'packages': ['production_config']

  })

然后我们使用jquery document.ready 回调调用goog.payments.inapp.buy,但是那个时候好像goog 对象没有创建。这似乎是一种竞争条件。购买功能只需调用 goog.payments.inapp.buy

 $(document).ready(function() {
      purchase('Item1'); //function to call goog.payments.inapp.buy
       });

这也令人困惑,因为此页面https://sandbox.google.com/checkout/customer/gadget/inapp/demo.html显示购买电话是:

google.payments.inapp.buy

虽然此页面https://developers.google.com/in-app-payments/docs/tutorial#3显示购买电话是:

goog.payments.inapp.buy
4

1 回答 1

0

经过一些额外的搜索(也是因为编写问题的过程),找到了一个解决方案:

请参阅https://developers.google.com/in-app-payments/docs/tutorial#3

重要提示:如果 API 库尚未加载,对 buy() 的调用将失败。您可以通过在步骤 3 中使用 Google Loader 回调选项指定按钮 onClick 处理程序来避免此问题。有关使用 google.load() 的可选设置的详细信息,请参阅 Google Loader 开发人员指南。

为了避免竞争条件,使用 google.load 调用的回调很重要。

google.load('payments', '1.0', {
  'packages': ['production_config']

  ,"callback": function() {
          // wait for goog object to exist before using it.
          //goog.payments.inapp.buy(...);
   }
  }
于 2012-12-07T19:03:53.680 回答