Ошибка Braintree в производственном режиме

Я реализовал оплату подписки Braintree в приложении rails. Все отлично работает в разработке, однако, когда я перешел на производство (я зарегистрировался в Braintree и получил реальную учетную запись, и я изменил все ключи в среде)

Я попытался отправить неверную информацию о карте для тестирования приложения, на странице постоянно отображается сообщение об ошибке.

Я смотрю журналы приложений и там сказано

NoMethodError (undefined method `customer' for #<Braintree::ErrorResult:0x007f6ed80f1d80>):

Вот мой метод создания, я следую вашему уроку, и он отлично работает в разработке

def create
    if current_user.braintree_id?
          customer = Braintree::Customer.find(current_user.braintree_id)
    else
          result = Braintree::Customer.create(
          email: current_user.company_email,
          company: current_user.company_name,
          payment_method_nonce: params[:payment_method_nonce]
          )

      customer = result.customer
      current_user.update(braintree_id: customer.id)

    end

result = Braintree::Subscription.create(
  payment_method_token: customer.payment_methods.find{ |pm| pm.default? }.token,
  plan_id: params[:plan_id]
)

if result.success?
result.subscription.transactions.each do |transaction|
  current_user.transactions.create(braintree_transaction_id: transaction.id,
    plan_name: params[:plan_name],
    price: transaction.amount.to_f,
    start_date: transaction.subscription_details.billing_period_start_date,
    end_date: transaction.subscription_details.billing_period_end_date,
    subscription_id: result.subscription.id
    )


end


current_user.update(braintree_subscription_id: result.subscription.id, 
next_billing_date: result.subscription.next_billing_date,
billing_period_start_date: result.subscription.billing_period_start_date,
billing_period_end_date: result.subscription.billing_period_end_date,
status: result.subscription.status,
next_billing_period_amount: result.subscription.next_billing_period_amount,
paid_through_date: result.subscription.paid_through_date,
plan_id: params[:plan_id],
plan_name: params[:plan_name])

      flash[:info] = "You've been subscribed successfully"
      redirect_to @current_user
else
      flash[:warning] = "Invalid card information"
      render 'new'
end
end

Странно то, что он не отображает флэш-предупреждение о неудачном результате и перенаправляет на исходный new_subscription_path, вместо этого перенаправляет URL-адрес веб-сайта на этот

https://herokuappname.herokuapp.com/subscription.1

и ошибка страницы показывает

This page isn’t working herokuappname.herokuapp.com is currently unable to handle this request.
HTTP ERROR 500

Итак, я хочу знать, является ли это ошибкой метода заказчика (что я так не думаю, потому что у нее нет проблем в режиме разработки) или какой-либо другой проблемой, например, почему URL страницы такой странный?

Я посмотрел на панель управления Braintree, и причина неудачной подписки была в том, что банк отклонил транзакции из-за неверной информации о карте, и я ввел неверную карту, чтобы проверить ее, если это неверная информация о карте, почему не он отображает флэш-уведомление и перенаправляет обратно на new_subscription_path, вместо этого он перенаправляет на URL подписки, который я упомянул выше?

1 ответ

Решение

Полное раскрытие: я работаю в Braintree. Если у вас есть какие-либо дополнительные вопросы, не стесняйтесь обращаться в службу поддержки.

Я не уверен, что вы использовали тот же самый недопустимый номер карты для тестирования в производстве, что и в песочнице, но я постараюсь ответить на ваши вопросы с помощью информации, которая у нас есть:

NoMethodError (неопределенный метод `customer'для #):

При попытке создать клиента с методом оплаты с недействительной картой, результат этого вызова API был ErrorResult объект. ErrorResult Объектами являются либо ошибка проверки, сбой процессора, отказ шлюза, либо другие сообщения об исключениях, и они не содержат customer метод. Следовательно undefined method ошибка.

Вы должны добавить некоторую обработку ошибок во все вызовы API Braintree, чтобы вы могли устранять любые ошибки в процессе подписки.

Другие вопросы по тегам