条带:验证可发布和秘密API密钥

spg*_*spg 10 validation api-key stripe-payments

我正在建立一个允许我们的用户销售音乐节目门票的网络应用程序.为了处理购票者和节目发起人之间的付款,我使用Stripe.基本上,节目发起人在我的应用程序上创建他的节目页面,用户可以购买此节目的门票.

为了创造一个节目,对于教唆填写一个表格(显示的名字,显示的日期,其中显示将发生,将发挥什么带等)这种形式也需要展示始作俑者同时提供了可发布和秘密条纹键.我的应用程序使用这两个令牌来检索信用卡信息(在客户端)和处理付款(在服务器端).

问题是,我想确保show instigators提供有效和现有的Stripe键.我不希望我的用户偶然发现付款错误,因为展示发起人没有提供有效的Stripe密钥.

所以,我的问题是: 我如何验证Publishable和Secret密钥是否有效且存在?实现这一目标的最佳策略是什么?谢谢!

Eti*_*tin 9

得到它了!

要验证您的可发布密钥,您只需要使用cURL向stripe请求新令牌.如果给定密钥无效,则响应将包含以"提供的无效API密钥"开头的错误消息.

这是一个用PHP编写的示例:

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, "https://api.stripe.com/v1/tokens");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "card[number]=4242424242424242&card[exp_month]=12&card[exp_year]=2017&card[cvc]=123");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_USERPWD, $publishableKey . ":");

$response = json_decode(curl_exec($ch),true);

if( curl_errno($ch) ){
    echo 'Error:' . curl_error($ch);
}
curl_close ($ch);

if(substr($response["error"]["message"],0, 24 ) == "Invalid API Key provided"){
    echo "Invalid API Key provided";
}
Run Code Online (Sandbox Code Playgroud)

验证密钥的想法相同.

  • @AdamParkin/v1/tokens只接受POST,而不接受GET请求.你也需要指定`curl_setopt($ ch,CURLOPT_POST,true)`. (2认同)
  • 不适用于帖子 $url = 'https://api.stripe.com/v1/tokens?key='.$publishableKey; "error": { "type": "invalid_request_error", "message": "您必须提供卡、客户、pii 数据或银行帐户才能创建令牌。" } (2认同)
  • 我使用此代码检查公钥和私钥并且它工作正常,我删除了语句“CURLOPT_POSTFIELDS”,这样它适用于“测试”和“实时”环境 (2认同)

Dom*_*nic 6

验证密钥很简单,只需使用服务器端的任何命令调用 Stripe API 即可。

但是对于公钥......我找到了一种使用 Stripe.js 的方法:

let stripe = Stripe( <public key to test> );
setTimeout( ()=>{
    stripe.createToken('pii', {personal_id_number: 'test'})
        .then( result =>{
            if( result.token )
               // public key is valid :o)
            else 
              // nope !
        })
}, 300 )
Run Code Online (Sandbox Code Playgroud)

请注意调用 stripe.createToken() 之前的超时。如果你不这样做,createToken() 返回的承诺将永远不会回来。

更新:刚刚收到 Stripe 的确认;这是一种有效且可接受的方法。

  • 请注意,当然您需要将 include 放在此代码之前。&lt;script src="https://js.stripe.com/v3/"&gt;&lt;/script&gt; (2认同)

Cod*_*rus 2

我不知道有任何记录的 api 调用可以专门用于验证密钥。这是您可以尝试的建议:

要求您的合作伙伴提供有效的信用卡,并告知他们,为了验证他们的 Stripe 密钥,您将向他们的卡收取 0.50 美元的费用,该费用将立即退还。

作为表单验证的一部分,当给出两个密钥时,提交一个隐藏表单,其中包含创建卡令牌所需的所有数据。您应该能够检查创建卡令牌响应处理程序中的响应并确定可发布密钥是否有效。

如果您从条带服务器收到包含卡令牌的成功响应,请右转并提交 0.50 美元的测试费用(最低费用金额)。

确保您正确捕获所有条纹异常。我相信使用无效的密钥,您应该捕获Stripe_InvalidRequestError。如果抛出异常,您可以向用户报告。

如果没有出现任何错误,将进行收费。由于您不想向合作伙伴收取费用,因此您需要从 stripe 响应中捕获费用 id 并立即退还费用