我有一个使用Lumen作为后端的移动应用程序(Flutter)。付款时,我使用Stripe SDK for PHP。
成功收取费用后,我需要向用户发送发票。我知道它是这样工作的:
customer_id
customer_id
创建发票项目我有两个功能:
public function addCard(Request $request) {
$user = User::find($user->id);
if (is_null($user->stripe_id) || empty($user->stripe_id)) {
$customer = \Stripe\Customer::create([
"name" => $user->name,
"email" => $user->email,
"description" => "Test",
]);
$user->stripe_id = $customer->id;
$user->save();
}
}
public function charge(Request $request) {
$charge = \Stripe\Charge::create([
'amount' => 2000,
'currency' => 'eur',
'customer' => $user->stripe_id,
'description' => 'Some description',
]);
\Stripe\InvoiceItem::create([
'customer' => $user->stripe_id,
'amount' => 2500,
'currency' => 'usd',
'description' => 'One-time setup fee',
'auto_advance' => true,
]);
}
它添加用户但没有信用卡详细信息。我应该传递哪些参数,以便Stripe可以为指定用户创建卡令牌?由于它是一个移动应用程序,因此我不能为此目的使用Stripe.js。
在调用charge函数的那一刻,我收到错误消息:
无法向没有有效卡的客户收费
这是我的第一个使用支付网关的项目...因此,非常感谢您的帮助。
答案 0 :(得分:0)
请澄清一下,Invoice
是您将发送给客户并要求客户支付发票0的东西。
如果您已经向客户收费,则不会将发票发送给客户,因为这最终会使您的客户加倍收费。相反,您应该根据自己创建的费用向客户发送receipt
1。
说了所有
要通过Stripe接受客户付款,您可以执行以下操作
1。创建一次性费用
步骤1:创建代表信用卡信息的令牌。这通常涉及您的客户访问您的应用程序/网站并查看信用卡表格 您可以使用Stripe Element,这是一个显示信用卡表格的preBuild安全用户界面
...
...
var token = stripe.createToken(cardElement);
...
第2步:获得令牌后,将其传递给PHP服务器端并调用Stripe Charge API
// see https://stripe.com/docs/api/charges/create?lang=php#create_charge-source
$charge = \Stripe\Charge::create([
'amount' => 2000,
'currency' => 'eur',
'source' => $token->id,
'description' => 'Some description',
]);
按照step by step guide尝试上述操作
2。保存信用卡给客户,以后再向客户收费
这与情况1非常相似,除了现在您要向客户保存卡并向客户收费。如果您想重复使用卡片,例如,token
默认为只能使用。您稍后要向客户收费以进行某些订阅,则需要先将卡保存为Attach Card to customer,然后才能重新使用令牌/卡。
步骤1:创建与上面相同的令牌
...
var token = stripe.createToken(cardElement);
...
第2步:将令牌传递到PHP服务器端,并将卡保存给客户
// Create a new customer with the token
// https://stripe.com/docs/api/customers/create#create_customer-source
$customer = \Stripe\Customer::create([
"name" => $user->name,
"email" => $user->email,
"description" => "Test",
"source" => $token->id,
]);
// Or you could attach it to an existing customer
\Stripe\Customer::createSource(
'cus_xxxx',
[
'source' => $token->id,
]
);
第3步:用保存的卡向客户收费。
// When charging this customer, it will use the default card saved at step 2
$charge = \Stripe\Charge::create([
'amount' => 2000,
'currency' => 'eur',
'customer' => $customer->id,
'description' => 'Some description',
]);
按照step by step guide尝试上述操作
上面显示了使用Stripe API + Stripe Element向客户信用卡付款的最简单方法
这只是起点。熟悉以上概念后,您可以进一步探索 1. PaymentMethod和PaymentIntent 这些是Stripe推荐的新API,但基于收费API构建 https://stripe.com/docs/payments/accept-a-payment https://stripe.com/docs/payments/save-and-reuse
此功能强大的计费工具,可让您使用已保存的卡或向客户发送发票进行付款来向客户收费。
答案 1 :(得分:0)
查看本文(link)。您可以发送交易的收据(而不是发票)
在您的情况下,我认为您需要使用以下内容通过服务器发送电子邮件
stripe.paymentIntents.create(
{
amount: 1000,
currency: USD,
payment_method: clonedPaymentMethod.id,
confirmation_method: 'automatic',
confirm: true,
receipt_email: 'abc@cde.com',
}, {
stripeAccount: stripeVendorAccount
},
function(err, paymentIntent) {
// asynchronously called
const paymentIntentReference = paymentIntent;