我对如何使用Stripe处理订阅+费用付款感到有些困惑,
这是我得到的:
HTML:
<form id="req" action="/thank-you" method="post">
<script
src="https://checkout.stripe.com/checkout.js" class="stripe-button"
data-key="pk_test_RrE21sY9Xbtwq9ZvbKPpp0LJ"
data-name="Wizard.Build Hosting Package"
data-description=""
data-image="https://stripe.com/img/documentation/checkout/marketplace.png"
data-locale="auto"
data-currency="usd">
</script>
...
谢谢你的页面:
require_once('lib-stripe/init.php');
// create api key
\Stripe\Stripe::setApiKey("sk_TESTING");
// create customer
$customerO =\Stripe\Customer::create(array(
"email" => $_POST["e"]
));
$customer = $customerO->jsonSerialize();
//var_dump($customer);
//create subscription (Package Bronze, Silver or Gold)
$subscriptionO = \Stripe\Subscription::create(array(
"customer" => $customer["id"],
"items" => array(
array(
"plan" => $_POST["pack"],
),
)
));
$subscription = $subscriptionO->jsonSerialize();
//var_dump($subscription);
//create invoice (3rdparty cost)
$invoiceO = \Stripe\Invoice::create(array(
"customer" => $customer["id"],
"amount" =>$p3price,
"currency" => "usd",
"description" => "3rdp Cost",
"subscription" => $subscription["id"]
));
$invoice = $invoiceO->jsonSerialize();
//var_dump($invoice);
我明显错过了整个过程的运作方式......
我将填写电子邮件字段,但如何以弹出窗口形式请求每月重新安装设置费+订阅?
理想情况下,工作流程如下:
我的网站页面: 用户填写姓名,电子邮件,项目名称[需要此元数据],商品价格,包裹名称[需要此元数据],包价
点击提交按钮, 条纹弹出窗体显示预先填入电子邮件,用户同意打包每月付款+项目价格,用户输入卡信息, 用户提交条带形式,
用户现在收取第一个月的包裹+商品价格,包裹将自动每月付款。
返回包含所有元数据,价格,包裹等的网址,包含密码或某种安全表单字段,然后我自动从返回网址数据处理订单,
请帮助,谢谢社区!
答案 0 :(得分:3)
我想我可以指导你完成这个过程,你必须遵循非常简单的步骤并检查一切是否完美。
使用Stripe信息中心或Stripe API(下面的PHP代码示例)
创建计划\Stripe\Stripe::setApiKey("<YOUR SECRET KEY>");
$plan = \Stripe\Plan::create([
'product' => {'name' => 'Plan name'},
'nickname' => 'Plan code',
'interval' => 'month',
'currency' => 'usd',
'amount' => 10,
]);
使用JS / PHP等在Stripe中创建客户并保存id以供参考。(下面的PHP代码示例)
\Stripe\Stripe::setApiKey("<YOUR SECRET KEY>");
$customer = \Stripe\Customer::create([
'email' => 'customer@example.com',
]);
此调用的响应将为在条带
创建的客户提供json{
"id": "<UNIQUE ID>",
...
}
您需要将id保存在变量或数据库中
订阅客户以获取计划。(下面的PHP示例代码)
\Stripe\Stripe::setApiKey("<YOUR SECRET KEY>");
$subscription = \Stripe\Subscription::create([
'customer' => '<UNIQUE ID>',
'items' => [['plan' => '<PLAN ID>']],
]);
答案 1 :(得分:1)
生成计划代码或使用管理面板并将计划ID放到订阅方法中。 确保如果您使用管理面板生成计划ID,那么它将仅使用实时密钥运行并使用代码运行生成的计划ID运行两个密钥..
$plan = \Stripe\Plan::create([
'product' => {'name' => 'Basic Product'},
'nickname' => 'Basic Monthly',
'interval' => 'month',
'currency' => 'usd',
'amount' => 0,
]);
答案 2 :(得分:1)
在要点中,您应该实施基本的Stripe Charge API流程(创建客户,创建费用等),并在付款的退货承诺中调用订阅计划ID,将其附加到用户(成功的收费)。
您不必以编程方式创建此计划(除非您需要为每个客户动态创建唯一计划),您可以通过松弛仪表板,用户计划部分来实现。您只需要打电话给&#34;订阅&#34;顾客对你的计划。
在成功创建此用户后,首先创建用户&#34; charge&#34;呼叫传递给该客户的唯一ID,稍后当成功收费时(在您的成功回调而不是错误1中)使用您之前创建的计划ID调用订阅呼叫。
当您使用测试模式并使用此设置付款时,请查看付款详细信息(确保仪表板已切换到测试模式)并且您将看到此费用并且用户已附加订阅计划,将会发生什么是条带将在此订阅期结束时再次尝试收费(您可以通过仪表板,每周/每月计划等设置此项),最好使用条纹自己的工具进行测试(您不需要&#39 ; t必须等待这段时间进行测试,在相关的api文档部分查找)
如果您需要有关代码的帮助,请告诉我,但是一旦您了解了我上面解释过的简单流程,就可以非常直接地了解api文档。
信息中心网址:https://dashboard.stripe.com/(切换&#34;查看测试数据&#34;打开以查看测试付款详情)
API调用ref: https://stripe.com/docs/api#create_customer https://stripe.com/docs/api#create_charge https://stripe.com/docs/api#create_subscription(您不必通过api执行此操作,从仪表板执行此操作更容易)
看一下我的测试代码中的代码段,我使用的是NodeJS,但你也可以在前端使用你的php项目,只需在入门文档的前端设置条带
stripe.customers.create({
description: "NR user twitter: " + req.body.twusername + ", job title being paid for: " + req.body.jobRawTitle,
source: req.body.token,
email: req.body.email
}, function(err, customer) {
if (err) {
// bad things
console.log("DEBUG payment charge error: " + JSON.stringify(err));
} else {
//update user with given Email
// Charge the user's card:
return stripe.charges.create({
amount: 29900, //the last 2 0s are cents
currency: "usd",
customer: customer.id,
description: "Jobs 1 month paid for nextreality job titled:" + req.body.jobRawTitle
}, function(err, charge) {
if (err) {
// bad things
console.log("DEBUG payment charge error: " + JSON.stringify(err) );
console.log("charge: "+ charge);
} else {
// successful charge
return stripe.subscriptions.create({
customer: customer.id,
items: [
{
plan: "jobs_monthly",
},
],
}, function(err, subscription) {
// asynchronously called
console.log("DEBUG payment subscription error: " + err + ' subs:' + JSON.stringify(subscription) );
return Response(req, res, {});
});
}
});
}
});