ios 向Stripe提交付款请求时出现“无此类令牌”错误

w9apscun  于 2023-01-10  发布在  iOS
关注(0)|答案(6)|浏览(210)

我正在使用Stripe API设置支付功能,允许用户在iPad上登录Stripe账户,接受任何人的支付。为此,我使用Stripe Connect让用户登录并保存他们的账户ID,然后使用STPPaymentCardTextField获取信用卡详细信息。然后使用Stripe iOS SDK提交一张卡片(测试卡信息为4242...)并通过createTokenWithCard取回令牌。这将成功返回令牌。此时,我需要提交该令牌沿着目标帐户ID(在用户登录后提供给应用程序)和其他信息(货币,金额等)到我自己的服务器提交付款到条纹。我已经验证信息正在提交并转发到条纹,但条带返回错误:

{ type: 'invalid_request_error',
app[web.1]:      message: 'No such token: tok_13vxes2eZkKYli2C9bHY1YfX',
app[web.1]:      param: 'source',
app[web.1]:      statusCode: 400,
app[web.1]:      requestId: 'req_7AIT8cEasnzEaq' },
app[web.1]:   requestId: 'req_7AIT8cEasnzEaq',
app[web.1]:   statusCode: 400 }

如果我们直接提交信用卡信息,完全避免使用令牌,则付款成功。此令牌有问题,我们不确定失败的原因。这里可能出现了什么问题?

[[STPAPIClient sharedClient] createTokenWithCard:card completion:^(STPToken *token, NSError *error) {
    //submit tokenId and other info to 'charge' endpoint below
}

NodeJS :

app.post('/charge', (req, res, next) => {
  stripe.charges.create({
    amount: req.body.amount,
    currency: req.body.currency,
    source: req.body.token,
    description: req.body.description,
    destination: req.body.destination
  }, (err, charge) => {
    if (err) return next(err)
    res.json(charge)
  })
})
s6fujrry

s6fujrry1#

您确定您在服务器和客户端上使用相同的API密钥吗?
您的服务器应使用您的(live/test)密钥,iOS应用应使用您的(live/ test)可发布密钥,如Stripe Testing上所述。

vm0i2vca

vm0i2vca2#

我的测试环境一直面临着同样的问题,我一直在做的错误是,我添加了Stripe收到的令牌,如下所示来源:'tok_18nnwSJ6tVEvTdcVs3dNIhGs',但对于测试环境,我们必须使用源代码:“托克签证”
下面是Stripe提供的测试源列表。https://stripe.com/docs/testing#cards
它为我创造了客户,让我知道它是否也帮助了其他人。

ars1skjm

ars1skjm3#

接受的答案对我不起作用。我正在使用客户端和服务器的正确密钥,但问题仍然存在。我也在从iOS发送源代码到服务器,基于Stripe示例RocketRides,它正在发送信用卡的源ID,即"card_xxx",这是行不通的。您必须在服务器端为调用添加"customer"属性。
例如:(Python)

stripe.Charge.create(amount=1000, currency='usd', source="card_xxxxx", **customer**='cus_xxxx', application_fee=600,destination={'account': 'acct_xxxx'})
k10s72fa

k10s72fa4#

这两个答案对我都不管用。
我试着使用Stripe的PHP库来对我已经存档的卡进行收费...

$charge = \Stripe\Charge::create([
    'amount' => 1000,
    'currency' => 'gbp',
    'card' => 'card_xxx',
    'description' => 'Payment for Sam',
]);

我收到了上面的没有这样的令牌错误。
为了让它工作,我还必须提供客户ID像这样...

$charge = \Stripe\Charge::create([
    'amount' => 1000,
    'currency' => 'gbp',
    'customer' => 'cus_xxx',
    'card' => 'card_xxx',
    'description' => 'Payment for Sam',
]);
2w3rbyxf

2w3rbyxf5#

1.首先检查API键是否在前端和后端相同。
1.如果您正在使用测试API密钥,则必须传递source:'tok_visa'而不是您的卡源令牌源:“令牌_kb3kb23k2bk32bk3b2”.

jyztefdp

jyztefdp6#

我有一个相同的问题,而我正试图交换到新的秘密API密钥和公共API密钥。我发现重新启动服务器和客户端的解决方案。在共同点,我们保存的条纹密钥到env文件。只有当我们重新启动项目的env文件重新加载。希望能帮助你。

相关问题