submitTransfer
Overview
+-------------+ +----------+ +------------+
| Customer |----(2)--->| Customer |----(3)--->| PayMitto |
| Application |<---(8)----| API(5) |<---(4)----| API |
+-------------+ +----------+ +------------+
| | |
| | | +------------+
| | ---------(6)--->| PayMitto |
| <----------(7)----| API |
| +------------+
|
| +------------+
<----------(1)----| PayMitto |
-----------(9)--->| SDK |
+------------+- SDK calls back the
submitTransfercallback with the transfer request data to send the transfer. - 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 PayMitto API to read quote details.
- PayMitto 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 PayMitto API to create a transfer.
- PayMitto 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
Parameter passed through the callback
| Type | Description |
|---|---|
| PayMittoTransferRequest | A representation of the main identifiers to build and send the transfer. |
Expected objects to be sent by the app in the callback response to the sdk (TransferSubmissionResult)
| Parameter | Type | Description |
|---|---|---|
| transferId | String | The transfer ID. |
| PayMittoError | PayMittoError | A generic representation of an error for the PayMitto SDK. |
Sample Implementation
private val submitTransfer: suspend (PayMittoTransferRequest) -> TransferSubmissionResult = { transferRequest: PayMittoTransferRequest ->
try {
// calls the Quote Details API
val quoteDetails = readQuoteDetails(transferRequest.quoteHistoryId)
// calls your funtion to call the server
submitPayMittoTransfer(
transferRequest = transferRequest,
quoteDetails = quoteDetails
)
} catch (e: QuoteDetailsException) {
TransferSubmissionResult.Error(e.error)
}
}
/**
* Reloads a quote before trying to submit a transfer.
*/
private suspend fun readQuoteDetails(quoteHistoryId: String): ReadQuoteDetailsResponse {
val response = service.readQuoteDetails(
url = "https://sandbox-api.readyremit.com/v1/quote/$quoteHistoryId",
token = "Bearer $tokenValue",
acceptLanguage = PayMitto.getSdkLanguageLocale()?.getLocalizationForApi()
?: Localization.enUS.getLocalizationForApi(), // or the language you set in PayMittoConfiguration
contentType = "application/json"
)
if (response.isSuccessful) {
return response.body()!!
} else {
// Parsing json error response
val errorResponse = mapError(response.errorBody()?.string())
throw QuoteDetailsException(
PayMittoError(
errorResponse.code,
errorResponse.message,
errorResponse.description
)
)
}
}
/**
* Submits the transfer.
*/
private suspend fun submitPayMittoTransfer(
transferRequest: PayMittoTransferRequest,
quoteDetails: ReadQuoteDetailsResponse
): TransferSubmissionResult {
// call the API
val response = service.transfer(
token = "Bearer $tokenValue",
transferRequest = TransferRequest(
transferRequest.fields?.map { TransferRequest.Field(it.id, it.type, it.value) },
transferRequest.quoteBy,
transferRequest.quoteHistoryId,
transferRequest.recipientAccountId,
transferRequest.recipientId,
transferRequest.sourceAccountId,
transferRequest.nonce,
quoteDetails.sendAmount.value,
quoteDetails.destinationCountryISO3Code,
quoteDetails.destinationCurrencyISO3Code,
quoteDetails.sourceCurrencyIso3Code,
quoteDetails.transferMethod
)
)
if (response.isSuccessful) {
return TransferSubmissionResult.Success(response.body()!!.transferId)
} else {
// Parsing json error response
val errorResponse = mapError(response.errorBody()?.string())
return TransferSubmissionResult.Error(
PayMittoError(
errorResponse.code,
errorResponse.message,
errorResponse.description
)
)
}
}
