SP-APIの暗号化・復号をrailsで行う

スポンサーリンク

現在、仕事でSP-API(selling-partner-api)を使用した開発を行っています。
まだ新しいAPIで不安定要素も多く、試行錯誤しつつ・・ですが
SP-APIで使える暗号化・復号をrailsで行ったので技術メモを残そうと思います。

開発環境

開発環境は、windows10 + WSL + ubuntuになります。
Rails 6.0.3.4
ruby 2.7.2p137

Visual Studio Code
Postman

暗号化

暗号化は下記のように行ってできました。
keyとivは直前にレスポンスで受け取ったものになります。
主にfeed送信の時に使用します。

  # ======================================
  # 暗号化(データを暗号化)
  # ======================================
  def encrypt(feed_data, key, iv) 

    enc = OpenSSL::Cipher.new("AES-256-CBC")
    enc.encrypt

    enc.key = Base64.decode64(key)
    enc.iv = Base64.decode64(iv) unless iv.nil?

    @encrypted_text = ""
    @encrypted_text = enc.update(feed_data) + enc.final

    enc.reset

    @encrypted_text
  end

復号

レポート処理とfeedの結果レポートを受け取る際に使用しました。
レポート結果の詳細もわざわざ復号したら見れますが、個人的にはステータスだけで良いような・・
これは、在庫管理の処理レポートのダウンロード内容と全く同じものでした。
keyとivはレスポンス情報を使用しています。

  # ======================================
  # 復号
  # ======================================
  def decrypt(file, key, iv) 
    dec = OpenSSL::Cipher.new("AES-256-CBC")
    dec.decrypt

    dec.key = Base64.decode64(key)
    dec.iv = Base64.decode64(iv) unless iv.nil?

    cnt = 1
    File.open(file, 'rb') do |fin|
    	File.open("#{file}.plain.txt", 'wb') do |fout|
        fin.each_line do |buff|
          # 復号
          buff = dec.update(buff)
          # 書き込み
          fout.write(buff)
          cnt = cnt + 1
        end
        fout.write(dec.final)
      end
    end
    
    dec.reset
  end

最後に

javaソースの参考資料はあっても、そのままでは動かないものも多く非常に悩まされました。
実際にまだまだ不安定なところもあるので、引き続きやること盛りだくさんです。

POSTMAN使用すると一通りのAPIをCALL出来るようになりましたが
暗号化と復号はやってくれないようなので(やりかたわからないだけ?)
そこはJAVAソースコード見て、見よう見まねでrails版を作成しました。

以前、yahooAPIのレポート処理等の実装では、暗号化・復号などの処理がなかったと思うので
結構重いことやるんだなぁ・・という風に思いました。

参考
https://github.com/amzn/selling-partner-api-docs/blob/main/guides/use-case-guides/reports-api-use-case-guide-2020-09-04.md
https://github.com/amzn/selling-partner-api-docs/blob/main/guides/use-case-guides/feeds-api-use-case-guide-2020-09-04.md

▼ランキング参加しています。よろしければ下記クリック頂けると嬉しいです。
にほんブログ村 IT技術ブログ IT技術メモへ
にほんブログ村

スポンサーリンク
広告
広告

フォローする