# Process Payments

## Overview

This section provides an overview of how to **process payments** using Ryft once a Payment Session has been created. It covers the necessary steps to set up a payment processing system and handle the results of payment transactions.

The payment processing procedure follows directly after the creation of a Payment Session, which returns a `clientSecret` value required to finalise the payment

If a Payment Session is not created, the payment cannot be completed. Please refer to the [Initiate Payments](/documentation/get_started/initiate_payments) section for more details on creating a Payment Session.

From this point, the payment can be processed either:

- using one of the Ryft SDKs, which provide a secure and seamless way to handle payment information and interactions with customers or
- through a [**server-to-server**](/documentation/get_started/process_payments/server_to_server) approach, provided the merchant is PCI compliant.


The SDK is the recommended approach for most merchants compared to server-to-server integration, as it simplifies the integration process and reduces PCI compliance requirements. It enables merchants to securely handle payment information without directly managing sensitive data.

In practice, the SDK provides a secure way to collect payment details from customers, so that when they click the "Pay" button on your checkout page, you will receive:

- An **immediate response** from the SDK indicating whether the transaction was successful;
- An **asynchronous webhook event** that you can use to record the transaction in your system.


## SDK Languages

We currently provide an SDK for the following environments:

**Client-Side Platforms**

- [JavaScript/TypeScript](https://web-sdk.ryftpay.com/docs/web/latest/documents/quick-start.html)
- [React](https://web-sdk.ryftpay.com/docs/react/latest/documents/quick-start.html)
- [Android](https://github.com/RyftPay/ryft-android)
- [iOS](https://github.com/RyftPay/ryft-ios)


**Server-Side Technologies**

- [Node.js](https://github.com/RyftPay/ryft-node)
- [Python](https://github.com/RyftPay/ryft-python)
- [.NET](https://github.com/RyftPay/ryft-dotnet)
- [PHP](https://github.com/RyftPay/ryft-php)


## Further Reading

Embedded SDK
Learn how to integrate the Ryft Embedded SDK into your web application for seamless payment processing.

Android SDK
Discover how to set up and use the Ryft Android SDK for processing payments in your Android applications.

iOS SDK
Find out how to integrate the Ryft iOS SDK into your iOS applications for secure payment processing.

Server-to-Server Integration
Explore how to process payments using a server-to-server approach with Ryft.

MOTO
Understand how to process Mail Order and Telephone Order (MOTO) payments using Ryft.

SDK Error Handling
Learn how to handle errors effectively when using the Ryft SDKs.

Test Cards
Access a list of test card numbers to use in your development and testing environments.