Square의 Webhooks API를 사용해보기
이번에는 샘플 코드를 기반으로 Webhooks API 사용법을 소개합니다.
설정 정보
Webhooks의 설정은 Square Developer Portal의 Webhooks 탭에서 실시합니다. Webhooks를 활성화하고 URL을 지정합니다. 이것은 POST에서 호출되는 URL을 지정합니다.
URL을 설정하면 Signature Key가 생성됩니다. 통지처의 URL과 함께 사용하므로 기억해 둡니다.
요청 확인
Webhooks는 POST 요청에서 호출됩니다. 그리고 먼저 필요한 것이 요청의 검증입니다. 사용하는 것은 요청 본문과 HTTP_X_SQUARE_SIGNATURE 헤더입니다. 다음은 Ruby의 코드 예제입니다.
callback_body = request.body.string
callback_signature = request.env['HTTP_X_SQUARE_SIGNATURE']
여기에 방금 설정한 Webhooks의 URL(WEBHOOK_URL)과 Signature Key(WEBHOOK_SIGNATURE_KEY)를 사용해 검증을 실시합니다.
string_to_sign = WEBHOOK_URL + callback_body
string_signature = Base64.strict_encode64(OpenSSL::HMAC.digest('sha1', WEBHOOK_SIGNATURE_KEY, string_to_sign))
Digest::SHA1.base64digest(string_signature) == Digest::SHA1.base64digest(callback_signature)
# trueなら検証OK
검증한 결과가 맞으면 문제 없습니다.
JSON 내용 얻기
내용이 잘못되면 요청을 JSON으로 만듭니다.
callback_body_json = JSON.parse(callback_body)
들어있는 내용은 다음과 같습니다.
{
"location_id": "AAABCHDD",
"merchant_id": "JGHJ0343",
"event_type": "PAYMENT_UPDATED",
"entity_id": "Jq74mCczmFXk1tC10GB"
}
entity_id는 거래 ID가 됩니다. location_id와 함께 Square API에서 거래 세부정보를 검색할 수 있습니다. 또한 이 때에는 토큰이 필요합니다.
# Square APIにアクセスして決済情報の詳細を取得します
api_instance = SquareConnect::V1TransactionsApi.new
response = api_instance.retrieve_payment(location_id, payment_id)
이 방법으로 Webhook을 처리할 수 있습니다. 거래 정보를 꺼낼 수 있으면, 자사 시스템과 제휴시키는 것도 어렵지 않을 것입니다.
또한 Webhooks이므로 이벤트를 받는 서버는 인터넷에 공개되어 있어야 합니다. 또한 외부에서 POST 요청을 허용하도록 되어 있어야 합니다.
이번 Ruby의 코드는 goofmint/Square_Webhook_Ruby: Square의 Webhook API를 Ruby에서 사용하기 위한 데모 코드입니다.에 업로드하고 있습니다. Heroku에서도 세울 수 있으므로 쉽게 사용할 수 있어야합니다.
Square Connect API Documentation
Reference
이 문제에 관하여(Square의 Webhooks API를 사용해보기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/goofmint/items/aa41146d5f2023918cf4텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)