[JAVA] [Rails] Fehlerbehebung nach PAYJP-Token-Generierung (separate Route)

Ich lerne gerade Programmieren und werde behalten, was ich mir notieren möchte.

(Es ist eine Fortsetzung dessen, was ich das letzte Mal gepostet habe, oder so etwas wie eine andere Route.) [Rails] Fehlerbehebung beim Generieren von Token mit PAYJP

Ich habe PAYJP eingeführt und Token generiert, aber die Zahlung war nicht erfolgreich ...

Geben Sie die Testkarteninformationen ein und drücken Sie die Kauftaste. スクリーンショット 2020-09-20 10.14.43.png Wurde angezeigt.

Ich werde es weglassen, weil es im vorherigen Inhalt beschrieben ist, Als ich "console.log ()" in die Beschreibung des JavaScript für die Token-Generierung schrieb und den "Status" überprüfte, war es "200" und es wurde bestätigt, dass die Token-Generierung erfolgreich war. (Keine Token? Das sollte nicht der Fall sein !!!)

Die aktuelle Situation verstehen

Ich habe binding.pry verwendet, um den Inhalt von params zu überprüfen und die Fehlerursache zu finden.

pry(#<OrdersController>)> params
=> <ActionController::Parameters {"authenticity_token"=>"uRxJ+Ho4c2vi4Pc8MrK/s7UhNbujnVBDt7qjJ11pFpeHWDMltGl3eu/ls94DaALSPNfIpoMtUd4aeOcs4Z8Y4w==", "item_order"=>{"postal_code"=>"555-0000", "prefecture_id"=>"9", "city"=>"Gemeinde", "block_number"=>"Adresse", "building_name"=>"Gebäudename", "phone_number"=>"09012345678"}, "token"=>"tok_3b5890d13fb07a96a6cf2fa832e0", "controller"=>"orders", "action"=>"create", "id"=>"3"} permitted: false>

Wie Sie aus der zweiten Hälfte sehen können, "token"=>"tok_3b5890d13fb07a96a6cf2fa832e0" Das "Token" war fest in den "Params"! !! !!

Die Token sind gut generiert!

Schauen wir uns als nächstes den aktuellen Status des Controllers an.

****_controller.rb (Teilauszug)


  def order_params
    params.require(:item_order).permit(:token, :postal_code, :prefecture_id, :city, :block_number, :building_name, :phone_number).merge(item_id: @item[:id], user_id: current_user.id)
  end

  def set_item
    @item = Item.find(params[:id])
  end

  def pay_item
    Payjp.api_key = ENV["PAYJP_SECRET_KEY"]
    Payjp::Charge.create(
      amount: @item.selling_price,
      card: order_params[:token],
      currency:'jpy'
    )
  end

Wie für die aktuelle Beschreibung, Es empfängt : token in: item_order in params alsorder_params [: token]. Es bedeutet das.

Lassen Sie uns dies nun erneut überprüfen, indem Sie "order_params" in "binding.pry" eingeben.

pry(#<OrdersController>)> order_params
=> <ActionController::Parameters {"postal_code"=>"555-0000", "prefecture_id"=>"9", "city"=>"Gemeinde", "block_number"=>"Adresse", "building_name"=>"Gebäudename", "phone_number"=>"09012345678", "item_id"=>3, "user_id"=>3} permitted: true>"building_name"=>"Gebäudename", "phone_number"=>"09012345678"} permitted: false>

Es gibt kein "Token"! !! !! !! !! !! !!

params.require(:item_order).permit(:token, ~~~~)

Warum schreibst du so mit "erfordern" und "erlauben"? ?? ??

Lösung

Als ich mit "bindng.pry" nachgesehen habe, konnte ich bestätigen, dass "Token" generiert wurde, sodass beim Verschieben des generierten Tokens ein Problem aufgetreten ist. Der Speicherort, an dem derzeit "Token" generiert wird, befindet sich außerhalb von "item_order" und direkt unter "params" Die Position des "Tokens" war in erster Linie anders.

Versuchen Sie in binding.pry , params [: token] einzugeben,

pry(#<OrdersController>)> params[:token]
=> "tok_14078502197e031107d18bb7e428"

Wird rauskommen.

Es war also notwendig, es so zu schreiben.

****_controller.rb


  def order_params
    params.require(:item_order).permit(:postal_code, :prefecture_id, :city, :block_number, :building_name, :phone_number).merge(item_id: @item[:id], user_id: current_user.id, token: params[:token])
  end

Es ist ein bisschen lang, aber ich schreibe "Token" innerhalb der "Merge" -Methode. Es ist eine Beschreibung, um "order_params" anstelle von "item_order" anzuziehen.

Auf diese Weise konnte ich auf "order_params" zugreifen. Wenn Sie also die Beschreibung ändern, überprüfen Sie dies mit "binding.pry".

pry(#<OrdersController>)> order_params
=> <ActionController::Parameters {"postal_code"=>"333-0000", "prefecture_id"=>"13", "city"=>"Gemeinde", "block_number"=>"Adresse", "building_name"=>"Gebäudename", "phone_number"=>"09012345678", "item_id"=>3, "user_id"=>3, "token"=>"tok_14078502197e031107d18bb7e428"} permitted: true>

Das ist perfekt ☆ Sie können es jetzt mit order_params [: token] erhalten, und die Zahlung war erfolgreich! !! !!

Zusammenfassung

Verstehe den Aufenthaltsort von "Token"! Verwenden Sie die Zusammenführungsmethode zum Zusammenführen!

Recommended Posts

[Rails] Fehlerbehebung nach PAYJP-Token-Generierung (separate Route)
[Rails / Heroku] Fehlerbehebungsverfahren nach dem Drücken