いくつかのスタックオーバーフローの投稿を集めたところ、ユーザーがペイパルの定期支払いをキャンセルすると、IPN 設定で設定された指定の URL に即時支払い通知が送信されます。しかし、私が収集できないのは、クエリ文字列でこの URL に送信されるデータです。私はこのリンクに出くわしました:
https://www.paypal.com/cgi-bin/webscr?cmd=p/acc/ipn-subscriptions-outside
IPN設定で指定されたURLで送信されるクエリ文字列の一部として送信されると私が想定する変数のリストを提供します。これが true の場合、txn_type の値が「subscr_cancel」になるため、この通知がキャンセル通知であることがわかります。
ただし、どの定期プランが実際にキャンセルされているかを知る必要があります。したがって、クエリ文字列の変数としてアクセスするには、定期的なプロファイル トークンを知る必要があります。
ここで何をしようとしているのかを理解していただくために、サンプル コードをいくつか示します。
def notify_url
if params[:txn_type] == "subscr_cancel"
item_id = Order.where(paypal_recurring_profile_token: params[:recurring_profile_token]).unit_id_for_plan
agent_host = CONFIG["agent_#{Rails.env}"]["host"]
agent_port = CONFIG["agent_#{Rails.env}"]["port"]
url = "http://#{agent_host}:#{agent_port}/home/deactivate?item_id=#{item_id}"
begin
resp = Net::HTTP.get(URI.parse(url))
resp = JSON.parse(resp)
puts "resp is: #{resp}"
true
rescue => error
raise "Error: #{error}"
end
if resp["status"] == "success"
true
end
end
end
私が知る必要があるのは、定期請求のキャンセルの通知が送信されたときに txn_type が subscr_cancel と等しいかどうかだけですか? @PP_MTS_Chad は recurring_payment_id が含まれていることを確認済みです。txn_type も含まれているかどうかを知る必要があります。