Skip to content

Instantly share code, notes, and snippets.

@paulgrammer
Created November 21, 2023 09:17
Show Gist options
  • Save paulgrammer/8359e42fbd92eb737b48ae6974cb3ab8 to your computer and use it in GitHub Desktop.
Save paulgrammer/8359e42fbd92eb737b48ae6974cb3ab8 to your computer and use it in GitHub Desktop.
require 'aws-sigv4'
require 'httparty'
AWS_API_ENDPONT = 'https://sandbox.sellingpartnerapi-na.amazon.com'
# https://stackoverflow.com/questions/65669679/amazon-selling-partner-api-signed-request-ruby-implementation
module Net::HTTPHeader
def capitalize(name)
name
end
private :capitalize
end
class AWSSellerMigration
def get_auth_token
begin
response = HTTParty.post('http://api.amazon.com/auth/o2/token', body: {
"grant_type": "client_credentials",
"scope": "sellingpartnerapi::migration",
"client_id": "" #CLIENT_ID,
"client_secret": "" #CLIENT_SECRET
})
response['access_token']
rescue
end
end
def get_request_headers(request_url)
signer = Aws::Sigv4::Signer.new(
service: 'execute-api',
region: 'us-east-1',
# static credentials
access_key_id: "" #ACCESS_KEY_ID,
secret_access_key: ""
)
signature = signer.sign_request(
http_method: 'GET',
url: request_url,
)
signature.headers.merge({
'x-amz-access-token' => get_auth_token,
'user-agent' => 'App/1.0 (Language=Ruby)'
})
end
def get_authorization_code
request_url = "#{AWS_API_ENDPONT}/authorization/v1/authorizationCode"
begin
headers = get_request_headers(request_url)
response = HTTParty.get(request_url, headers: headers, query: {
"developerId" => "",
"mwsAuthToken" => "",
"sellingPartnerId" => ""
})
response['payload']['authorizationCode']
rescue
end
end
def get_refresh_token
begin
response = HTTParty.post('https://api.amazon.com/auth/o2/token', body: {
"grant_type": "authorization_code",
"code": get_authorization_code,
"client_id": "",
"client_secret": "",
"redirect_uri": "https://link_to_receive refresh token"
})
puts response
rescue
end
end
def refreshed_token
data = {
"grant_type" => "refresh_token",
"refresh_token" => "",
"client_id" => "",
}
response = HTTParty.post("https://api.amazon.com/auth/o2/token", body: data)
puts response
end
end
migration = AWSSellerMigration.new
migration.refreshed_token
# puts migration.get_refresh_token
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment