【问题标题】:iFrameCommunicator not receiving "'cancel" eventiFrameCommunicator 未收到“'取消”事件
【发布时间】:2018-01-25 06:00:41
【问题描述】:

我正在实施 Authorize.net 的 "Accept Hosted" iframe method 来提交在线支付。我想在 iframe(或灯箱)中嵌入 Authorize.net 结帐表单,然后在交易完成或取消时重定向我的页面(或关闭 iframe/灯箱)。

据我了解,嵌入在 iframe 中的 Authorize.net 页面本身会嵌入另一个 iframe,用于从 iframe 与我的页面进行通信,而不会遇到跨域问题。

我在 iframe 中看到了 Authorize.net 的结帐表单,并在我的“通信器”页面中看到了嵌套 iframe。但是,通信器似乎没有响应“取消”按钮事件。如果我在hostedPaymentReturnOptions 设置中传递cancelUrl,它将响应该事件,但随后iframe 在单击取消按钮时重定向。我不希望 iframe 重定向,我希望我的 父页面 重定向(或关闭 iframe/灯箱)。

使用此设置:

$setting->setSettingName("hostedPaymentReturnOptions");
$setting->setSettingValue('{"showReceipt":false}');

... 通信器 iframe 已加载,我看到一个调整窗口大小的事件:

action=resizeWindow&width=1802&height=572

...但单击“取消”按钮似乎不会触发任何事件。

使用此设置:

$setting->setSettingName("hostedPaymentReturnOptions");
$setting->setSettingValue('{"showReceipt":false,"cancelUrl":"https://www.example.com/"}');

...“取消”按钮将 iframe 重定向到“example.com”,这不是我想要的。我希望我的 父页面 重定向(或采取其他操作)。

我做错了什么?

供参考:
以下是设置 Accept Hosted 的一些说明。
这里是prompting the checkout form的推荐方法。
这是推荐的iFrameCommunicator page

这与我使用的过程基本相同,但“取消”按钮没有任何作用:
How to implement Authorize.NET Hosted Payments iFrame & Laravel


编辑:

请注意来自 Authorize.net 开发者社区论坛的描述。以我的经验,这不是提供“cancelUrl”时“取消”按钮的工作方式。 URL 在 iframe 中加载,这是不希望的。

在 iframe 场景中,单击“取消”按钮会调用“cancelContinueBtnHandler”函数。该函数将向您传递交易已取消的消息,如果您传递了“cancelUrl”,则会将浏览器定向到该 URL。因此,该 URL 不会在 iframe 中加载,而是在浏览器中加载。

-- community.developer.authorize.net

【问题讨论】:

    标签: iframe cross-domain authorize.net


    【解决方案1】:

    查看处理“取消”按钮的 JavaScript 代码,除非提供返回 urlcancelUrl 参数,否则什么都不会发生。即使事件被传回给商家,它看起来也会重定向 iframe,这是我没有预料到的。

    https://test.authorize.net/payment/scripts/app-min.js

    m.cancelContinueBtnHandler = function(w) {
      var v = (w === "continue" ? m.continueURL : m.cancelURL);
      if (v && g_iframeCommunicatorUrl.length > 0 && m.isIframeCommunication) {
        IFrameCommunication.sendCommunicationToMerchant("action=cancel");
        window.location = v
      } else {
        if (v) {
          window.location = v
        }
      }
    };
    

    所以,我误解了它的工作方式。正如其他人所提到的,当前的文档有点参差不齐/具有误导性。由于 iframe 无论如何都会重定向,因此我将其视为 JavaScript 处理程序的后备。这是我现在使用的:

    $setting->setSettingName("hostedPaymentReturnOptions");
    $setting->setSettingValue('{"showReceipt" : false, "url" : "https://www.example.com/return/", "cancelUrl" : "https://www.example.com/cancel/" }');
    

    我还将研究使用WebHooks 作为记录成功付款的更可靠方式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-11
      • 1970-01-01
      • 2019-12-22
      • 2016-11-02
      相关资源
      最近更新 更多