質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
AWS Lambda

AWS Lambdaは、クラウド上でアプリを実行できるコンピューティングサービス。サーバーのプロビジョニングや管理を要せず複数のイベントに対してコードを実行します。カスタムロジック用いた他AWSサービスの拡張やAWSの規模やパフォーマンスを用いたバックエンドサービスを作成できます。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

解決済

1回答

1572閲覧

AWSでのpayjpのトークンが取得できない

miki623

総合スコア5

AWS Lambda

AWS Lambdaは、クラウド上でアプリを実行できるコンピューティングサービス。サーバーのプロビジョニングや管理を要せず複数のイベントに対してコードを実行します。カスタムロジック用いた他AWSサービスの拡張やAWSの規模やパフォーマンスを用いたバックエンドサービスを作成できます。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

0クリップ

投稿2020/10/01 04:40

現在、オリジナルアプリをAWSとherokuにデプロイしている状態です。
何か足りない記述があれば追記いたしますので、ご指示ください。

AWSとherokuの本番環境でトークン決済ができない

ローカルでは問題なく動作しております。
ひとつ前に作成したアプリケーションに、同じようにトークン決済機能をつけておりましたが
そのアプリはherokuでは問題なく決済処理ができていました。
今回のアプリではheroku、AWS共に同じようなエラーが出ています。
前回herokuで処理できていたので、記述は問題ないと自分では思っているのですが
もしその辺りも何か不自然に感じられるコードがありましたら教えていただきたいです…。

payjpの秘密鍵と公開鍵は前回のアプリの時と同じものを同じように環境変数に設定しております。

エラー

herokuでのエラー

イメージ説明

AWSでのエラー

イメージ説明
イメージ説明

本来の(ローカルでの)パラメーター

イメージ説明

rails側のコード

ruby

1# 取引のコントローラー 2class TransactionsController < ApplicationController 3 4 before_action :set_item, only:[:index, :create, :pay_item, :edit, :update] 5 6 7 def index 8 if buyer_signed_in? 9 @transaction = DealTransaction.new 10 else 11 redirect_to new_buyer_registration_path 12 end 13 end 14 15 def create 16 @transaction = DealTransaction.new(transaction_params) 17 if @transaction.valid? 18 pay_item 19 @transaction.save 20 @buyer = current_buyer 21 redirect_to buyer_path(@buyer) 22 23 else 24 render :index 25 end 26 end 27 28 29 private 30 31 def set_item 32 @item = Item.find(params[:item_id]) 33 end 34 35 def transaction_params 36 params.require(:deal_transaction).permit(:postal_code, :shipping_area_id, :city, :house_number, :building_name, :phone_number).merge(item_id: @item.id,seller_id: @item.seller_id, buyer_id: current_buyer.id, token: params[:token]) 37 end 38 39 def pay_item 40 Payjp.api_key = ENV["PAYJP_SECRET_KEY"] 41 Payjp::Charge.create( 42 amount: @item.price, 43 card: params[:token], 44 currency: 'jpy' 45 ) 46 end 47 48 49end

DealTransactionはformオブジェクトを使っております

ruby

1class DealTransaction 2 3 include ActiveModel::Model 4 attr_accessor :buyer_id, :seller_id, :item_id, :postal_code, :shipping_area_id, :city, :house_number, :building_name, :phone_number, :token 5 6 VALID_POSTAL_REGIX = /\A\d{3}[-]\d{4}\z/ 7 VALID_PHONE_REGIX = /\A\d{,11}\z/ 8 9 10 with_options presence: true do 11 validates :postal_code, format: { with: VALID_POSTAL_REGIX, message: "Input correctly"} 12 validates :shipping_area_id 13 validates :city 14 validates :house_number 15 validates :token 16 validates :phone_number, format: { with: VALID_PHONE_REGIX, message: "can't be blank"} 17 end 18 19 def save 20 deal = Deal.create(buyer_id: buyer_id,seller_id: seller_id, item_id: item_id) 21 22 Transaction.create(deal_id: deal.id, postal_code: postal_code, shipping_area_id: shipping_area_id, city: city, house_number: house_number, 23 building_name: building_name, phone_number: phone_number) 24 end 25 26 27end

javascriptの記述がこちらです

javascript

1 2const pay = () => { 3 Payjp.setPublicKey(process.env.PAYJP_PUBLIC_KEY); 4 const form = document.getElementById("charge-form"); 5 form.addEventListener("submit", (e) => { 6 e.preventDefault(); 7 8 const formResult = document.getElementById("charge-form"); 9 const formData = new FormData(formResult); 10 const card = { 11 number: formData.get("deal_transaction[number]"), 12 exp_month: formData.get("deal_transaction[exp_month]"), 13 exp_year: `20${formData.get("deal_transaction[exp_year]")}`, 14 cvc: formData.get("deal_transaction[cvc]"), 15 }; 16 17 Payjp.createToken(card, (status, response) => { 18 if (status === 200) { 19 const token = response.id; 20 const renderDom = document.getElementById("charge-form"); 21 const tokenObj = `<input value=${token} type="hidden" name='token'>`; 22 renderDom.insertAdjacentHTML("beforeend", tokenObj); 23 24 document.getElementById("card-number").removeAttribute("name"); 25 document.getElementById("card-exp-month").removeAttribute("name"); 26 document.getElementById("card-exp-year").removeAttribute("name"); 27 document.getElementById("card-cvc").removeAttribute("name"); 28 29 document.getElementById("charge-form").submit(); 30 document.getElementById("charge-form").reset(); 31 } else { 32 const token = ''; 33 const renderDom = document.getElementById("charge-form"); 34 const tokenObj = `<input value=${token} type="hidden" name='token'>`; 35 renderDom.insertAdjacentHTML("beforeend", tokenObj); 36 document.getElementById("charge-form").submit(); 37 document.getElementById("charge-form").reset(); 38 } 39 }); 40 }); 41}; 42 43window.addEventListener("load", pay);

これは反映させられている環境変数が反映していないために起こっているのでしょうか?
長々と恐れ入りますが、どなたか問題箇所・直すべき記述等お分かりになる方がいらっしゃいましたら
ご教示いただけましたら幸いです。
何卒よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hatsu

2020/10/03 07:09

> ローカルでは問題なく動作しております とのことなので、環境変数あたりが正しく設定されているかが気になっています。 例えばAWSサーバーに入って、(問題なければ) rails consoleでENV["PAYJP_SECRET_KEY"] と打ったときに正しく値が入っているかなどわかりますでしょうか。
miki623

2020/10/03 14:18

有り難うございます! https://gyazo.com/43078d505425b7ac3a3e67aaad1b4224 このようなかたちで検索すれば出てくることは出てきます… これは反映していると思っておいて良いのでしょうか? rails console コマンドはエラーが出てしまいました。 原因は調べております… ご確認のほどお願いいたします。
hatsu

2020/10/03 15:07

ちなみに環境変数は.envで管理されているか、credentials.ymlで管理されているかはわかりますでしょうか?
miki623

2020/10/04 11:38

お返事が遅くなり、申し訳ございません。 環境変数はenvで管理しております!
guest

回答1

0

ベストアンサー

ステータスは200で帰ってきてるので、環境変数の設定は問題ないのかと思います。

paramsを見るとtokenの中身がhiddenの文字列になっていそうなので、javascriptが原因かなーと思います。。。

tokenを作成するところで、hiddenだけダブルクォーテーションなので、シングルにするとどうなりますかね?

うまくいかなければ、フォームを作成する記述と、valueを入れる記述を分けるとかしてみるとどうでしょう?

投稿2020/10/04 07:13

kokitail

総合スコア135

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問