Stripe Webhook срабатывает, но не работает метод события Stripe - PullRequest
0 голосов
/ 20 сентября 2019

Используя драгоценный камень Stripe Events, я пытаюсь обновить подписку Stripe на событие отписки.Мои события не запускаются, хотя они получают веб-крючок.

Я запускаю свою конечную точку на ngrok и использую гем stripe-events.Я установил полосу cli, чтобы видеть, что события webhook запускаются.

Я думаю, что есть проблема с кодом, который я пытаюсь использовать

@ user = User.find_by_stripe_id (event.data.object.customer) однако я получил этот код из потока на GoRails.Крис Оливер сказал, что это выглядело правильно, и я переназначил его для своего приложения, чтобы я мог подумать, что это может быть что-то еще.

# config/initializers/stripe_events.rb
Stripe.api_key = Rails.application.credentials.stripe_publishable_key
Stripe.api_key = Rails.application.credentials.stripe_signing_secret

StripeEvent.configure do |events|
  events.subscribe "customer.subscription.updated" do |event|
      @user = User.find_by_stripe_id(event.data.object.customer)  
      logger.info "Processing the request..."
      if DateTime.now >= @user.subscription_end_date
        logger.info "if statement is running..."
      @user.update_attribute(subscribed: false)
      @user.save!
      end
  end
end

Я не уверен, нужно ли это, но вот метод, который запускает веб-крючок.Я добавил DateTime.now-1 для тестирования, если веб-крючок имитирует просроченную подписку.

# app/controllers/subscriptions_controller.rb
  def destroy
        if Rails.env.production? 
            Stripe.api_key = Rails.application.credentials.stripe_live_api
        else
            Stripe.api_key = Rails.application.credentials.stripe_api_key
        end
        customer = Stripe::Customer.retrieve(current_user.stripe_id)
        customer.subscriptions.retrieve(current_user.stripe_subscription_id)
        Stripe::Subscription.update(current_user.stripe_subscription_id,:cancel_at_period_end => true)
        ##current_user.update(subscription_end_date: Time.at(customer.subscriptions[:data].first[:current_period_end]))
        current_user.update(subscription_end_date: DateTime.now-1)
        redirect_to root_path, notice: "Your subscription has been cancelled"
    end

Я проверил ответ от веб-крючка в полоску

{
  "object": {
    "id": "sub_FqLLZZ4pKhlM0y",
    "object": "subscription",
    "application_fee_percent": null,
    "billing": "charge_automatically",
    "billing_cycle_anchor": 1568957293,
    "billing_thresholds": null,
    "cancel_at": 1571549293,
    "cancel_at_period_end": true,
    "canceled_at": 1568957302,
    "collection_method": "charge_automatically",
    "created": 1568957293,
    "current_period_end": 1571549293,
    "current_period_start": 1568957293,
    "customer": "cus_FqLLXYHyVl7mJq",
    "days_until_due": null,
    "default_payment_method": null,
    "default_source": null,
    "default_tax_rates": [
    ],
    "discount": null,
    "ended_at": null,
    "items": {
      "object": "list",
      "data": [
        {
          "id": "si_FqLLngQNhxl5p4",
          "object": "subscription_item",
          "billing_thresholds": null,
          "created": 1568957293,
          "metadata": {
          },
          "plan": {
            "id": "plan_FYHrCVDopLPS37",
            "object": "plan",
            "active": true,
            "aggregate_usage": null,
            "amount": 2900,
            "amount_decimal": "2900",
            "billing_scheme": "per_unit",
            "created": 1564792787,
            "currency": "usd",
            "interval": "month",
            "interval_count": 1,
            "livemode": false,
            "metadata": {
            },
            "nickname": "Uproar Basic",
            "product": "prod_FYHpmwiftJrqpC",
            "tiers": null,
            "tiers_mode": null,
            "transform_usage": null,
            "trial_period_days": null,
            "usage_type": "licensed"
          },
          "quantity": 1,
          "subscription": "sub_FqLLZZ4pKhlM0y",
          "tax_rates": [
          ]
        }
      ],
      "has_more": false,
      "total_count": 1,
      "url": "/v1/subscription_items?subscription=sub_FqLLZZ4pKhlM0y"
    },
    "latest_invoice": "in_1FKefBJCkfo4YGOMvdEjZ3ny",
    "livemode": false,
    "metadata": {
    },
    "pending_setup_intent": null,
    "plan": {
      "id": "plan_FYHrCVDopLPS37",
      "object": "plan",
      "active": true,
      "aggregate_usage": null,
      "amount": 2900,
      "amount_decimal": "2900",
      "billing_scheme": "per_unit",
      "created": 1564792787,
      "currency": "usd",
      "interval": "month",
      "interval_count": 1,
      "livemode": false,
      "metadata": {
      },
      "nickname": "Uproar Basic",
      "product": "prod_FYHpmwiftJrqpC",
      "tiers": null,
      "tiers_mode": null,
      "transform_usage": null,
      "trial_period_days": null,
      "usage_type": "licensed"
    },
    "quantity": 1,
    "schedule": null,
    "start": 1568957302,
    "start_date": 1568957293,
    "status": "active",
    "tax_percent": null,
    "trial_end": null,
    "trial_start": null
  },
  "previous_attributes": {
    "cancel_at": null,
    "cancel_at_period_end": false,
    "canceled_at": null,
    "start": 1568957293
  }
}

...