@miyotake31859

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

payjp v2移行できない

解決したいこと

payjpの仕様をv1→v2に変更すること

例)
カード決済アプリを作っています
payjpをv1→v2に変更し
binding.pryでcreateの処理を行なった際
以下のエラーが出ます

発生している問題・エラー

payjpとのやり取りのURL?がv1のまま
POST https://api.pay.jp/v1/tokens 402 (Payment Required)

該当するソースコード

onst pay = () => {
  //環境変数をもとに公開鍵を復号
  const payjp = Payjp('pk_test_780024df40684f31dd0da85d')
  //elementsインスタンスを生成
  const elements = payjp.elements();
  //入力欄ごとにelementインスタンスを生成
  const numberElement = elements.create('cardNumber')
  const cvcElement = elements.create('cardCvc')
  const expiryElement = elements.create('cardExpiry')
  //入力欄をDOM上に表示
  numberElement.mount('#number-form')
  cvcElement.mount('#cvc-form') 
  expiryElement.mount('#expiry-form')
  //フォームの要素を取得
  const form = document.getElementById("charge-form");
  //PAY.JPと通信が成功した場合のみトークンをフォームに埋め込む
  form.addEventListener("submit", (e) => {
    e.preventDefault();
    payjp.createToken(expiryElement).then((response) => {
      if (response.error) {
      } else {
        const token = response.id;
        const renderDom = document.getElementById("charge-form"); 
        const tokenObj = `<input value=${token} name='token' type="hidden"> `;
        renderDom.insertAdjacentHTML("beforeend", tokenObj);
      }
      document.getElementById("charge-form").submit();
    });
  });
};

window.addEventListener("load", pay);

例)

class OrdersController < ApplicationController

  before_action :set_item, only: [:index, :create]
  def index
   
    @order_payment = OrderPayment.new
   
  end

  def create  
binding.pry
      @order_payment= OrderPayment.new(order_params)
  
    if @order_payment.valid?
      Payjp.api_key = "sk_testここは投稿時に消しました"  # 自身のPAY.JPテスト秘密鍵を記述しましょう
      Payjp::Charge.create(
        amount: order_params[:price],  # 商品の値段
        card: order_params[:token],    # カードトークン
        currency: 'jpy'                 # 通貨の種類(日本円)
      )
      @order_payment.save
      redirect_to root_path
    else
      render :index
    end
  end
  


  private

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

  def order_params
    params.require(:order_payment).permit(:post_code, :prefecture_id, :city, :block, 
                               :building, :phone_number)
                           .merge(user_id: current_user.id, item_id: @item_id, token: params[:token]) 
end

indexhtml.erb

<%= form_with model: @order_payment, url: item_orders_path, id: 'charge-form', class: 'transaction-form-wrap',local: true do |f| %>
<%# カード情報の入力 %>
<div class='credit-card-form'>
  <h1 class='info-input-haedline'>
    クレジットカード情報入力
  </h1>
  <div class="form-group">
    <div class='form-text-wrap'>
      <label class="form-text">カード情報</label>
      <span class="indispensable">必須</span>
    </div>
    <div id="number-form" class="input-default"></div>
     <%# ここにフォームが生成されます %>
     
    <div class='available-card'>
      <%= image_tag 'card-visa.gif', class: 'card-logo'%>
      <%= image_tag 'card-mastercard.gif', class: 'card-logo'%>
      <%= image_tag 'card-jcb.gif', class: 'card-logo'%>
      <%= image_tag 'card-amex.gif', class: 'card-logo'%>
    </div>
  </div>
  <div class="form-group">
    <div class='form-text-wrap'>
      <label class="form-text">有効期限</label>
      <span class="indispensable">必須</span>
    </div>
    <div class='input-expiration-date-wrap'>
      <div id="expiry-form" class="input-default"></div>

自分で試したこと

v2の移行のため
viewのヘルパーメゾットを削除し、id
を要素として記述

card.jsも同様記述を変更しました

他に考えられる箇所が思いつかないので
質問させてもらいました。

補足
paramsの返り値がfalse
#<ActionController::Parameters {"authenticity_token"=>"LZGyiS6HF8KI6bheeU0HcJnlxIgIeVd3UYj_wxQHcAw8IpUee6j9z06fzLhtoSAJwa4-Mywl1MyiCrH41GtDOg", "order_payment"=>{"post_code"=>"3130021", "prefecture_id"=>"2", "city"=>"日立", "block"=>"1-1-1", "building"=>"", "phone_number"=>"09012345678"}, "controller"=>"orders", "action"=>"create", "item_id"=>"5"} permitted: false>

order_paramsの返り値がtrue
 #<ActionController::Parameters {"post_code"=>"3130021", "prefecture_id"=>"2", "city"=>"日立", "block"=>"1-1-1", "building"=>"", "phone_number"=>"09012345678", "user_id"=>2, "item_id"=>nil, "token"=>nil} permitted: true>

なのでここも一つの原因かと考えましたが、
どう解消すればいいのか教えてもらえると
ありがたいです

0 likes

No Answers yet.

Your answer might help someone💌