Q&A
rails5.2
実現したいこと
外部サービスのAPIを利用したい
発生している問題・エラーメッセージ
"HTTP/1.1 500 Internal Server Error\
前提
rubyのnet/httpからPOSTリクエストすると500エラーになりました。
単純なGETやPOSTリクエストは動いております。
今回のリクエストもcurlレベルでは成功してます。
日付の部分をコメントアウトするとrubyからも成功します。
よって
パラメータ(日付)の指定部分がエラーの原因という所まで突きとめましたが、ここから具体的にどう修正して良いかわからずにいます。
日付はISO8061指定で、全て試したが変わらずでした。
よって日付フォーマットではなくハッシュでの渡し方が原因でしょうか?
この辺りよく分からずにいます。
該当のソースコード
ruby
1params = { 2 user_id: user.id, 3 door_id: smart_lock.door_id, 4 schedule_type: 'temporary', 5 temporary_schedule: { 6 start_datetime: '2023-05-01T20:45:20+09:00', #'2023-05-01T20:45:20', #'20230416T163025', #'20230410T163025+0900', #'2023-04-10T13:00:00+0900', 7 end_datetime: '2023-05-02T20:45:20+09:00' #'2023-05-02T20:45:20' #'20230418T163025' #'20230418T163025+0900' #'2023-04-18T13:00:00+0900' 8 }, 9 role: 'guest' 10 } 11 res = http_post(key_uri, params, smar_lock.access_token)
curlでは成功してます↓
curl
1% curl -X POST "https://api.xxxx.com/v3/organizations/O-OOOOO/keys" \ 2 -H "Authorization: Bearer SxxxxxxxxxxxxxxxxxxxxVdIe4g" \ 3 -d user_id=00001 \ 4 -d door_id=A22207314 \ 5 -d schedule_type=temporary \ 6 --data-urlencode temporary_schedule[start_datetime]=2023-04-13T12:30+09:00 \ 7 --data-urlencode temporary_schedule[end_datetime]=2023-04-20T12:30+09:00 \ 8 -d role=guest
試したこと
paramsのうち日付をコメントアウトするとエラーなく成功しました。
ruby
1params = { 2 user_id: user.id, 3 door_id: smart_lock.door_id, 4 schedule_type: 'temporary', 5 role: 'guest' 6 }
POST時のnet/httpのログを出力しました。
日付が変換されておりました。
door_id=A5507314& schedule_type=temporary& temporary_schedule=%7B%3Astart_datetime%3D%3E%222023-05-01T20%3A45%3A20%2B09%3A00%22%2C+%3Aend_datetime%3D%3E%222023-05-02T20%3A45%3A20%2B09%3A00%22%7D &role=guest" -> "HTTP/1.1 500 Internal Server Error\r\n"
補足
外部サービスのAP仕様書のサンプルはこうなっています↓
日付はISO8061指定となっております。
curl -X POST "https://api.hoge.com/v3/organizations/O-ab345-678ij/keys" \ -H "Authorization: Bearer c226b89bce98ebb8f6626be1bda25fb80ac56de6a1f7b3526cbad59e0e4af252" \ -d user_id=U-ab345-678ij \ -d door_id=A1030001 \ -d schedule_type=temporary \ --data-urlencode temporary_schedule[start_datetime]=2017-09-13T12:30+09:00 \ --data-urlencode temporary_schedule[end_datetime]=2017-09-20T12:30+09:00 \ -d role=guest
何が原因でしょうか?
分かる方居ましたら教えていただけると幸いです。
宜しくお願い致します。
回答1件
あなたの回答
tips
プレビュー
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
2023/03/15 04:53
2023/03/16 01:36