我正在尝试在我的一个express.js路由中实现条带检出过程.要做到这一点,我有:
Order使用mongoose定义的模型 - MongoDB ODM我的步骤如下:
客户:
服务器:
order.status是created)order.status是accepted或failed取决于Stripe的响应)问题:如果在步骤2之后付款成功但是在步骤3中更新订单时发生错误(由于数据库服务器错误,中断或类似情况),有哪些适当的方法可以处理此故障情况并可能从中恢复?
我们正在管理一个使用Stripe的旧Rails应用程序,但我们的Stripe版本比当前API落后26个月.我们希望升级到当前的Stripe API,但由于许多更改会影响我们的系统,因此我们真的想要在更改我们的实时网站使用的实时API之前测试更改.
所以我有两个问题:
1)使用API时,我们非常依赖实时和测试模式之间的区别.有没有办法只升级测试模式API(不升级Live),这样我们可以识别并纠正任何破坏而不会实际破坏用户体验?
2)是否可以一次升级API一个版本,而不是一次升级,以使转换对我们来说更易于管理?
我已经浏览了文档,并且无法找到查询Stripe管理帐户的余额信息的方法.以下是用例:第三方通过启用Stripe Connect的平台设置托管帐户; 在一些顾客购买商品/服务后,我在他们的帐户上创建了一些收费对象(所以他们的余额现在是积极的); 现在他们想要支付但我想在发出转账之前查询他们的余额,以确保他们不会要求比他们的帐户更多.
当然我错过了一些明显的东西.提前致谢.
如果我设置一个Stripe Webhook来发送请求,http://my.website.io但由于某种原因,我的服务器当时关闭或以某种方式无法处理请求,Stripe会重试请求吗?或者我是否需要负责轮询它们以确保我的数据副本是最新的?
我在Stripe的文档中找不到有关重试Webhook请求的任何内容(我可以理解为什么他们不会这样做),但我只是想确保我没有错过它.
提前致谢!
我们使用stripe作为支付网关.
我正在尝试订阅客户的计划.该计划有30天的试用期.因此,我们推迟客户在其个人资料中添加源(付款方式)详细信息.
然而,当我试图订阅它的计划时,条纹正在给我这个消息:
此客户没有附加的付款来源.
有没有办法让客户在试用期内没有付款来源?
我想创建一个 Stripe PaymentIntent,直接向关联账户收费
这是我写的
stripe.paymentIntents.create(
{
amount: 2000,
currency: 'gbp',
payment_method: 'pm_xxxx',
}, {
stripe_account: 'acct_1F2xxxxxxxxxx'
},
function(err, paymentIntent) {
// asynchronously called
// do something here
}
);
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么??
以下代码(没有连接的帐户)工作正常
stripe.paymentIntents.create(
{
amount: 2000,
currency: 'gbp',
payment_method: 'pm_xxxx',
},
function(err, paymentIntent) {
// asynchronously called
// do something here
}
);
Run Code Online (Sandbox Code Playgroud)
我怀疑这是罪魁祸首,因为控制台错误说明了 PaymentMethod ....
编辑:代码是正确的,我发现问题出在 Stripe 上,因为它们需要某种进一步的身份验证。来自条纹文档
如果您选择直接收费,则需要确保已连接的帐户已启用您打算使用的付款方式。直接收费需要在连接的帐户上创建 PaymentMethods....
如果您从服务器创建 PaymentMethods,您可以使用 Stripe-Account 标头和我们支持的任何库来进行身份验证。
我会努力,看看怎么做
我正在使用 Stripe SDK 创建客户并使用 API 向客户收费,但出现“致命错误:未捕获(状态 400)(请求 req_ZyqUtykjUcOqrU)”的错误。根据印度法规,出口交易需要客户姓名和地址。更多此处的信息:https : //stripe.com/docs/india-exports 在第 38 行的 /opt/lampp/htdocs/stripe/lib/Exception/ApiErrorException.php 中抛出“
我的代码如下:
\Stripe\Stripe::setApiKey(STRIPE_API_KEY);
$customer = \Stripe\Customer::create(array(
'name' => 'test',
'description' => 'test description',
'email' => $email,
'source' => $token
));
$orderID = strtoupper(str_replace('.','',uniqid('', true)));
$charge = \Stripe\Charge::create(array(
'customer' => $customer->id,
//'source' => 'rtest',
'amount' => $itemPrice,
'currency' => $currency,
'description' => $itemName,
'metadata' => array(
'order_id' => $orderID
)
));
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 SetupIntents 来验证和保存付款方式,然后使用它创建订阅以向客户收取所需金额(立即然后每月)。
这似乎工作正常:
问题是,当提供的卡需要安全客户授权 (SCA) 时,Stripe 然后生成相应的发票和付款意图,但后者的状态为“requires_action”,即使正在使用正确的付款方式(为将来使用启用)并且已执行卡验证。
我认为使用 SetupIntents 的全部意义在于事先验证付款方式,然后能够向客户收费。
我的假设是否完全错误,或者这实际上是可能的,我可能只是遗漏了什么?
提前致谢
编辑:这是后端的订阅创建代码:
# Set the default payment method on the customer
Stripe::Customer.update(
stripe_customer_id,
invoice_settings: {
default_payment_method: @requested_source
}
)
subscription = Stripe::Subscription.create({
"customer" => stripe_customer_id,
"proration_behavior" => 'create_prorations',
"items" => [
[
"plan" => "#{@stripe_plan_api_id}",
],
],
'default_tax_rates' => [
"#{@stripe_tax_rate_id}",
],
"expand" => ["latest_invoice.payment_intent"]
});
Run Code Online (Sandbox Code Playgroud) 客户付款是否有超时,可以更改吗?
让我解释一下我的情况:
我必须在 PHP 预订平台上添加付款。
为确保一个时段不会被多次预约,当用户点击预约按钮时,平台会阻止预约20分钟。如果在此时间之后他还没有完成他的信息填写,他必须重新开始,或者如果他没有完成,则保留被释放。
我应该能够确保付款最长为 5 分钟。这样,我在预订开始后最多 15 分钟后开始付款。
这是我发现不修改整个代码的最简单方法。不幸的是,我在 API 中找不到这个选项。
否则,如果我在付款过程之前永久阻止预订,如果用户没有通过关闭浏览器完成交易,我将无法取消阻止它。
我有点困惑。我在我的用户(实际上是“客户”)模型上有一个简单的方法来返回用户的订阅续订日期:
public function subscriptionRenewalDate() : string
{
$subscription = $this->subscriptions()->active()->first()->asStripeSubscription();
return Carbon::createFromTimeStamp($subscription->current_period_end)->format('F jS, Y');
}
Run Code Online (Sandbox Code Playgroud)
我从刀片模板 ( {{ auth()->user()->subscriptionRenewalDate() }})对经过身份验证的用户调用此方法,它在本地工作正常,但是一旦我将其上传到远程登台服务器,它就会失败并显示错误:
无法声明类 App\Models\Customer,因为该名称已被使用
它指向 Customer 模型中的这一行:
class Customer extends Authenticatable
{
Run Code Online (Sandbox Code Playgroud)
奇怪的是,它不仅仅是远程登台服务器,它也是 Travis CI 失败的地方(运行 PHPUnit 测试时——这些相同的测试在本地工作正常)。
显然,这似乎是某种缓存或配置问题,但我无法理解是什么导致了此错误。
它与数据库无关,因为测试使用RefreshDatabase. 如果我删除 ENV 变量 ( CASHIER_MODEL: App\Models\Customer),它会因预期的“找不到模型用户”错误而失败,因此它正确获取了 ENV 变量。我尝试清除我的 Laravel 缓存 ( php artisan optimize:clear) 和composer dump-autoload. 这很令人困惑。
我所知道的是该错误是由asStripeSubscription(). 如果我从方法中删除它,刀片模板加载正常(一切正常)。
需要明确的是,我可以成功(这是本地、远程和 Travis CI):
stripe-payments ×10
node.js ×3
php ×2
express ×1
javascript ×1
laravel ×1
payment ×1
webhooks ×1