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
Geben Sie die Testkarteninformationen ein und drücken Sie die Kauftaste. 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 !!!)
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"? ?? ??
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! !! !!
Verstehe den Aufenthaltsort von "Token"! Verwenden Sie die Zusammenführungsmethode zum Zusammenführen!