J'apprends actuellement la programmation, et je garderai ce que je veux noter pour moi.
(C'est une continuation de ce que j'ai publié la dernière fois, ou quelque chose comme un autre itinéraire.) [Rails] Résolution d'erreur lors de la génération de jetons avec PAYJP
Entrez les informations de la carte de test, appuyez sur le bouton d'achat, A été affiché.
Je vais l'omettre car il est décrit dans le contenu précédent, Quand j'ai écrit «console.log ()» dans la description du JavaScript de génération de jeton et vérifié «l'état», il était «200», et il a été confirmé que la génération de jeton était réussie. (Pas de jetons ?? Cela ne devrait pas être le cas !!!)
J'ai utilisé binding.pry
pour vérifier le contenu de params
pour trouver la cause de l'erreur.
pry(#<OrdersController>)> params
=> <ActionController::Parameters {"authenticity_token"=>"uRxJ+Ho4c2vi4Pc8MrK/s7UhNbujnVBDt7qjJ11pFpeHWDMltGl3eu/ls94DaALSPNfIpoMtUd4aeOcs4Z8Y4w==", "item_order"=>{"postal_code"=>"555-0000", "prefecture_id"=>"9", "city"=>"Municipalité", "block_number"=>"adresse", "building_name"=>"Nom du bâtiment", "phone_number"=>"09012345678"}, "token"=>"tok_3b5890d13fb07a96a6cf2fa832e0", "controller"=>"orders", "action"=>"create", "id"=>"3"} permitted: false>
Comme vous pouvez le voir dans la seconde moitié,
"token"=>"tok_3b5890d13fb07a96a6cf2fa832e0"
Le «jeton» était fermement dans les «paramètres»! !! !!
Les jetons sont bien générés!
Ensuite, jetons un coup d'œil à l'état actuel du contrôleur.
****_controller.rb (extrait partiel)
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
Quant à la description actuelle,
Il reçoit : token
dans: item_order
dans params
comme ʻorder_params [: token] `.
Cela signifie que.
Maintenant, revérifions en tapant ʻorder_params dans
binding.pry`.
pry(#<OrdersController>)> order_params
=> <ActionController::Parameters {"postal_code"=>"555-0000", "prefecture_id"=>"9", "city"=>"Municipalité", "block_number"=>"adresse", "building_name"=>"Nom du bâtiment", "phone_number"=>"09012345678", "item_id"=>3, "user_id"=>3} permitted: true>"building_name"=>"Nom du bâtiment", "phone_number"=>"09012345678"} permitted: false>
Il n'y a pas de «jeton»! !! !! !! !! !! !!
params.require(:item_order).permit(:token, ~~~~)
Pourquoi écrivez-vous avec "require" et "permit" comme ça? ?? ??
Lorsque j'ai vérifié avec «bindng.pry», j'ai pu confirmer que «token» a été généré, donc il y avait un problème avec la façon de déplacer le token généré.
L'emplacement où token
est actuellement généré est en dehors de ʻitem_order et directement sous
params`, donc
L'emplacement du «jeton» était différent en premier lieu.
Dans binding.pry
, essayez d'entrer params [: token]
,
pry(#<OrdersController>)> params[:token]
=> "tok_14078502197e031107d18bb7e428"
Sortira.
Il fallait donc l'écrire comme ça.
****_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
C'est un peu long, mais j'écris token
dans la méthode merge
.
C'est une description pour attirer vers ʻorder_params au lieu de ʻitem_order
.
En faisant cela, j'ai pu attirer vers ʻorder_params, donc après avoir changé la description, vérifiez avec
binding.pry`,
pry(#<OrdersController>)> order_params
=> <ActionController::Parameters {"postal_code"=>"333-0000", "prefecture_id"=>"13", "city"=>"Municipalité", "block_number"=>"adresse", "building_name"=>"Nom du bâtiment", "phone_number"=>"09012345678", "item_id"=>3, "user_id"=>3, "token"=>"tok_14078502197e031107d18bb7e428"} permitted: true>
C'est parfait ☆ Vous pouvez maintenant le recevoir à ʻorder_params [: token] `, et le paiement a réussi! !! !!
Comprenez où se trouve token
!
Utilisez la méthode merge
pour fusionner!