我们开始在Redsmin(我们的项目之一)上实现Stripe ,我想我们可能错过了一些东西.下面是它的工作原理:
要使用我们的产品,用户必须选择一个计划(免费,s,m,xl,xxl ...),然后输入其登录名/密码,然后可以免费试用30天.当用户提交表单时,我们的服务器使用指定的计划调用Stripe create_customer而不使用信用卡(因为我们希望免费提供30天而不需要信用卡)并且我们使用返回的customer_id和更新我们这边的用户模型subscription_id.
我们设置了一个webhook接收条带事件,所以30天后我们的webhook 应该收到一个customer.subscription.updated带有的事件object.status == active.我对吗?
但是,由于我们没有在注册时为用户指定相关卡,我们应该在另一个customer.subscription.updated事件之后快速收到,object.status == unpaid对吗?然后在我们这边,我们停用用户帐户并强制它转到我们的计划选择页面.
从那时起,用户可以选择免费计划或我们的高级计划之一:
#Scenario 1如果用户选择免费计划,我们只需重新激活其帐户,不做任何其他事情,因为我们将条带上的免费计划配置为成本0 $.我们是否通过免费计划实施了正确的流程?还有更好的方法吗?
#Scenario 2如果用户选择了高级计划,我们会将他重定向到信用卡表单,然后将其发送到Stripe,我们会使用临时卡令牌更新条带客户帐户.接下来我们该怎么办?:
customer.subscription.updated?charge.succeeded?那么它的价值是object.status什么?credit-card saas payment-gateway payment-processing stripe-payments
为了理解什么是TCP keepalive(我们将调用keepalive),你只需要读取名称:保持TCP活着.这意味着您将能够检查连接的套接字(也称为TCP套接字),并确定连接是否仍在运行或是否已断开.
那么,为什么以下代码在互联网连接断开时不会抛出某些东西?
var tls = require('tls');
var socket = tls.connect(443, "google.com", function connected() {
console.log('connected');
});
socket.setNoDelay(true);
socket.setKeepAlive(true, 0);
socket.setTimeout(0, function(){
console.log('timeout');
});
socket.on('data', function(data) {
console.log(data);
});
socket.on('close', function() {
console.error("close");
});
socket.on('error', function(err) {
console.error("error", err);
});
Run Code Online (Sandbox Code Playgroud)
使用NodeJS v0.10.17在MacOS/Debian上测试
以下代码对外部API执行了大量调用.此API 每秒不允许超过3个查询.syncCallToApi是由api客户端库提供的函数,它执行同步请求并返回结果.
callToApi在保持以下语义的同时,Scala同时调用每秒不超过3次的最佳方法是什么:
val ids = Seq(12980,2932,3441,42334,980,32,4531,7234)
val results: Seq[Item] = ids.map(id => syncCallToApi(id))
println(results)
Run Code Online (Sandbox Code Playgroud)