【问题标题】:How to implement a Stripe Checkout custom button如何实现 Stripe Checkout 自定义按钮
【发布时间】:2017-06-27 14:43:23
【问题描述】:

根据文档,Checkout 支持两种不同的集成:简单和自定义。

简单的方法对我有用:

**<form action="create_subscription.php" method="POST">**
<script
  src="https://checkout.stripe.com/checkout.js" class="stripe-button"
  data-key="asdsdfasd3232"
  data-amount="2000"
  data-name=""
  data-description="2 widgets"
  data-image="https://s3.amazonaws.com/stripe-uploads/acct_19EnQrGHC6pu6Qvdmerchant-icon-1485553962843-logo_stripe.png"
  data-locale="auto">
</script>
</form>

但是以自定义方式,我不明白应该如何以及在何处调用“create_subscription.php”脚本。这是自定义集成代码:

<script src="https://checkout.stripe.com/checkout.js"></script>

<button id="customButton">Purchase</button>

<script>
var handler = StripeCheckout.configure({
  key: 'asdsdfasd3232',
  image: 'https://s3.amazonaws.com/stripe-uploads/acct_19EnQrGHC6pu6Qvdmerchant-icon-1485553962843-logo_stripe.png',
  locale: 'auto',
  token: function(token) {
    // You can access the token ID with `token.id`.
    // Get the token ID to your server-side code for use.
  }
});

document.getElementById('customButton').addEventListener('click', function(e) {
  // Open Checkout with further options:
  handler.open({
    name: '',
    description: '2 widgets',
    amount: 2000
  });
  e.preventDefault();
});

// Close Checkout on page navigation:
window.addEventListener('popstate', function() {
  handler.close();
});
</script>

我试过这段代码,但它不起作用。有人能指出我正确的方向吗?

<form action="/create_subscription.php" method="POST">
      <script src="https://checkout.stripe.com/checkout.js"></script>
      <div id="stripe-demo" class="evo-button rounded cele">
      <span>Register</span>
      </div>

      <script>
      var handler = StripeCheckout.configure({
        key: "asdsdfasd3232",
        image: "img/logo.png",
        name: "",
        description: "Subscription for 1 month",
        panelLabel: "Sign Me Up!",
        amount: "2000",
        allowRememberMe: false
      });

      document.getElementById('stripe-demo').addEventListener('click', function(e) {
        handler.open();
        e.preventDefault();
      });

      window.addEventListener('popstate', function() {
        handler.close();
      });
      </script>
    </form>

【问题讨论】:

    标签: javascript php stripe-payments


    【解决方案1】:

    提交表单后,内容将发布到/create_subscription.php。我们可以看到/create_subscription.php 的内容吗?提交表单时的响应是什么,我们收到错误返回还是状态码 200?您可以访问 php / web 服务器日志吗?有输出吗?

    【讨论】:

    • create_subscription.php 永远不会被调用。结帐窗口关闭,没有显示错误。
    • 我对 Strip 流程不是很熟悉,但 IIRC 它使用 JS 检索令牌,然后发布带有令牌的表单以授权交易。尝试通过`window.addEventListener('popstate', function() { handler.close(); });`逻辑对来自条带的响应执行create_subscription
    • 这是一个好主意@Pheagey 我已经尝试为表单提供“target”的 id 和:window.addEventListener('popstate', function() { $("#target").提交(); handler.close(); });不幸的是,脚本没有被调用
    • Herm,如果不调用脚本,错误可能发生在执行链的早期。
    【解决方案2】:

    token 回调函数中,您需要执行任何必要的操作来将令牌提交到您的后端。

    通常,这是通过使用带有隐藏元素的表单元素来完成的,然后在回调中将隐藏元素的值设置为令牌 ID 并提交表单。

    您还可以从头开始动态创建表单,或触发 AJAX 请求,或任何其他适合您特定需求的方法。

    这是一个使用现有表单并从回调中设置隐藏元素值的自定义集成示例:https://jsfiddle.net/ywain/g2ufa8xr/

    【讨论】:

      【解决方案3】:

      查看Stripe custom checkout not Posting 上的帖子,你和我有同样的问题。希望对你有所帮助

      【讨论】:

        【解决方案4】:

        我刚刚完成了所有这些。所以我发现了一些提示 https://jsfiddle.net/user/ywain/fiddles/1/。在这里你应该看看https://jsfiddle.net/ywain/9zscyyhg/。 夏季时,您必须在 令牌:函数(令牌){ // 您可以使用token.id 访问令牌 ID。 // 获取token ID给你的服务端代码使用。

        Purchase 的提交只会触发 Stripe 模式支付表单。因此,从表格中必须有返回站点的方法。这必须通过额外的 javascript 代码来完成。

        【讨论】:

          【解决方案5】:

          希望这篇文章对您有所帮助。你可以参考这里https://gist.github.com/ziadoz/5101836

              <input 
                  type="submit" 
                  value="Pay with Card"
                  data-key="PUBLISHABLE STRIPE KEY"
                  data-amount="500"
                  data-currency="cad"
                  data-name="Example Company Inc"
                  data-description="Stripe payment for $5"
              />
          
              <script src="https://checkout.stripe.com/v2/checkout.js"></script>
              <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.js"></script>
              <script>
              $(document).ready(function() {
                  $(':submit').on('click', function(event) {
                      event.preventDefault();
                      var $button = $(this),
                          $form = $button.parents('form');
                      var opts = $.extend({}, $button.data(), {
                          token: function(result) {
                              $form.append($('<input>').attr({ type: 'hidden', name: 'stripeToken', value: result.id })).submit();
                          }
                      });
                      StripeCheckout.open(opts);
                  });
              });
              </script>
          

          `

          【讨论】:

          • 如何通过这个实现接收stripeEmail?
          【解决方案6】:

          感谢 Comdenz 这是我使用现有表单并调用我的服务器端代码来解决它的方式。

          <script src="https://checkout.stripe.com/checkout.js"></script>
          <script>
          var handler = StripeCheckout.configure({
           key: "your testing key",
            locale: 'auto',
            image: "image/directory",
            name: "Name",
            description: "your discription",
            panelLabel: "Click to make payment",
            allowRememberMe: false,
          
          
            token: function(token) {
              // Prevent user from leaving page
              window.onbeforeunload = function() {
                      return "";
                  }
          
              // Dynamically create a form element to submit the results
              // to your backend server
              var form = document.getElementById("payment-form");
              form.setAttribute('method', "POST");
              form.setAttribute('action', "//localhost/dubb/charge.php");
          
              // Add the token ID as a hidden field to the form payment-form
              var inputToken = document.createElement("input");
              inputToken.setAttribute('type', "hidden");
              inputToken.setAttribute('name', "stripeToken");
              inputToken.setAttribute('value', token.id);
              form.appendChild(inputToken);
          
              // Add the email as a hidden field to the form
              var inputEmail = document.createElement("input");
              inputEmail.setAttribute('type', "hidden");
              inputEmail.setAttribute('name', "stripeEmail");
              inputEmail.setAttribute('value', token.email);
              form.appendChild(inputEmail);
          
                  // Finally, submit the form
              document.body.appendChild(form);
          
              // Artificial 5 second delay for testing
              setTimeout(function() {
                  window.onbeforeunload = null;
                  document.forms["payment-form"].submit()
              }, 5000);
            }
          
          });
          
          document.getElementById('stripe-demo').addEventListener('click', function(e) {
            handler.open();
            e.preventDefault();
          });
          
          // Close Checkout on page navigation:
          window.addEventListener('popstate', function() {
            handler.close();
          });
          </script>
          

          有了这个,你就需要制作新的表单,只需使用 javascript 调用你现有的表单

          【讨论】:

            猜你喜欢
            • 2021-05-29
            • 2018-01-08
            • 2020-09-16
            • 2019-03-05
            • 2011-10-30
            • 2021-03-13
            • 1970-01-01
            • 2016-10-03
            • 2012-02-17
            相关资源
            最近更新 更多