【问题标题】:Why does Stripe's handleCardPayment not run in my Javascript function?为什么 Stripe 的 handleCardPayment 不能在我的 Javascript 函数中运行?
【发布时间】:2019-08-28 02:31:18
【问题描述】:

我正在尝试使用 Stripes handleCardPayment 来处理付款意图后的费用。我无法让 handleCardPayment 函数在另一个 Javascript 函数中运行。

我已尝试逐步调试我的代码。 Javascript 函数运行并将向窗口打印警报。

我在函数顶部设置的 Javascript 变量也被设置了。

handleCardPayment() 函数似乎没有运行?

我尝试了 try/catch 以查看是否可以捕获来自请求的错误,但没有记录任何内容。

我有点困惑,问题出在哪里?尽管我怀疑在正确调用条带函数时可能缺少一些基本的东西。

function completePayment() {

 // Assign client secret from PHP session variable

 var clientSecret = "<?php echo $_SESSION['c_secret'] ?>";

 try {

  stripe.handleCardPayment(
   clientSecret, cardElement, {
    source_data: {
      owner: {email: "<?php echo $_SESSION['m_usr_email'] ?>"}
    }
   }
  ).then(function(result) {
     if (result.error) {
        alert("Error in payment");
      } else {
        alert("Success in payment");
      }
    }); 
  }
  catch(error) {
   console.log(error.message);
  } 
}

我的付款意图是在单独的 PHP 页面上创建的。这可以正常工作,并且会以条带状创建带有关联客户端密码的支付意图。

应用目前的运作方式:

  • 用户按下“订阅”按钮。
  • Ajax 请求运行并发布到单独的 PHP 文件
  • PHP 文件创建支付意图并将客户端密码保存在 PHP SESSION 变量中
  • Ajax 'Complete function()' 然后调用 'completePayment();'
  • Javascript 函数 'completePayment();'位于页面底部的结束标记之前。
  • 调试“completePayment()”显示该函数确实在 Ajax“Complete function()”调用之后执行。
  • stripe.HandleCardPayment 无法执行任何操作。
  • cardElement 是在创建卡片元素时设置的全局 Javascript 变量(这是在初始页面加载时创建的)。

  • 我已经调试了两个 PHP SESSION 变量,并确认在 handleCardPayment 函数中使用它们之前,它们都设置了正确的信息。

关于我在这里做错了什么有什么建议吗?

【问题讨论】:

  • 嗯,浏览器控制台没有错误?由于您使用 PHP 填充客户端密码和电子邮件:当您在页面上view source 时,您可以确认这两个字段由电子邮件和客户端密码填充吗? PHP 应该在页面加载时从 SESSION 变量中填充它们,如果您在 PHP 呈现页面后执行 AJAX 请求,它们可能仍然是空的。
  • 嗨鸭子,我回显了会话变量,并且在运行 handlecardpayment 之前它们肯定已正确填充。在创建付款意图并且它确实运行之后,我已经测试从测试按钮上的单独函数调用运行这部分,所以我将关闭这个问题,因为现在我必须实现我的错误处理代码来尝试找出错误是什么在付款处理中!由于某种原因,该函数不能从 Ajax 完整函数中运行,但我可以在按下订阅按钮之前更改我的代码以执行支付意图,因此应该是可行的。

标签: javascript php ajax stripe-payments


【解决方案1】:

我有同样的问题。看起来它没有执行的函数,因为控制台日志没有出现,但搜索后我发现我错过了 $intent->client_secret,在此之前,js 控制台没有显示任何内容,我只需要调用函数条带。没有任何额外代码的 handleCardPayment 然后 cosole 向我显示 $intent->client_secret 它是未定义的。

我的英语不太好,我希望它能为某人服务

【讨论】:

    猜你喜欢
    • 2011-07-22
    • 2016-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多