0

ここに記載されているように、X-Square-Signature ヘッダーを一致させようとしています: https://docs.connect.squareup.com/api/connect/v1/#validating-notifications

現在、OpenSSL::HMAC を使用してダイジェストを生成していますが、正しくないようです。

string_to_sign = "#{request.url}#{param_hash.to_json}"
header_signature = request.headers["X-Square-Signature"]

# split into multiple lines for clarity
digest = OpenSSL::Digest.new('sha1')
hmac = OpenSSL::HMAC.digest(digest, ENV["SIGNATURE_KEY"], string_to_sign)

# stripping the newline off the end
hmac_64 = Base64.encode64(hmac).strip

上記の API ドキュメントに記載されている手順に従っているにもかかわらず、何らかの理由で大幅に異なるダイジェストを取得しています。ダイジェストの私の計算は、Python の例とも一致しているようです ( https://github.com/square/connect-api-examples/blob/master/connect-examples/v1/webhooks.py#L75-L87 ) .

string_to_sign 値が従うべきパターンと同一であることを確認しました。投稿を手動で作成すると機能しますが、この同じ方法で署名を生成しているため、もちろん一致します。

見落としている可能性のあるダイジェスト/署名計算プロセスの詳細はありますか?

4

2 に答える 2

1

これが問題の原因かどうかはわかりませんが、request.raw_post代わりにparam_hash.to_json. リクエストの本文は json オブジェクトであり、json オブジェクトには属性の正規の順序付けはありません。param ハッシュを json に戻す場合、属性が元の要求本文と同じ順序であるという保証はありません。

を使用して再試行してください

string_to_sign = "#{request.url}#{request.raw_post}"
于 2015-07-20T17:33:10.290 に答える
0

Square docs の例を複製しようとしているようです。であることを確認したとおっしゃいましたstring_to_signhttp://www.example.com{"merchant_id":"JGHJ0343","event_type":"PAYMENT_UPDATED","entity_id":"Jq74mCczmFXk1tC10GB"}、環境変数SIGNATURE_KEYEXAMPLE_SECRET_123ドキュメントのとおりであることを確認しましたか?

値を置換して環境変数を設定して記述されたコードは、例に示すようにハッシュを計算します。DBP9woNqJpO4d4/ZFE7xveLIGPU=

于 2015-07-20T15:13:36.770 に答える