[JAVA] [Rails] Résolution des erreurs après la génération du jeton PAYJP (itinéraire séparé)

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

J'ai introduit PAYJP et généré des jetons, mais le paiement n'a pas réussi ...

Entrez les informations de la carte de test, appuyez sur le bouton d'achat, スクリーンショット 2020-09-20 10.14.43.png 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 !!!)

Comprendre la situation actuelle

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? ?? ??

Solution

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! !! !!

Résumé

Comprenez où se trouve token! Utilisez la méthode merge pour fusionner!

Recommended Posts

[Rails] Résolution des erreurs après la génération du jeton PAYJP (itinéraire séparé)
[Rails / Heroku] Procédure de résolution d'erreur après push