从条带webhook访问本地https服务

时间:2016-01-04 13:44:07

标签: stripe-payments webhooks

我正在使用Stripe集成支付系统。在这个过程中,我需要在我的本地开发人员中测试webhook。机器在我发货到QA之前。我试过以下,

  1. Ultrahook:但是当启动ultrahook时,它说,经过身份验证< myaccount>,但没有给出任何“Forwarding activated ...”消息。当我尝试从条带或Web访问URL时,它不起作用。详情如下,
  2. local url:https:// localhost / xxx / yyy / zzz ultrahook命令:ultrahook -k localhost https://localhost.com/xxx/yyy/zzz 条纹中使用的钩子网址:http://localhost.arivanza.ultrahook.com/xxx/yyy/zzz

    我也试过,https://localhost.com/,但是从条纹测试时,请求并没有从钩子中获得。

    1. LocalTunnel:从github下载后,我找不到启动应用程序的方法。

    2. PageKite:默认情况下会打开localhost:80,不知道如何打开https://localhost.com

    3. 非常感谢任何帮助。

4 个答案:

答案 0 :(得分:1)

嗨,我已经尝试了自己。 请按照以下步骤进行操作

  1. 下载 ngrok 并在任意文件夹中提取
  2. 运行ngrok.exe并输入以下命令 ngrok http [port] -host-header =“localhost:[port]”
  3. Y0u会在ngrok控制台中获取一个网址“Forwording”,如https://7755afd8.ngrok.io 这个网址是localhost:[port]
  4. 的替代品
  5. 您可以不使用https://7755afd8.ngrok.io/index.html
  6. 使用asp.net的条带webhook的代码示例:

    var postdata =new StreamReader(HttpContext.Request.InputStream).ReadToEnd();
    var data = JObject.Parse(postdata);
    var eventid = data["id"].ToString();
    var eventdata = StripeHelper.GetStripeEvent(eventid);
    if(eventdata!=null)
    {
       switch(eventdata.Type)
        {
            case "charge.succeeded":
                //charged event
                break;
            case "customer.source.created":
                //card added
                break;
            case "customer.source.deleted":
                //card deleted
                break;
            case "customer.subscription.trial_will_end":
                //trial will end 
                break;
        }
    }
    

答案 1 :(得分:1)

如果您需要在本地开发机器上接收webhook(比方说,在localhost:1234/api/url上),您可以使用本地“模拟”条带服务器,如localstripe。一旦推出,它就像条纹一样,如果你配置它就发送事件。

  1. 安装并运行localstripe:

       
    pip3 install --user localstripe
    localstripe
    
  2. 将您的程序配置为使用localhost:8420(localstripe)而不是真正的Stripe(api.stripe.com)。例如,使用Python程序:

       
    import stripe
    stripe.api_key = 'sk_test_anythingyouwant'
    stripe.api_base = 'http://localhost:8420'`
    
  3. 配置localstripe以将webhook事件发送到您的程序:

       
    curl localhost:8420/_config/webhooks/mywebhook1 \
      -d url=http://localhost:1234/api/url -d secret=whsec_s3cr3t
    
  4. 并非所有事件都在localstripe中实现,并且它的行为可能与真正的Stripe略有不同。但它允许您在本地沙箱中测试您的应用程序,而无需触及实际的Stripe服务器。

答案 2 :(得分:0)

尽管其他答案有效,但我认为它们有点过时了。

Stripe 现在有一个 CLI 工具,允许您在 Stripe 和本地主机之间创建连接。步骤如下

  1. 创建处理 Stripe 网络钩子调用的网络钩子文件。假设此文件的路径为 http://localhost/webhook

  2. 转到 stripe.com,转到仪表板,然后单击 Developers 和 Webhooks,然后添加一个新端点。确保该端点中的 URL 是上述步骤 1 中的 URL(即 http://localhost/webhook

  3. 在本地下载并安装 Stripe CLI。然后按照说明login

  4. 在您的 Stripe CLI 中,运行以下命令:

    stripe listen --forward-to http://localhost/webhooks

    这最终会监听 Stripe 的任何 webhooks 到您的本地服务器,并将它们转发到您本地的服务器(即,它在两者之间建立了一座桥梁)

  5. 测试您的工作。

上述解决方案的问题在于它不会将 webhook 的响应发送回 Stripe 服务器(因为 http://localhost/webhook 是您的网络专用的)。

如果您坚持要回复给 Stripe,那么您应该

  1. 将您的本地主机映射到公共域

  2. 使用隧道,例如 ngrokThis answer 描述了如何使用 ngrok,但对我来说,我以这种方式调用 ngrok

    ngrok http -host-header=localhost 80

    上面的调用会给我类似 https://<some-random-numnber>.ngrok.io

    因此在 stripe.com 中,我必须将端点写为

    https://<some-random-numnber>.ngrok.io/<path-to-webhook-response-page>/

希望能帮到你

答案 3 :(得分:0)

尽管其他答案有效,但我认为它们有点过时了。

Stripe 现在有一个 CLI 工具,允许您在 Stripe 和本地主机之间创建连接。步骤如下

  1. 创建处理 Stripe 网络钩子调用的网络钩子文件。让我们 假设这个文件的路径是 http://localhost/webhook。

  2. 转到 stripe.com,转到仪表板,然后单击开发人员,然后 Webhooks,然后添加一个新端点。确保其中的 URL 端点是上述步骤 1 中的端点(即 http://localhost/webhook)

  3. 在本地下载并安装 Stripe CLI。然后按照 登录说明

  4. 在您的 Stripe CLI 中,运行以下命令:

    stripe listen --forward-to http://localhost/webhooks.
    
    This will eventually listen to Stripe for any webhooks to your local
    server, and forward them to your sever locally (i.e, it creates a
    bridge between the two)
    
  5. 在VerifyCsrfToken[中间件]中注册网址: 类 VerifyCsrfToken 扩展了 BaseVerifier { 受保护的 $except = [ '网络钩子' ]; }

  6. 测试你的工作