【问题标题】:Blocked a frame from accessing a frame with origin "https://www.paypal.com". Protocols, domains, and ports must match. What does this mean?阻止框架访问来源为“https://www.paypal.com”的框架。协议、域和端口必须匹配。这是什么意思?
【发布时间】:2020-07-21 01:41:20
【问题描述】:

我有一个网站,我在其中使用 PayPal 智能按钮。在沙盒环境中对其进行测试时效果很好,但是当我将客户端 ID 从沙盒一更改为实时客户端 ID 时,付款将无法通过.

PayPal 按钮仍然呈现,它仍然会将您带到结帐窗口,并且仍然允许您付款,但是当您单击付款按钮时,窗口会关闭,并且买家会收到一封电子邮件,说 PayPal 发现了与付款相关的一些风险支付?单击 PayPal 按钮,在 JavaScript 控制台日志中我收到此错误 3 次:

Blocked a frame with origin "https://www.mobilemastersshop.com" from accessing a frame with origin "https://www.paypal.com". Protocols, domains, and ports must match.

这就是它不起作用的原因吗?如果是,我该如何解决?我使用的是 Let's Encrypt 的 SSL 证书,因此 URL 是安全的,但我是否需要更改 .htaccess 文件中的任何内容才能使 PayPal 正常工作?

评论后

我认为问题在于这部分没有:

但我不知道在哪里包含这些变量。我的 PayPal 按钮渲染代码是:

<script>
        paypal.Buttons({
            createOrder: function(data, actions) {
                // This function sets up the details of the transaction, including the amount and line item details.
                return actions.order.create({
                    "purchase_units": [{
                        "amount": {
                            "value": applyDiscount(),
                            "currency_code": "USD",
                            "breakdown": {
                                "item_total": {
                                    "currency_code": "USD",
                                    "value": applyDiscount()
                                },
                            },
                        },
                        "items": PayPalItems()
                    }
                    ]
                });
            },
            onApprove: function(data, actions) {
                // This function captures the funds from the transaction.
                return actions.order.capture().then(function(details) {
                    // This function shows a transaction success message to your buyer.
                    alert('Transaction completed by ' + details.payer.name.given_name);
                    window.location.href = "orderConfirmed.php";
                    clearCart()
                });
            }
        }).render('#paypal-button-container');
        //This function displays Smart Payment Buttons on your web page.
    </script>

我猜想 vars 必须进入这个脚本,所以我的 Live Client ID 脚本看起来像这样:

<script src="https://www.paypal.com/sdk/js?client-id=AU25a1zm8IuMS_HHl-90AUaHjQBdA-TnzsaSkF2do60t7VS8IukeuBhUY552W1pY_CE0QIY2h9i5p1cK">
    // Add your client ID and secret
    let PAYPAL_CLIENT = 'AU25a1zm8IuMS_HHl-90AUaHjQBdA-TnzsaSkF2do60t7VS8IukeuBhUY552W1pY_CE0QIY2h9i5p1cK';
    let PAYPAL_SECRET = 'EIwsaGfAw7tiNBJBBb7jVWxrH6fqSLJ0fg-oNAJ-pQc37nM0ndSwqN6L0tRIvrNv9y5l2rXJdw914NUE';

    // Point your server to the PayPal API
    let PAYPAL_ORDER_API = 'https://api.paypal.com/v2/checkout/orders/';
</script>

【问题讨论】:

  • 不测试就猜不出哪里出了问题,mobilemastersshop.com 不显示任何东西
  • 我现在上传文件
  • 好吧,我没有看到任何关于您引用的错误的信息。使用拒绝的真实帐户进行测试时,控制台错误为“错误:无法捕获订单”,并且没有向用户发送消息,因此您还需要改进。
  • 我没有看到你所指的这个错误,我会更新这个问题以提供更多信息
  • @PrestonPHX 我已经进行了编辑

标签: javascript paypal


【解决方案1】:
<script src="https://www.paypal.com/sdk/js?client-id=AU25a1zm8IuMS_HHl-90AUaHjQBdA-TnzsaSkF2do60t7VS8IukeuBhUY552W1pY_CE0QIY2h9i5p1cK">
    // Add your client ID and secret
    let PAYPAL_CLIENT = 'AU25a1zm8IuMS_HHl-90AUaHjQBdA-TnzsaSkF2do60t7VS8IukeuBhUY552W1pY_CE0QIY2h9i5p1cK';
    let PAYPAL_SECRET = 'EIwsaGfAw...redacted';

    // Point your server to the PayPal API
    let PAYPAL_ORDER_API = 'https://api.paypal.com/v2/checkout/orders/';
</script>

客户端集成仅使用客户端 ID,它位于脚本的第一行。您添加的所有其他信息均用于服务器端集成,此处未使用,因此不需要。

【讨论】:

    猜你喜欢
    • 2018-09-10
    • 2021-06-09
    • 1970-01-01
    • 1970-01-01
    • 2017-04-03
    • 1970-01-01
    • 2012-05-21
    • 2013-10-14
    • 2015-07-29
    相关资源
    最近更新 更多