使用R Shiny App集成Stripe Checkout

时间:2014-03-12 20:49:42

标签: r stripe-payments shiny

[与R闪亮的Google小组交叉发帖 - 我等了24小时]

如果我只是将其保存为checkout并使用Firefox打开它,以下代码将正常呈现Stripe中的.html按钮:

<h1> this is a test </h1>
<form action="" method="POST">
  <script
    src="https://checkout.stripe.com/checkout.js" class="stripe-button"
    data-key="pk_test_qdunoptxl9KNXR5qk7WdtkVg"
    data-amount="2000"
    data-name="Demo Site"
    data-description="2 widgets ($20.00)"
    data-image="/128x128.png">
  </script>
</form>

但将其置于R Shiny应用程序中,如此:

output$StripeCheckOut <- renderUI({
  div(class="span6", 
     div(HTML('
                <h1> this is a test </h1>
                <form action="" method="POST">
                  <script
                   src="https://checkout.stripe.com/checkout.js" class="stripe-button"
                   data-key="pk_test_qdunoptxl9KNXR5qk7WdtkVg"
                   data-amount="2000"
                   data-name="Demo Site"
                   data-description="2 widgets ($20.00)"
                   data-image="/128x128.png">
                 </script>
               </form>
            ')))

将导致This is a Test文字下方的空白字段。

似乎R Shiny在dom渲染页面后不允许Javascript动态加载按钮。

如何在R Shiny App中包含基本Stripe Checkout按钮?

2 个答案:

答案 0 :(得分:4)

如果我包括:

 HTML('
        <h1> this is a test </h1>
        <form action="" method="POST">
          <script
           src="https://checkout.stripe.com/checkout.js" class="stripe-button"
           data-key="pk_test_qdunoptxl9KNXR5qk7WdtkVg"
           data-amount="2000"
           data-name="Demo Site"
           data-description="2 widgets ($20.00)"
           data-image="/128x128.png">
          </script>
        </form>
       ')
直接在ui.r内部,它可以工作 - 但是将它放在一个条件面板中将不允许加载Stripe JS。

相反,我使用了html data-display-if条件:

<div align="center" data-display-if="output.Unpaid==True">
...
</div>

一切正常!

这也很好,因为它允许您将条件绑定到有光泽的output对象vs input对象,这有时可以更容易使用。


进一步测试后更新

事实证明我的编辑不太有用;在Stripe Checkout JS加载后,它阻止我的Shiny App与页面上的其他JS元素交互。

似乎与Stripe JS和内部Shiny JS存在一些冲突......


新更新

Shiny(0.9.1)的最新版本解决了这个问题。 它似乎是js head和singletons的东西,已在最新版本中更新过。

这不再是问题, 你现在可以直接使用Stripe闪亮了。

答案 1 :(得分:0)

好的,这在评论中也不起作用(本周评论中的代码运气不好)。您是否尝试将其包含在明确的tags$script电话中?

tags$script(src="https://checkout.stripe.com/checkout.js", 
            class="stripe-button", 
            "data-key"="pk_test_qdunoptxl9KNXR5qk7WdtkVg",
            "data-amount"="2000",
            "data-name"="Demo Site",
            "data-description"="2 widgets ($20.00)",
            "data-image"="/128x128.png")

构建整个表单以查看它是否有帮助可能是有利的。