ここに記載されているように、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 値が従うべきパターンと同一であることを確認しました。投稿を手動で作成すると機能しますが、この同じ方法で署名を生成しているため、もちろん一致します。
見落としている可能性のあるダイジェスト/署名計算プロセスの詳細はありますか?