使用 Stripe Connect 和 stripe-node 对共享客户收费
Using Stripe Connect with stripe-node to charge shared customer
我正在努力寻找正确的语法来向客户收取费用,以让使用 Stripe Connect 的已连接用户受益。我正在使用条带节点 api。我已经尝试了似乎有一百种参数组合来创建电荷,none 对我有用。
我希望收费的客户已经添加为我(Connect 应用程序的)Stripe 帐户中的客户,并且我希望获得收费好处的用户已经连接到我的应用程序。一切顺利。完成这些步骤后,我会检索新费用的令牌,这似乎也很顺利。我叫:
Stripe.tokens.create(
{ customer: myCustomer },
connectedUserAccessToken,
function(error, token){
if (error){
return error;
} else {
return token;
}
}
);
哪个returns:
{ id: 'tok_15L16gLFEmuXszazTaVUA0ty',
livemode: false,
created: 1421280206,
used: false,
object: 'token',
type: 'card',
card:
{ id: 'card_15L16gLFEmuXszaz7VAu2ciH',
object: 'card',
last4: '8210',
brand: 'MasterCard',
funding: 'debit',
exp_month: 1,
exp_year: 2020,
fingerprint: 'ny39g9uj2lfhYA2H',
country: 'US',
name: null,
address_line1: null,
address_line2: null,
address_city: 'New York',
address_state: 'NY',
address_zip: '10003',
address_country: 'US',
cvc_check: null,
address_line1_check: null,
address_zip_check: null,
dynamic_last4: null,
customer: null },
client_ip: '99.99.9.99'
}
(Stripe 测试页面的卡片数据是假的)
当我尝试使用新令牌创建费用时出现问题。我将上面的对象分配给 var 令牌并调用:
Stripe.charges.create(
{ card: token.id },
function(error, result){
if (error){
return error;
} else {
return result;
}
}
);
这个returns:
[ Error: There is no token with ID tok_15L16gLFEmuXszazTaVUA0ty. ]
此响应对我来说毫无意义,因为如您所见,令牌 ID 与刚刚创建的 ID 匹配。 (我也看到令牌创建事件发布到我的 Stripe 日志中,因此它们被正确创建)。
如果我没有将 { card: token.id }
传递给 Stripe.charges.create()
,而是传递:
Stripe.charges.create(
token,
function(error, result){}
);
我收到:
[Error: [Error: Missing required param: currency]
这是有道理的,因为我没有向它传递收费货币或金额。但是当我尝试将这些附加参数作为选项传递时,例如:
Stripe.charges.create(
{ currency: user.currency, amount: transaction.amount },
token,
function(error, result){}
);
我收到:
[Error: Stripe: Unknown arguments ([object Object]). Did you mean to pass an options object? See https://github.com/stripe/stripe-node/wiki/Passing-Options.]
如果我反转参数并调用:
,我会收到同样的错误
Stripe.charges.create(
token,
{ currency: user.currency, amount: transaction.amount },
function(error, result){}
);
事实上,我以任何格式传递的任何选项似乎都被拒绝,并立即出现上面的相同错误。
我试过了:
Stripe.charges.create(
{ customer: token.id, currency: user.currency, amount: transaction.amount },
function(error. result){}
);
这导致:
[Error: No such customer: tok_15L16gLFEmuXszazTaVUA0ty]
我尝试通过 token.currency = user.currency
然后调用 Stripe.charges.create(token)
将货币直接添加到令牌本身。起初它似乎喜欢它,因为它返回了错误:
[Error: Missing required param: amount]
但是当我跟进并设置 token.currency = user.currency; token.amount = transaction.amount;
然后它拒绝整个对象,返回:
[Error: Received unknown parameters: id, livemode, created, used, object, type, client_ip]
我想不出它还在寻找什么。
我多次阅读 link 上面的内容,https://github.com/stripe/stripe-node/wiki/Using-Stripe-Connect-with-node.js,但它并没有帮助我符合语法。所以我暂时 运行 没有想法。感谢阅读。
使用他们的 publishable_key
为连接的用户创建卡令牌后,您需要使用他们的 access_token
代表他们创建费用。关于如何 collect fees 的文档对此进行了描述,代码如下所示:
// Get the credit card details submitted by the form
var token = request.body.stripeToken;
// Create the charge on Stripe's servers - this will charge the user's card
stripe.charges.create(
{
amount: 1000, // amount in cents
currency: "eur",
card: token,
description: "payinguser@example.com",
application_fee: 123 // amount in cents
},
ACCESS_TOKEN, // user's access token from the Stripe Connect flow
function(err, charge) {
// check for `err`
// do something with `charge`
}
);
我做了以下代码可能会有所帮助....
var stripe = require("stripe")("<STRIPE SECRET KEY>");
// var stripe = require("stripe")("sk_test_**********");
stripe.charges.create({
amount: <AMOUNT>,
currency: "<CURRENCY>", // EUR
source: "<CARD ID>", // card_1233442FFHDJSDFJM
customer:"<CUSTOMER ID>",// cus_E06YG6h0DFDFSDF
description: "<DESCRIPTION>" // CHARGE FOR ORDER #8487
},function(err, charge) {
if(err)
console.log('ERROR : '+err);
else
console.log('charge : '+JSON.stringify(charge,null,2));
});
我已经解决了这个问题。要使用 Stripe Connect 创建常规 paymentIntent,Node 中的语法是:
const connectedAccountStripeId = 'acct_something';
const paymentIntent = await stripe.paymentIntents.create({
payment_method_types: ['card'],
amount: price,
statement_descriptor: 'Statement for bank record',
currency: 'usd',
}, {
stripe_account: connectedAccountStripeId,
})
return paymentIntent;
注意:我使用 stripe_account
而不是文档 here 中的 stripeAccount
。在进行此更改之前,我收到以下错误。
[Error: Stripe: Unknown arguments ([object Object]). Did you mean to pass an options object? See https://github.com/stripe/stripe-node/wiki/Passing-Options.]
我正在努力寻找正确的语法来向客户收取费用,以让使用 Stripe Connect 的已连接用户受益。我正在使用条带节点 api。我已经尝试了似乎有一百种参数组合来创建电荷,none 对我有用。
我希望收费的客户已经添加为我(Connect 应用程序的)Stripe 帐户中的客户,并且我希望获得收费好处的用户已经连接到我的应用程序。一切顺利。完成这些步骤后,我会检索新费用的令牌,这似乎也很顺利。我叫:
Stripe.tokens.create(
{ customer: myCustomer },
connectedUserAccessToken,
function(error, token){
if (error){
return error;
} else {
return token;
}
}
);
哪个returns:
{ id: 'tok_15L16gLFEmuXszazTaVUA0ty',
livemode: false,
created: 1421280206,
used: false,
object: 'token',
type: 'card',
card:
{ id: 'card_15L16gLFEmuXszaz7VAu2ciH',
object: 'card',
last4: '8210',
brand: 'MasterCard',
funding: 'debit',
exp_month: 1,
exp_year: 2020,
fingerprint: 'ny39g9uj2lfhYA2H',
country: 'US',
name: null,
address_line1: null,
address_line2: null,
address_city: 'New York',
address_state: 'NY',
address_zip: '10003',
address_country: 'US',
cvc_check: null,
address_line1_check: null,
address_zip_check: null,
dynamic_last4: null,
customer: null },
client_ip: '99.99.9.99'
}
(Stripe 测试页面的卡片数据是假的)
当我尝试使用新令牌创建费用时出现问题。我将上面的对象分配给 var 令牌并调用:
Stripe.charges.create(
{ card: token.id },
function(error, result){
if (error){
return error;
} else {
return result;
}
}
);
这个returns:
[ Error: There is no token with ID tok_15L16gLFEmuXszazTaVUA0ty. ]
此响应对我来说毫无意义,因为如您所见,令牌 ID 与刚刚创建的 ID 匹配。 (我也看到令牌创建事件发布到我的 Stripe 日志中,因此它们被正确创建)。
如果我没有将 { card: token.id }
传递给 Stripe.charges.create()
,而是传递:
Stripe.charges.create(
token,
function(error, result){}
);
我收到:
[Error: [Error: Missing required param: currency]
这是有道理的,因为我没有向它传递收费货币或金额。但是当我尝试将这些附加参数作为选项传递时,例如:
Stripe.charges.create(
{ currency: user.currency, amount: transaction.amount },
token,
function(error, result){}
);
我收到:
[Error: Stripe: Unknown arguments ([object Object]). Did you mean to pass an options object? See https://github.com/stripe/stripe-node/wiki/Passing-Options.]
如果我反转参数并调用:
,我会收到同样的错误Stripe.charges.create(
token,
{ currency: user.currency, amount: transaction.amount },
function(error, result){}
);
事实上,我以任何格式传递的任何选项似乎都被拒绝,并立即出现上面的相同错误。
我试过了:
Stripe.charges.create(
{ customer: token.id, currency: user.currency, amount: transaction.amount },
function(error. result){}
);
这导致:
[Error: No such customer: tok_15L16gLFEmuXszazTaVUA0ty]
我尝试通过 token.currency = user.currency
然后调用 Stripe.charges.create(token)
将货币直接添加到令牌本身。起初它似乎喜欢它,因为它返回了错误:
[Error: Missing required param: amount]
但是当我跟进并设置 token.currency = user.currency; token.amount = transaction.amount;
然后它拒绝整个对象,返回:
[Error: Received unknown parameters: id, livemode, created, used, object, type, client_ip]
我想不出它还在寻找什么。
我多次阅读 link 上面的内容,https://github.com/stripe/stripe-node/wiki/Using-Stripe-Connect-with-node.js,但它并没有帮助我符合语法。所以我暂时 运行 没有想法。感谢阅读。
使用他们的 publishable_key
为连接的用户创建卡令牌后,您需要使用他们的 access_token
代表他们创建费用。关于如何 collect fees 的文档对此进行了描述,代码如下所示:
// Get the credit card details submitted by the form
var token = request.body.stripeToken;
// Create the charge on Stripe's servers - this will charge the user's card
stripe.charges.create(
{
amount: 1000, // amount in cents
currency: "eur",
card: token,
description: "payinguser@example.com",
application_fee: 123 // amount in cents
},
ACCESS_TOKEN, // user's access token from the Stripe Connect flow
function(err, charge) {
// check for `err`
// do something with `charge`
}
);
我做了以下代码可能会有所帮助....
var stripe = require("stripe")("<STRIPE SECRET KEY>");
// var stripe = require("stripe")("sk_test_**********");
stripe.charges.create({
amount: <AMOUNT>,
currency: "<CURRENCY>", // EUR
source: "<CARD ID>", // card_1233442FFHDJSDFJM
customer:"<CUSTOMER ID>",// cus_E06YG6h0DFDFSDF
description: "<DESCRIPTION>" // CHARGE FOR ORDER #8487
},function(err, charge) {
if(err)
console.log('ERROR : '+err);
else
console.log('charge : '+JSON.stringify(charge,null,2));
});
我已经解决了这个问题。要使用 Stripe Connect 创建常规 paymentIntent,Node 中的语法是:
const connectedAccountStripeId = 'acct_something';
const paymentIntent = await stripe.paymentIntents.create({
payment_method_types: ['card'],
amount: price,
statement_descriptor: 'Statement for bank record',
currency: 'usd',
}, {
stripe_account: connectedAccountStripeId,
})
return paymentIntent;
注意:我使用 stripe_account
而不是文档 here 中的 stripeAccount
。在进行此更改之前,我收到以下错误。
[Error: Stripe: Unknown arguments ([object Object]). Did you mean to pass an options object? See https://github.com/stripe/stripe-node/wiki/Passing-Options.]