Я следил за руководством Railscast 289 о том, как совершать регулярные платежи с помощью Paypal.
Теперь у меня все работает, за исключением того, что я сейчас изо всех сил пытаюсь понять, как я могу узнать, отменил ли пользователь свою подписку в PayPal.
Что я сделал
Мне удалось установить URL-адрес IPN в учетной записи продавца PayPal, и каждый раз, когда кто-то подписывается, он будет отправлять мне данные с PayPal на мой веб-перехватчик.
Теперь я сохраняю все параметры, которые отправляет мне PayPal, но я не могу понять, какие из параметров я должен проверить, чтобы узнать, отменил ли пользователь свою подписку или у него недостаточно средств и т. Д.
По крайней мере, я так думаю, что это работает.
Я использую Paypal Recurring Gem
Вопросы
Как я могу заметить, что пользователь отменил свою подписку, когда PayPal отправляет мне свой IPN на мой веб-перехватчик.
Мой банкомат с веб-крючком
def create
user_id = Subscription.find_by(paypal_customer_token: params[:payer_id]).user_id
PaymentNotification.create!(params: params, user_id: user_id, user_role_id: params[:item_number], status: params[:payment_status], transaction_id: params[:txn_id])
@user = User.find_by(id: user_id)
if PaymentNotification.last.params[:profile_status] == "Cancelled"
@user.update_attributes(user_role_id: 1)
end
render nothing: true
end
Обратите внимание, что я не хочу мгновенно обновлять атрибут пользователей, я хочу дождаться окончания их месячной подписки.
В настоящее время я сохраняю их вызов IPN в таблице PaymentNotification.
create_table "payment_notifications", force: :cascade do |t|
t.text "params"
t.integer "user_role_id"
t.string "status"
t.string "transaction_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.integer "user_id"
end
Кроме того, как лучше всего проверить эти параметры, чтобы принять меры к пользователям, которые не заплатили или отменили свою подписку?
У меня есть еще одна таблица, в которой хранятся подписки
create_table "subscriptions", force: :cascade do |t|
t.integer "user_role_id"
t.integer "user_id"
t.string "paypal_customer_token"
t.string "paypal_recurring_profile_token"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
user_role
в данном случае является plan
, на который они подписываются.