In this example, we will discuss step by step how to add sadad payment to your rails app using moyasar gem.
- Moyasar Account.
- Moyasar ruby gem.
- Ruby >= 2.1.10 installed.
- Rails gem installed.
-
Create new rails app.
$ rails new sadad-example
-
Add Moyasar ruby gem to your gem file. Then run
bundle install
.gem 'moyasar'
-
Get your secret and publishable keys from Moyasar dashboard.
-
Create new file
config/moyasar.yml
then add your keysdevelopment: secret_key: ' add your key here' publishable_key: ' add your key here' production: secret_key: ' add your key here' publishable_key: ' add your key here'
-
Create new file
config/initializers/moyasar.rb
to configure moyasar gemMOYASAR_CONFIG = YAML.load(ERB.new(File.read("#{Rails.root}/config/moyasar.yml")).result)[Rails.env] Moyasar.api_key = MOYASAR_CONFIG['secret_key']
-
Start rails server
rails s
-
We will create simple controller to demonstrate payment integration
rails g controller requests index create success cancel
-
Edit
config/routes.rb
file to look like belowget 'requests', to: 'requests#index', as: 'requests' post 'requests',to: 'requests#create' get 'requests/success',to: 'requests#success' get 'requests/cancel',to: 'requests#cancel'
-
We will add a simple form to
views/requests/index.html.erb
file with required fields to complete payment request as stated in Moyasar API Documentation.<% unless flash[:error].nil? %> <p style="color:red;"> <%= flash[:error] %></p> <% end %> <% unless flash[:success].nil? %> <p style="color:green;"> <%= flash[:success] %></p> <% end %> <%= form_tag requests_path do %> <%= text_field_tag "username", nil ,placeholder: 'Sadad user name'%> <br/> <%= text_field_tag "amount", nil ,placeholder: 'Amount in SAR' %> <br/> <%= submit_tag "Create Payment"%> <% end %>
-
Edit
controllers/requests_controller#create
method as below:def create begin # Create payment request @payment = Moyasar::Payment.create( # payment amount amount: params[:amount], # payment currency currency: 'SAR', # payment description description: 'test payment', source: { # payment type . Sadad in our context type: 'sadad', # Sadad username username: params[:username], # Redirect URL in case of payment success success_url: request.base_url + '/requests/success', # Redirect URL in case of payment failure fail_url: request.base_url + '/requests/cancel', }) if @payment.status.eql?("failed") flash[:error] = @payment.source.message redirect_to requests_path else # save payment id in session session[:payment_id] = @payment.id redirect_to @payment.source.transaction_url end rescue Moyasar::InvalidRequestError => e flash[:error] = e.message redirect_to requests_path end end
-
Enter valid sadad payment information then click create payment button, Then If sadad information are valid, you will be redirected to sadad page to complete your payment.
-
If payment requeste completed successfully you will be redirected to success URL.
-
Edit
controllers/requests_controller#success
to handle payment success as below:def success flash[:success] = "Payment processed successfully" redirect_to requests_path end
-
If payment failed you will be redirected to cancel URL.
-
Edit
controllers/requests_controller#cancel
to handle payment failure as below:def cancel # Fetch payment to get failure message @payment = Moyasar::Payment.fetch(session[:payment_id]) flash[:error] = @payment.source.message redirect_to requests_path end