Skip to main content
dLocal is a global payments platform that helps you accept local payment methods and cards across emerging markets. TrueMoney is a leading e-wallet in Thailand that provides mobile payment and financial services.

Setup

Please follow the common dLocal instructions to get set up with TrueMoney. Next, make sure to enable TrueMoney as a payment method on your configured account.

Capabilities

Supported countries

Supported currencies

Integration

For TrueMoney, the default integration is through a redirect to a hosted payments page. Start by creating a new transaction with the following required fields.
var transaction = await client.Transactions.CreateAsync(
    transactionCreate: new TransactionCreate()
    {
        Amount = 1299,
        Currency = "THB",
        Country = "TH",
        PaymentMethod =
            TransactionCreatePaymentMethod.CreateRedirectPaymentMethodCreate(
                new RedirectPaymentMethodCreate()
                {
                    Method = "truemoney",
                    Country = "TH",
                    Currency = "THB",
                    RedirectUrl = "https://example.com/callback",
                }
            ),
    }
);
amount := int64(1299)
currency := "THB"
country := "TH"
method := components.RedirectPaymentMethodCreateMethodTruemoney
redirectUrl := "https://example.com/callback"

redirectPaymentMethodCreate := components.RedirectPaymentMethodCreate{
    Method: method,
    Country: country,
    Currency: currency,
    RedirectURL: redirectUrl,
}
paymentMethod := components.CreateTransactionCreatePaymentMethodRedirectPaymentMethodCreate(redirectPaymentMethodCreate)

transactionCreate := components.TransactionCreate{
    Amount:        amount,
    Currency:      currency,
    Country:       &country,
    PaymentMethod: &paymentMethod,
}

transaction, err := client.Transactions.Create(ctx, transactionCreate, nil, nil, nil)
CreateTransactionResponse transactionResponse = gr4vyClient.transactions().create()
    .transactionCreate(TransactionCreate.builder()
        .amount(1299L)
        .currency("THB")
        .country("TH")
        .paymentMethod(TransactionCreatePaymentMethod.of(RedirectPaymentMethodCreate.builder()
            .method(RedirectPaymentMethodCreateMethod.TRUEMONEY)
            .country("TH")
            .currency("THB")
            .redirectUrl("https://example.com/callback")
            .build()))
        .build())
    .call();

Transaction transaction = transactionResponse.transaction().orElse(null);
$transactionCreate = new TransactionCreate(
    amount: 1299,
    currency: 'THB',
    country: 'TH',
    paymentMethod: new RedirectPaymentMethodCreate(
        method: 'truemoney',
        country: 'TH',
        currency: 'THB',
        redirectUrl: 'https://example.com/callback'
    )
);
$response = self::$sdk->transactions->create($transactionCreate);
$transaction = $response->transaction;
transaction: models.Transaction = client.transactions.create(
    amount=1299,
    currency="THB",
    country="TH",
    payment_method={
        "method": "truemoney",
        "country": "TH",
        "currency": "THB",
        "redirect_url": "https://example.com/callback",
    }
)
const transaction = await gr4vy.transactions.create({
    amount: 1299,
    currency: "THB",
    country: "TH",
    paymentMethod: {
        method: "truemoney",
        country: "TH",
        currency: "THB",
        redirectUrl: "https://example.com/callback"
    }
})
After the transaction is created, the API response includes payment_method.approval_url and the status is set to buyer_approval_pending. Redirect the buyer to the approval_url so they can complete the payment. After approval the buyer is redirected to the redirect_url you provided when creating the transaction. Do not rely solely on the redirect - either poll the transaction or (recommended) rely on webhooks to detect the final status (for example capture_succeeded or failure states).