我读过这篇文章Stripe - 如何处理订阅免费计划,并且在注册时不需要信用卡,并且发现它非常有帮助,但我仍然有一个问题.
我的应用程序有两个付费计划:'基本'和'专家'.注册用户不选择计划,也不输入卡详细信息.基本上,用户在前14天使用通用试用计划,在此试用期结束后,用户必须选择付费计划并输入卡详细信息.
处理此试验的最佳方法是什么?我在想这些方法:
a)由于我不知道用户在试用期满后将选择哪种付费方案,我无法使用Stripe试用期功能.
来自Stripe Docs:创建计划时,您可以设置的其中一个选项是试用期将持续多长时间.如果您确实选择提供试用期,则在试用期结束之前,您注册的客户将不会首次收费.
我想创建一个名为'trial'的条纹计划,金额设置为0.00美元,试用期为14天,间隔为2周.通过这种方式,我将能够收听Stripe webhook customer.subscription.updated以确定试用版是否已过期并相应地更新数据库.我不确定这是否是一个好方法,因为它将为此试用计划生成发票(它被设置为订阅).我喜欢Stripe webhooks.有没有更好的方法呢?
b)另一种选择是只在Stripe中有付费计划并在试用期到期时创建Stripe订阅并且用户必须选择计划并输入卡详细信息.这样我就不会使用Stripe检查试用版是否过期.我将检查用户登录以确定试用版是否仍处于活动状态.
谢谢你的帮助!
在我的Grails服务中,我有如下代码:
def createCharge(chargeParams) {
try {
def charge = Charge.create(chargeParams)
} catch (CardException e) {
throw e
}
}
Run Code Online (Sandbox Code Playgroud)
从我的控制器我执行以下操作:
try {
service.createCharge(chargeParams)
} catch(CardException e) {
}
Run Code Online (Sandbox Code Playgroud)
但是,我的控制器没有捕获重新抛出的CardException.如果我通过以下方法在RuntimeException中包装CardException:
throw new RuntimeException(e)
Run Code Online (Sandbox Code Playgroud)
和/或从catch中删除签名只是捕获(e)而不键入它,它可以工作,但是我从异常中丢失了一些信息,比如消息.
作为注释,CardException是一个Exception,而不是RuntimeException.我不确定这是否重要.
我想要的两件事:
a)我希望只有在API调用成功时才能在db中保存记录
b)我只想在db记录成功保存的情况下执行API调用
目标是使本地(在DB中)存储的数据与Stripe上的数据保持一致.
@payment = Payment.new(...)
begin
Payment.transaction do
@payment.save!
stripe_customer = Stripe::Customer.retrieve(manager.customer_id)
charge = Stripe::Charge.create(
amount: @plan.amount_in_cents,
currency: 'usd',
customer: stripe_customer.id
)
end
# https://stripe.com/docs/api#errors
rescue Stripe::CardError, Stripe::InvalidRequestError, Stripe::APIError => error
@payment.errors.add :base, 'There was a problem processing your credit card. Please try again.'
render :new
rescue => error
render :new
else
redirect_to dashboard_root_path, notice: 'Thank you. Your payment is being processed.'
end
Run Code Online (Sandbox Code Playgroud)
以上内容将起作用,因为如果记录(第5行)没有保存,则其余代码不会执行.
但是如果我需要在@paymentAPI调用之后保存的对象,那该怎么办呢,因为我需要@payment使用API结果中的值来分配对象.举个例子:
@payment = Payment.new(...)
begin
Payment.transaction do
stripe_customer = Stripe::Customer.retrieve(manager.customer_id) …Run Code Online (Sandbox Code Playgroud) ruby transactions ruby-on-rails stripe-payments ruby-on-rails-4
我使用的是磁条支付服务,与stripe和stripe_event宝石.到目前为止一切都很好 - 他们工作得很好
我想使用stripe_eventwebhooks监听器来执行一系列操作.例如,当Stripe发送webhook通知应用新订阅时,我想将该订阅添加到subscriptions表中,向新用户发送电子邮件,建议管理员等.
在github上的(非常缺乏的)stripe_event 文档中,他们说要使用该call方法订阅一个对象,并将示例显示为
class CustomerCreated
def call(event)
# Event handling
end
end
Run Code Online (Sandbox Code Playgroud)
但是,它们不显示此代码所在的位置(将放置哪个文件)或如何调用它config/initializers/stripe.rb.
有人能提供一个如何使用这些的明确例子吗?
我已经构建了一个使用条纹checkout html表单元素的应用程序.它似乎在Android(cordova)和浏览器上运行良好.
在ios cordova上,弹出窗口暗淡效果发生了5秒,然后恢复正常(没有弹出窗口打开),在safari上,结帐表单在不同的选项卡上打开而不是弹出窗口.
表单也是自定义的,但即使是基本表单也不起作用.
请帮忙!
我正在使用Stripe的简单'Checkout',是否有详细说明接受和返回的数据的最大长度的规范,例如以下数据:
customer id
description
risk level
address_line1
etc
Run Code Online (Sandbox Code Playgroud) 我正在使用Stripe配置支付网关,我有一个基本结构,你可以看到你可以在javascript代码中添加样式,但不能构造HTML form以下代码的内容:
$(document).ready(function() {
var stripe = Stripe('pk_test_lf3erqZAzfBDiiNp1wfFkxgv');
var elements = stripe.elements();
var style = {
base: {
color: '#303238',
fontSize: '16px',
fontFamily: '"Open Sans", sans-serif',
fontSmoothing: 'antialiased',
'::placeholder': {
color: '#CFD7DF',
},
},
invalid: {
color: '#e5424d',
':focus': {
color: '#303238',
},
},
};
var card = elements.create('card', {style: style});
card.mount('#card-element');
});Run Code Online (Sandbox Code Playgroud)
<script src="https://code.jquery.com/jquery-2.0.2.min.js"></script>
<script src="https://js.stripe.com/v3/"></script>
<form action="charge.php" method="post" id="payment-form">
<div class="form-row">
<label for="card-element">
Credit or debit card
</label>
<div id="card-element">
<!-- a …Run Code Online (Sandbox Code Playgroud)我已使用https://stripe.com/docs/stripe-js/elements/ payment-request-button 上的 stripe 文档中的 Stripe Payment Request Button HTML 代码将 Google Pay 按钮合并到我的 UI 上,但 stripe 组件未在 UI 上呈现。
我使用的是 Windows 10 计算机,并通过 https 服务器为我的应用程序提供服务,我从 Stripe Docs 获取的 HTML 代码在开发人员控制台上没有显示任何错误或异常,iframe 组件可以在“元素”选项卡上看到,但是该按钮未在 UI 上呈现。
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Google Pay Payment</title>
</head>
<body>
<h1>This is a sample payment page using Stripe</h1>
<label for="card-element">
Credit or debit card
</label>
<form action="{{ url_for('pay')}}" method="post" id="payment-form">
<meta name="viewport" content="width=device-width, initial-scale=1" />
<div id="payment-request-button">
<!-- A Stripe Element will be inserted here. …Run Code Online (Sandbox Code Playgroud) 再会,
我正在做一个涉及 laravel 收银员的项目。我想让用户能够更新他们的订阅数量并立即收费(我已经能够实现,使用下面的代码)
$user = Auth::user()
$user->subscription('main')->incrementAndInvoice(10000);
Run Code Online (Sandbox Code Playgroud)
与预期的一样,返回的发票不包含指示更改的描述,而是发票描述为空白。但是当我检查条纹上的事件数据时,有两个描述[见下图]
上图显示了当前订阅数量为 5000 件但增加到 15000 件的订阅计划的用户。有没有办法在生成的发票中包含这些描述。
在我检查了incrementAndInvoice()方法之后,它只接受两个参数(1.count, 2.Plan),如下所示;
没有像我们对charge()方法那样包含描述的选项。有什么解决方法吗?任何正确方向的想法或指示将不胜感激。
提前感谢您的帮助。
假设我让客户订阅一项服务,我认为有两个事件我需要了解:
Stripe 的事件太多,很难知道该听哪一个:
invoice.paid- “每当发票付款尝试成功时就会发生”
charge.succeeded- “在创建新费用时发生”(那么有什么区别??)
invoice.payment_succeeded- “每当发票付款尝试成功时就会发生。”
customer.subscription.created- “每当客户注册新计划时就会发生。”
现在我知道单个 API 调用可能会发生一些事件,但是,
What should a developer listen to in order to know that his user successfully subscribed, or failed ? 与有何invoice.paid不同charge.succeeded?与invoice.payment_succeeded那些有何不同?
太乱了,我只需要得到一个是或否。我阅读了 API https://stripe.com/docs/api/events/types
stripe-payments ×10
ruby ×2
webhooks ×2
cordova ×1
exception ×1
google-pay ×1
grails ×1
ios ×1
javascript ×1
jquery ×1
laravel ×1
php ×1
transactions ×1