基于表单公钥

时间:2016-04-06 16:30:44

标签: php stripe-payments expressionengine

我使用Stripe Checkout在我的网站上创建一个付款表单,该付款表单需要使用3个单独的Stripe帐户,基于单个表单中的下拉列表选择。

在HTML / JS方面,我已成功动态设置Stripe付款的公钥。

在PHP方面,我想根据提交的公钥设置密钥。

除了明显的问题是这样做是否安全之后,PHP代码会是什么样子?

这是我目前的参考:https://stripe.com/docs/checkout/php

以下是我对PHP代码的想法。如果我的直觉不对,也要欣赏更好的解决方案。

<?php
require_once('vendor/autoload.php');

$stripeStore1 = array(
  "secret_key"      => "...",
  "publishable_key" => "..."
);
$stripeStore2 = array(
  "secret_key"      => "...",
  "publishable_key" => "..."
);
$stripeStore3 = array(
  "secret_key"      => "...",
  "publishable_key" => "..."
);
// if form name='key' == a
\Stripe\Stripe::setApiKey($stripeStore1['secret_key']);
// if form name='key' == b
\Stripe\Stripe::setApiKey($stripeStore2['secret_key']);
// if form name='key' == c
\Stripe\Stripe::setApiKey($stripeStore3['secret_key']);
?>

以下是我的JS代码的外观。

$('#customButton').on('click', function(e) {
    // Open Checkout with further options
    if (validateForm()) {
        var store = selectStore();
        var handler = StripeCheckout.configure({
            key: store.testKey, // toggle Stripe mode here
            name: store.name,
            panelLabel: 'Pay {{amount}}',
            token: function(token) {
              // Use the token to create the charge with a server-side script.
              // You can access the token ID with `token.id`
            }
        });
        handler.open({
            zipCode: true,
            amount: 1500
        });
    }
    e.preventDefault();
});

1 个答案:

答案 0 :(得分:1)

你的直觉对我来说非常合适。

由于看起来您正在使用Checkout(它负责使用stripe.js在客户端提交卡号,然后在代码中为您提供令牌),您的Javascript需要将公钥更改为与相应帐户对应的公钥。生成令牌(并从stripe.js返回到您的代码)之后,将其传递给PHP脚本,同时识别您使用的Stripe帐户,然后PHP脚本使用适当的秘密执行实际收费关键在后端。

我会在那里添加一些东西来处理来自你的Javascript的无效标识符,但最终(根据我对stripe.js的理解),令牌只能对应一个帐户。如果a = ["the red fox", "the blue fox", "the green fox", "the yellow fox", "the red rabbit", "the yellow rabbit"] b = ["fox", "rabbit"] c = ["red", "blue"] d = set([e for e in a for f in b if f in e]) - set([e for e in a for f in c if f in e]) for d in d: print d = $_POST['key']并且您无法使用&#34; a&#34;的密钥找到令牌。帐户,请确保您妥善处理。