Hey there, fellow developer! Ready to dive into the world of Paycor API integration with Ruby? Let's roll up our sleeves and get coding!
Paycor's API is a powerful tool that lets you tap into a wealth of HR and payroll data. Whether you're building a custom dashboard or automating your HR processes, this guide will help you get up and running in no time.
Before we jump in, make sure you've got:
httparty
and dotenv
gemsFirst things first, let's get our environment ready:
gem install httparty dotenv
Create a .env
file in your project root and add your Paycor credentials:
PAYCOR_CLIENT_ID=your_client_id
PAYCOR_CLIENT_SECRET=your_client_secret
Paycor uses OAuth 2.0 for authentication. Here's a quick way to get your access token:
require 'httparty' require 'dotenv/load' class PaycorAuth include HTTParty base_uri 'https://api.paycor.com' def self.get_token response = post('/oauth2/token', body: { grant_type: 'client_credentials', client_id: ENV['PAYCOR_CLIENT_ID'], client_secret: ENV['PAYCOR_CLIENT_SECRET'] }, headers: { 'Content-Type' => 'application/x-www-form-urlencoded' } ) response.parsed_response['access_token'] end end access_token = PaycorAuth.get_token
Pro tip: In a real-world scenario, you'd want to handle token expiration and refreshing. But let's keep it simple for now!
Now that we've got our token, let's make some requests:
class PaycorAPI include HTTParty base_uri 'https://api.paycor.com' def initialize(token) @options = { headers: { 'Authorization' => "Bearer #{token}" } } end def get_employees self.class.get('/v1/employees', @options) end end api = PaycorAPI.new(access_token) employees = api.get_employees
Paycor's API is packed with useful endpoints. Here are a few you'll likely use:
/v1/employees
: Manage employee data/v1/payroll
: Access payroll information/v1/timeAndAttendance
: Handle time entries/v1/benefits
: Manage employee benefitsLet's expand our PaycorAPI
class with some core functionalities:
class PaycorAPI # ... previous code ... def submit_time_entry(employee_id, date, hours) self.class.post('/v1/timeAndAttendance/timeEntries', body: { employeeId: employee_id, workDate: date, regularHours: hours }.to_json, headers: @options[:headers].merge('Content-Type' => 'application/json') ) end def get_payroll_summary(start_date, end_date) self.class.get("/v1/payroll/summary?startDate=#{start_date}&endDate=#{end_date}", @options) end end
Always expect the unexpected! Here's a simple way to handle errors:
def api_request yield rescue HTTParty::Error => e logger.error "API request failed: #{e.message}" nil end # Usage api_request { api.get_employees }
Testing is crucial. Here's a quick example using RSpec:
RSpec.describe PaycorAPI do let(:api) { PaycorAPI.new('fake_token') } it 'fetches employees' do stub_request(:get, 'https://api.paycor.com/v1/employees') .to_return(status: 200, body: '{"employees": []}', headers: {}) expect(api.get_employees.code).to eq(200) end end
And there you have it! You're now equipped to build a robust Paycor API integration in Ruby. Remember, this is just the beginning – there's so much more you can do with Paycor's API.
Happy coding, and don't hesitate to dive deeper into the Paycor API. The possibilities are endless!