verifyFundsAndCreateTransfer
A closure to verify sender funds and create a transfer
Overview
+-------------+ +----------+ +------------+
| Customer |----(1)--->| Customer |----(2)--->| ReadyRemit |
| Application |<---(7)----| API (4) |<---(3)----| API |
+-------------+ +----------+ +------------+
| | |
| | | +------------+
| | ---------(5)--->| ReadyRemit |
| <----------(6)----| API |
| +------------+
|
| +------------+
-----------(8)--->| ReadyRemit |
| SDK |
+------------+- Customer application makes a network request to the Customer API to initiate the creation of a transfer
- Customer API makes a network request to the ReadyRemit API to read quote details
- ReadyRemit API returns the quote details or an error
- Customer API makes performs additional prerequisites, such as verification of funds
- Customer API makes a network request to the ReadyRemit API to create a transfer
- ReadyRemit API returns the transfer details or an error
- Customer API returns the transfer details or an error
- Customer application returns the transfer details or throws an error
Return Type
public protocol TransferDetails {
var transferId: String { get }
}Sample Implementation
private func verifyFundsAndCreateTransfer(
transferRequest: ReadyRemit.TransferRequest
) async throws(ReadyRemitError) -> TransferDetails {
guard let url = URL(string: "https://example.com/v1/verifyFundsAndCreateTransfer") else {
throw URLError(.badURL)
}
var urlRequest = URLRequest(url: url)
urlRequest.httpMethod = "POST"
urlRequest.httpBody = try JSONEncoder().encode(transferRequest)
let (data, urlResponse) = try await URLSession.shared.data(for: urlRequest)
guard let httpURLResponse = urlResponse as? HTTPURLResponse else {
throw URLError(.badServerResponse)
}
switch httpURLResponse.statusCode {
case 200...299:
// CreateTransferDetailsResponse must conform to TransferDetails
return try JSONDecoder().decode(CreateTransferDetailsResponse.self, from: data)
default:
throw ReadyRemitError(code: .none, message: "Insufficient Funds")
}
}Updated 5 months ago
