MuffinMan
MuffinMan is a ruby interface to the Amazon Selling Partner API. For more information on registering to use the Selling Partner API, see Amazon's documentation
As of now, this gem only supports portions of the following APIs with more to come:
create_product_review_and_seller_feedback_solicitation
catalog_items
reports
product_fees
product_pricing
fulfillment_inbound
fulfillment_outbound
feeds
notifications
listings
Installation
Add this line to your application's Gemfile:
gem 'muffin_man'
And then execute:
$ bundle install
Or install it yourself as:
$ gem install muffin_man
Usage
To make a call to the Amazon Selling Partner API, define your credentials and make a call as shown:
require 'muffin_man'
credentials = {
refresh_token: LWA_REFRESH_TOKEN,
client_id: CLIENT_ID,
client_secret: CLIENT_SECRET,
aws_access_key_id: AWS_ACCESS_KEY_ID,
aws_secret_access_key: AWS_SECRET_ACCESS_KEY,
region: REGION, # This can be one of ['na', 'eu', 'fe'] and defaults to 'na'
sts_iam_role_arn: STS_IAM_ROLE_ARN, # Optional
access_token_cache_key: SELLING_PARTNER_ID, # Optional if you want access token caching
}
client = MuffinMan::Solicitations::V1.new(credentials)
response = client.create_product_review_and_seller_feedback_solicitation(amazon_order_id, marketplace_ids)
JSON.parse(response.body)
You can optionally use Amazon's sandbox environment by specifying client = MuffinMan::Solicitations.new(credentials, sandbox = true)
Set Custom Logger
By default MuffinMan will log to standard out. To customize the logger used:
MuffinMan.configure do |config|
config.logger = Logger.new('log/sp-api.log')
end
Access Token Caching
You can save and retrieve the LWA refresh token by defining a lambda in your initializers.
For example, if you are using Redis as your cache you could define:
@@redis = Redis.new
MuffinMan.configure do |config|
config.save_access_token = -> (access_token_cache_key, token) do
@@redis.set("SP-TOKEN-#{access_token_cache_key}", token['access_token'], ex: token['expires_in'])
end
config.get_access_token = -> (access_token_cache_key) { @@redis.get("SP-TOKEN-#{access_token_cache_key}") }
end
Retrieiving the refresh token
To retrieve the refresh token from an LWA Website authorization workflow, you can use the LWA helper:
# Get your auth code first, either through the Website oauth flow or Authorization API
credentials = {
client_id: CLIENT_ID,
client_secret: CLIENT_SECRET,
aws_access_key_id: AWS_ACCESS_KEY_ID,
aws_secret_access_key: AWS_SECRET_ACCESS_KEY,
sts_iam_role_arn: STS_IAM_ROLE_ARN, # Optional
scope: 'sellingpartnerapi::migration' # Grantless scope for MWS migration
}
client = MuffinMan::Authorization::V1.new(credentials)
resp = JSON.parse(client.get_authorization_code(seller_id, developer_id, mws_auth_token).body)
auth_code = resp['payload']['authorizationCode']
# Then query retrieve the refresh token to store
refresh_token = MuffinMan::Lwa::AuthHelper.get_refresh_token(CLIENT_ID, CLIENT_SECRET, auth_code)
Debugging
To use Typheous' verbose mode set env variable MUFFIN_MAN_DEBUG=true
Contributing
Bug reports and pull requests are welcome on GitHub at https://github.com/patterninc/muffin_man. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the code of conduct.
License
The gem is available as open source under the terms of the MIT License.
Code of Conduct
Everyone interacting in the MuffinMan project's codebases, issue trackers, chat rooms and mailing lists is expected to follow the code of conduct.