Stripe Connect Express Webhook - 如何在用户完成 Stripe Connect Express 表单并被重定向后触发 Stripe Webhook

Posted

技术标签:

【中文标题】Stripe Connect Express Webhook - 如何在用户完成 Stripe Connect Express 表单并被重定向后触发 Stripe Webhook【英文标题】:Stripe Connect Express Webhook - How to get Stripe webhook to fire once user has completed Stripe Connect Express form and is redirected 【发布时间】:2020-06-21 00:36:10 【问题描述】:

所以我花了相当多的时间(几周)来解决这个问题,但仍然无法弄清楚如何解决它。我相信我已经将其范围缩小到一旦用户通过 Stripe Connect Express 流程完成了注册表单,尝试让 Stripe Connect webhook 触发的问题。这是 Stripe 提供的 RocketRides.io demo 示例。我已经向 Stripe 提交了一个问题,但正在等待回复。我希望在 SO 社区的帮助下更快地到达那里。

我之前已经创建了其他问题,因为我在尝试缩小问题范围的反复试验过程中追逐众所周知的兔子的各种漏洞,所以请耐心等待。您可以在此问题帖子的底部找到这些其他链接。

当我使用stripe listen“收听”时,下面的 sn-p 会显示我的 Stripe CLI 日志。

这个 sn-p 显示 stripe logs tail

customer.created 在用户注册我的应用程序时被触发,这应该使用下面的代码来实现。我不确定在尝试使用 Stripe Connect 帐户时是否应该使用这是我的意图。我还在弄清楚条纹。底线是我需要有支付和订阅能力,根据我所做的研究,Stripe Connect 是前进的方向。

exports.createStripeCustomerHTTPSCall = functions.firestore.document('Users/userName').onCreate((change, context) =>

    console.log("Stripe Customer profile for " + context.params.userName + " created.");

    return stripeToken.customers.create(
        
            description: 'My First Test Customer (created for API docs)',
            email: context.params.userName,
        ,
        (err, customer) => 
        // asynchronously called
            console.log("Creating Stripe customer failed because: " + err.toString())
        
    )

一旦用户注册应用并以用户身份登录 FirebaseDatabase,他们将被定向到Stripe Connect Express form。

我现在遇到的问题是让条带触发Connect Webhook,这将触发第 4 步,即使用Authentication code 对重定向 URL 的 cURL 请求的 Cloud Functions 版本,可能还有state code . account.application.authorized 事件仅在我发送 cURL 请求后才会在我的侦听器中发生(我认为这称为 GET 请求?我不是经过正式培训的程序员

我认为问题在于设置 webhook 以在用户完成表单并被重定向后触发,我认为应该是 account.updated?

这是我的 webhook 设置:

这是我的 Node.js 代码。我不确定它是否相关,因为我什至无法启动 webhook,但以防万一:

exports.stripeCreateOathResponseToken = functions.https.onRequest((req, res) => 

console.log("rawbody: " + rawbody); // <-- usually comes back with req.rawbody
    console.log("request.body: " + req.body); // <-- returns undefined
    console.log("request.query.code: " + req.query.code); // <-- returns undefined
    console.log("request.query.body: " + req.query.body); // <-- returns undefined
    console.log("request.query.state: " + req.query.state); // <-- returns undefined

return stripeToken.oauth.token(
          grant_type: 'authorization_code',
          code: req.query.code,
    ).then(function(response) 
          // asynchronously called

        return res.send(response)

          // var connected_account_id = response.stripe_user_id;
        )
        .catch(error=> 
            res.send(error)
        )

    );

如果相关,这里是用户决定注册支付功能时的 android kotlin 代码。又名 Stripe Connect Express

openURL.data = Uri.parse(
                            "https://connect.stripe.com/express/oauth/authorize?" +
                                    "redirect_uri=http://XXXXXXXXXXXXXX.com&" +
                                    "client_id=ca_XXXXXXXXXXXXXXXXXXXX" + // how to hide client id? maybe look at how to access from stripe CLI
                                    "state=" + mAuth.currentUser!!.uid +
                                    "&stripe_user[email]=" + userEmail +
                                    "&stripe_user[business_type]=individual" +
                                    "&stripe_user[phone_number]=" + userPhoneNumberStripped +
                                    "#/")

                    startActivity(openURL)

以前的问题

Stripe Firebase Cloud Functions - res.send() is not a function

Cloud Firebase Stripe Connect - Retrieve Authorization Code / Access Token, State, etc

Firebase Cloud Functions - Stripe Connect Webhook not firing

Android Stripe Connect WebView - Create Account Form NOT loading

【问题讨论】:

【参考方案1】:

在这种情况下,webhook 将不起作用;相反,您希望将用户(在他们完成 OAuth 过程之后)重定向到运行您在此处提供的 Node.js 代码的 Cloud Functions URL(然后将它们重定向到您下一步的下一步)。

您还需要确保您要重定向到的 URL 在仪表板的平台设置中列为重定向 URL,如下:https://stripe.com/docs/connect/express-accounts#integrating-oauth

就 GCF 中的重定向而言,这可能会有所帮助:https://***.com/a/45897350/379538

【讨论】:

? 我错了还是 Stripe 文档只提到重定向到平台的网站?我没有看到它在任何地方提到重定向到 Cloud Functions URL。我将编辑我的 Kotlin 代码,看看效果如何。 所以我将我的 kotlin 代码的 redirectURI 替换为 `"redirect_uri=us-central1-xxxxxxxxxx.cloudfunctions.net/…" +` 但仍然没有触发任何内容。我正在四处寻找如何通过openURL.data = Uri.parse 触发云功能我没有得到任何点击。 有错误吗?该 URL 是否在您的仪表板的平台设置中列为重定向 URL? stripe.com/docs/connect/express-accounts#integrating-oauth 就是这样!它是 [连接设置] (dashboard.stripe.com/settings/applications) 中的 URL,它将我的平台 URL 列为默认值,我猜这就是为什么它覆盖了我在我的 kotlin 代码中拥有的端点 URL。现在,当用户完成注册过程时,它只会进入一个在左上角显示response: [object Object] 的白页,但至少现在它可以工作了。我将不得不装配一些东西,以便将其转发到平台的页面或其他东西。请发布之前的评论作为答案,以便我给予信任。如果可以的话,我会请你喝啤酒。 @Cflux 已编辑。 :)

以上是关于Stripe Connect Express Webhook - 如何在用户完成 Stripe Connect Express 表单并被重定向后触发 Stripe Webhook的主要内容,如果未能解决你的问题,请参考以下文章

Stripe Connect Firebase 功能

Stripe Connect:在Stripe Connect中,谁将支付Stripe费用,如何确定?

使用 Express & Stripe 保护交易

Reactjs Stripe 支付不适用于 Node/Express

stripe express 怎么用

html Flask + Stripe Connect