我正在尝试实现PayPal 订阅流程,其中用户单击我通过仪表板创建的PayPal 订阅按钮。
在后端,我监听PAYMENT.SALE.COMPLETED订阅计费成功时触发的 Webhook。不幸的是,网络钩子没有向我发送太多信息,以便我可以检索链接到刚刚计费的订阅的数据库中的用户和项目。
这将使我能够安全地向该用户显示私人内容。
以下是payPal 发送的webhook 内容(抱歉太长了):
const response = {
id: 'WH-4W487015EX264720U-32N35125TV248784B',
event_version: '1.0',
create_time: '2021-04-26T08:24:41.436Z',
resource_type: 'sale',
event_type: 'PAYMENT.SALE.COMPLETED',
summary: 'Payment completed for EUR 6.9 EUR',
resource: {
billing_agreement_id: 'I-T2HP99MJTS1T',
amount: {
total: '6.90',
currency: 'EUR',
details: {
subtotal: '6.90'
}
},
payment_mode: 'INSTANT_TRANSFER',
update_time: '2021-04-26T08:23:59Z',
create_time: '2021-04-26T08:23:59Z',
protection_eligibility_type: 'ITEM_NOT_RECEIVED_ELIGIBLE,UNAUTHORIZED_PAYMENT_ELIGIBLE',
transaction_fee: {
currency: 'EUR',
value: '0.48'
},
protection_eligibility: 'ELIGIBLE',
links: [
{
method: 'GET',
rel: 'self',
href: 'https://api.sandbox.paypal.com/v1/payments/sale/6R7481343K8159132' …Run Code Online (Sandbox Code Playgroud) 我正在努力处理 Stripe 发布到我的网络挂钩的数据。
我正在使用基本结帐。我一切都按预期进行。CLI 在“checkout.session.completed”之后转发 Web 挂钩。我的钩子正如预期的那样被击中了。但是,我不知道如何提取元数据。我可以在物体中看到它,但我不知道如何看到它。什么是“IhasObject”?我从下面的文档中复制了代码。
var json = await new StreamReader(HttpContext.Request.Body).ReadToEndAsync();
try
{
// check if was from Stripe
var stripeEvent = EventUtility.ConstructEvent(json,Request.Headers["Stripe-Signature"], endpointSecret);
// Handle the event
if (stripeEvent.Type == Events.CheckoutSessionCompleted)
{
// TODO update the DB and set the booking to PAID based on the transaction Id
// in Metadata
var session = stripeEvent.Data.Object;
Run Code Online (Sandbox Code Playgroud)
我可以在 VS 调试和原始 json 中的会话对象中看到正确的数据。但是如何从会话对象或事件中获取它呢?目前尚不清楚,文档中也没有示例。我很想将 json 读入 POCO,但这不是事件对象的重点吗?
有人能指出我正确的方向吗?我只想履行订单,但示例没有显示如何使用会话对象。
收到 webhook 后,我们应该返回2xx响应,然后在后端执行一些额外的逻辑。
\n\n\n您的端点必须在任何可能导致超时的复杂逻辑之前快速返回成功状态代码 (2xx)。例如,在更新会计系统中已付款的客户\xe2\x80\x99s 发票之前,\n必须返回 200 响应。
\n
他们建议这里首先返回成功的2xx响应,然后在我们的后端执行其他操作。他们认为这是最佳实践,因此不会出现请求超时。
\n我不明白这是最佳实践,因为很明显我们的系统在更新数据库时失败,而我们已经返回了成功的响应。这意味着 Stripe 稍后不会尝试重新发送 Webhook,并且我们将丢失此信息,因为我们的系统没有保存它。
\n对于此类问题是否有现有的解决方案?
\n我试图理解条纹事件,但很困惑/不确定我是否理解正确。我的问题用斜体字。我的客户周期如下。

#1
使用checkout.session.completed事件来确定他们是否已订阅。然后使用subscriptionid 获取有关订阅的信息。这是使用正确的事件吗?
#2a 和 #2b
我不知道这里使用什么事件。我收到了很多事件,例如、charge.succeeded、等。我用哪个来确定客户是否已付款或未付款以及延长或结束他们的订阅?payment_intent.succeededinvoice.finalizedinvoice.paid
#3a 和 #3b
假设我使用invoice.payment_succeeded#3a。我使用哪些事件来确定发票信息?
#4a 和 #4b
这是我根据从 Stripe 获得的信息在我的网站上所做的事情。如何将 Stripe 的时区转换为悉尼/澳大利亚时区。
我正在尝试使用cURL将其发布到Zapier Webhook。
Zapier已配置为如果我这样键入其URL- https: //zapier.com/hooks/catch/n/abcd?email=foo@bar.com&guid=foobar
它会收到该帖子,但是当我尝试使用cURL做同样的事情时,它似乎没有收到。
这是我使用cURL发布的代码->
<?php
// Initialize curl
$curl = curl_init();
// Configure curl options
$opts = array(
CURLOPT_URL => 'https://zapier.com/hooks/catch/n/abcd',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POST => 1,
CURLOPT_POSTFIELDS => 'guid='+ $_POST["guid"] + '&video_title=' + $_POST["video_title"] + '&email=' + $_POST["email"],
);
// Set curl options
curl_setopt_array($curl, $opts);
// Get the results
$result = curl_exec($curl);
// Close resource
curl_close($curl);
echo $result;
?>
Run Code Online (Sandbox Code Playgroud)
当我运行它时,它显示成功,但是Zapier没有收到它。
在Zapier的文档中,有人举了一个带有适当cURL帖子的示例,例如->
curl -v -H "Accept: application/json" \
-H "Content-type: application/json" \
-X POST …Run Code Online (Sandbox Code Playgroud) 我在该项目中创建了新项目和分支.我需要为我的开发服务器配置一个特定的分支.每当应该自动部署到服务器的分支中发生推送时.
我在Gitlab中尝试过使用Web Hook.但这不是锻炼.请给出参考.一步一步的链接.我需要在本地计算机和服务器系统中执行哪些配置.我已经搜索过我们需要设置一些"Post Receive WebHook in server"可以请给出这个想法.
"在这里我将解释我手中的内容.服务器已经设置了没有git.我在一个分支中有一个项目"开发".我在我的本地克隆并推送到分支.它工作正常.(我正在使用窗口但是,当我推送一些更新后,我需要推送到服务器.所以,我已经尝试过使用Web Hook.但它没有用."
我是webhooks的新手,每当我推送到我的仓库时,我都会尝试自动部署到我的网站.
我将我的bitbucket repo上的webhook设置为一个包含一个简单的php脚本的URL:
if(isset($_POST['payload'])) {
logMsg("Got stuff\n");
} else {
logMsg("No stuff\n");
}
Run Code Online (Sandbox Code Playgroud)
在我推送到我的仓库之后,webhook将请求脚本正常但没有发送有效负载.我的日志文件总是说"没有东西".
我错过了什么?
我正在构建(小)订阅盒业务,现在我需要专注于Web应用程序.我已经建立了基于条带的网站,所以我有一个很好的知识.
但是,我在构建这些以前的站点时遇到的问题是API被称为TOO OFTEN.它减慢了一切.
如何构建此基于订阅的网站,仅使用条带,并仅在需要时调用Stripe API(创建/编辑客户,计划,订阅等),同时仍确保信息已协调并且是最新的管理员和客户的网站?
我的客户第一次加入我们的下标计划,我创建了一个交易(称为START-transaction),并使用Stripe的API创建新的订阅,并将订阅对象返回存储在上述交易中。
我还使用webhook来捕获Stripe的事件。我最大的目的是处理定期付款(发送有关充电成功或失败的通知,以及与客户互动的信息)。我捕获到事件invoice.payment_succeed以检测到这是账单。我也创建了一个事务(称为RECURRENCE),因此,我将事件对象存储在事务中。(基于事件invoice.payment_succceed中的订阅信息,我找出相对START交易并创建一个新交易,只要RECURRENCE)
问题就暴露出来了,在客户第一次创建计划时,有6个事件被召回我的系统:customer.created; 收费成功;发票已创建;发票。付款成功; 客户卡已创建;客户创建。因此,我的客户第一次有2-transactiona:1-START和1-RECURRENCE。
您是否建议我删除RECURRENCE交易?
谢谢。
在我的Ruby on Rails SaaS应用程序中,用户可以订阅月度或年度计划.我使用Stripe作为支付处理器.Stripe还按月(或每年)处理所有订阅并重新向用户收费.
我也是联盟网络的成员,该网络会收到有关用户每次新订阅/收费的通知,以便广告客户可以获得奖励(如果有的话).这适用于新订阅,因为如果付款通过,Stripe会立即通知我.
但重复订阅付款呢?我必须(并且想)通知我的联盟网络,但是,在我的网络应用程序中,我无法确定是否已经进行了定期付款.我可以假设它将在每个月的24日制作,但这不是肯定的.
Web应用程序是否有更好的方法来检测Stripe成功处理定期付款的时间?我的联盟网络要求我在收费时在前端显示一些小的Javascript片段.
谢谢你的帮助.