class Sumsub::Request
Constants
- PRODUCTION_URL
- TEST_URL
Attributes
Public Class Methods
# File lib/sumsub/request.rb, line 8 def initialize( token: Sumsub.configuration.token, secret_key: Sumsub.configuration.secret_key, production: Sumsub.configuration.production ) @token = token @secret_key = secret_key @url = production ? PRODUCTION_URL : TEST_URL end
Public Instance Methods
API docs: developers.sumsub.com/api-reference/#adding-an-id-document To understand how the body was build manually bellow: roytuts.com/boundary-in-multipart-form-data/ Sumsub::Struct::DocumentMetadata
can be used as metadata.
# File lib/sumsub/request.rb, line 32 def add_id_doc(applicant_id, metadata, file_path: nil) resource = "applicants/#{applicant_id}/info/idDoc" boundary = '----XYZ' body = + '--' + boundary + "\r\n" body += 'Content-Disposition: form-data; name="metadata"' body += "\r\nContent-type: application/json; charset=utf-8\r\n\r\n" body += metadata.to_json body += "\r\n" body += '--' + boundary if file_path content = File.read(file_path) file_name = File.basename(file_path) content_type = MIME::Types.type_for(file_name).first.content_type body += "\r\n" body += 'Content-Disposition: form-data; name="content"; filename="' + file_name + '"' body += "\r\nContent-type: #{content_type}; charset=utf-8\r\n\r\n" body += content + "\r\n" body += '--' + boundary + '--' else body += '--' end headers = build_header( resource, body: body, content_type: 'multipart/form-data; boundary=' + boundary ).merge({ "X-Return-Doc-Warnings": true }) response = HTTP.headers(headers) .post("#{@url}/resources/#{resource}", body: body) parse_response(response) end
API docs: developers.sumsub.com/api-reference/#changing-top-level-info Sumsub::Struct::ApplicantUpdate
can be used as applicant_new_values.
# File lib/sumsub/request.rb, line 133 def change_applicant_top_level_info(applicant_new_values) resource = "applicants/" headers = build_header(resource, method: 'PATCH', body: applicant_new_values.to_json) response = HTTP.headers(headers) .patch("#{@url}/resources/#{resource}", json: applicant_new_values) parse_response(response) end
API docs: developers.sumsub.com/api-reference/#creating-an-applicant Sumsub::Struct::Applicant
can be used as applicant.
# File lib/sumsub/request.rb, line 20 def create_applicant(lvl_name, applicant) resource = "applicants?levelName=#{lvl_name}" headers = build_header(resource, body: applicant.to_json) response = HTTP.headers(headers) .post("#{@url}/resources/#{resource}", json: applicant) parse_response(response) end
API docs: developers.sumsub.com/api-reference/#access-tokens-for-sdks
# File lib/sumsub/request.rb, line 143 def get_access_token(user_id, levelName, ttl_in_seconds: nil, external_action_id: nil) resource = "accessTokens?userId=#{user_id}&levelName=#{levelName}&ttlInSecs=#{ttl_in_seconds}&external_action_id=#{external_action_id}" headers = build_header(resource, method: 'POST') response = HTTP.headers(headers) .post("#{@url}/resources/#{resource}") parse_response(response) end
API docs: developers.sumsub.com/api-reference/#getting-applicant-data
# File lib/sumsub/request.rb, line 80 def get_applicant_data(applicant_id, as_external_user_id: false) resource = as_external_user_id ? "applicants/-;externalUserId=#{applicant_id}/one" : "applicants/#{applicant_id}/one" headers = build_header(resource, method: 'GET') response = HTTP.headers(headers) .get("#{@url}/resources/#{resource}") parse_response(response) end
API docs: developers.sumsub.com/api-reference/#getting-applicant-status-api
# File lib/sumsub/request.rb, line 70 def get_applicant_detailed_status(applicant_id) resource = "applicants/#{applicant_id}/requiredIdDocsStatus" headers = build_header(resource, method: 'GET') response = HTTP.headers(headers) .get("#{@url}/resources/#{resource}") parse_response(response) end
API docs: developers.sumsub.com/api-reference/#getting-applicant-status-sdk
# File lib/sumsub/request.rb, line 92 def get_applicant_status(applicant_id) resource = "applicants/#{applicant_id}/status" headers = build_header(resource, method: 'GET') response = HTTP.headers(headers) .get("#{@url}/resources/#{resource}") parse_response(response) end
API docs: developers.sumsub.com/api-reference/#getting-document-images
# File lib/sumsub/request.rb, line 112 def get_document_image(inspection_id, image_id) resource = "inspections/#{inspection_id}/resources/#{image_id}" headers = build_header(resource, method: 'GET') response = HTTP.headers(headers) .get("#{@url}/resources/#{resource}") parse_response(response) end
API docs: developers.sumsub.com/api-reference/#requesting-an-applicant-check
# File lib/sumsub/request.rb, line 102 def request_applicant_check(applicant_id, reason: nil) resource = "applicants/#{applicant_id}/status/pending?reason=#{reason}" headers = build_header(resource) response = HTTP.headers(headers) .post("#{@url}/resources/#{resource}") parse_response(response) end
API docs: developers.sumsub.com/api-reference/#resetting-an-applicant
# File lib/sumsub/request.rb, line 122 def reset_applicant(applicant_id) resource = "applicants/#{applicant_id}/reset" headers = build_header(resource) response = HTTP.headers(headers) .post("#{@url}/resources/#{resource}") parse_response(response) end
API docs: developers.sumsub.com/api-reference/#verifying-webhook-sender Your payload need to be informed as a string.
# File lib/sumsub/request.rb, line 154 def verify_webhook_sender(webhook_secret_key, payload) resource = "inspectionCallbacks/testDigest?secretKey=#{webhook_secret_key}" headers = build_header( resource, method: 'POST', content_type: 'text/plain', accept: 'text/plain', body: payload ) response = HTTP.headers(headers) .post("#{@url}/resources/#{resource}", body: payload) parse_response(response) end
Private Instance Methods
More infos about the required header and the signing strategy: developers.sumsub.com/api-reference/#app-tokens
# File lib/sumsub/request.rb, line 174 def build_header( resource, body: nil, method: 'POST', content_type: 'application/json', accept: 'application/json' ) epoch_time = Time.now.to_i access_signature = Sumsub::MessageSigner.sign( time: epoch_time, resource: resource, body: body, method: method, ) { "X-App-Token": @token.encode("UTF-8"), "X-App-Access-Sig": access_signature.encode("UTF-8"), "X-App-Access-Ts": epoch_time.to_s.encode("UTF-8"), "Accept": accept, "Content-Type": content_type } end
# File lib/sumsub/request.rb, line 198 def parse_response(response) Sumsub::Parser.parse(response.to_s) end