ข้ามไปยังเนื้อหาหลัก

TrueMoney Jump App

รับชำระเงินด้วยการเปลี่ยนเส้นทางจากแอปสู่แอปไปยังแอปมือถือ TrueMoney เพื่อประสบการณ์การชำระเงินที่ราบรื่นบนมือถือในประเทศไทย

ตัวเลือกการชำระเงิน TrueMoney อื่นๆ

สำหรับการชำระเงินออนไลน์ผ่าน OTP ดูที่ TrueMoney Wallet สำหรับการชำระเงินด้วย QR Code แบบออฟไลน์ ดูที่ TrueMoney QR

ภาพรวม

TrueMoney Jump App เป็นวิธีการชำระเงินแบบเปลี่ยนเส้นทางจากแอปสู่แอปที่เชื่อมโยงลูกค้าจากแอปมือถือหรือเว็บไซต์ของคุณไปยังแอปมือถือ TrueMoney โดยตรงเพื่อยืนยันการชำระเงิน ให้ประสบการณ์มือถือที่รวดเร็วและเป็นธรรมชาติมากกว่าการยืนยัน OTP หรือการสแกน QR Code

คุณสมบัติหลัก:

  • การเปลี่ยนเส้นทางจากแอปสู่แอป - Deep link โดยตรงไปยังแอป TrueMoney
  • ตัวเลือกการชำระเงินหลายรูปแบบ - วอลเล็ต, บัตร, บัญชีธนาคาร, Pay Next (BNPL)
  • ตลาดประเทศไทย - ผู้ใช้ TrueMoney กว่า 30 ล้านคน
  • ชำระเงินรวดเร็ว - ประสบการณ์แอปพื้นเมืองพร้อมการยืนยันตัวตนด้วยไบโอเมตริก
  • หมดอายุใน 3 นาที - ช่วงเวลาชำระเงินสั้นช่วยลดการละทิ้ง
  • ช่วงเวลาคืนเงิน 30 วัน - รองรับการคืนเงินเต็มจำนวนและบางส่วน
ต้องเปิดใช้งาน

ติดต่อ support@omise.co เพื่อเปิดใช้งาน TrueMoney Jump App สำหรับบัญชีร้านค้าของคุณ

ภูมิภาคที่รองรับ

ภูมิภาคสกุลเงินจำนวนขั้นต่ำจำนวนสูงสุดเวอร์ชัน API
ประเทศไทยTHB20.00 (2,000 สตางค์)50,000.00 (5,000,000 สตางค์)2017-11-02

ตัวเลือกการชำระเงิน

ลูกค้าสามารถเลือกจากหลายวิธีการชำระเงินภายในแอป TrueMoney:

ตัวเลือกการชำระเงินรองรับหมายเหตุ
ยอดเงินในวอลเล็ต TrueMoneyรองรับชำระจากวอลเล็ตโดยตรง
บัญชีธนาคารรองรับบัญชีธนาคารที่เชื่อมต่อ
บัตรเครดิต/เดบิตรองรับบัตรที่บันทึกไว้ใน TrueMoney
Pay Next (BNPL)รองรับตัวเลือกซื้อก่อนจ่ายทีหลัง
ทางเลือกของลูกค้า

เมื่อลูกค้าถูกเปลี่ยนเส้นทางไปยังแอป TrueMoney พวกเขาจะเลือกวิธีการชำระเงินที่ต้องการ ร้านค้าไม่สามารถควบคุมแหล่งเงินทุนที่ลูกค้าเลือกได้

วิธีการทำงาน

ขั้นตอนการชำระเงิน:

  1. ลูกค้าเลือก TrueMoney บนอุปกรณ์มือถือ
  2. ร้านค้าสร้าง source ด้วยประเภท truemoney_jumpapp
  3. ลูกค้าถูกเปลี่ยนเส้นทางผ่าน deep link
  4. แอป TrueMoney เปิดอัตโนมัติ
  5. ลูกค้าเลือกวิธีการชำระเงิน (วอลเล็ต, บัตร, ธนาคาร, Pay Next)
  6. ลูกค้ายืนยันตัวตนด้วย PIN หรือไบโอเมตริก
  7. ลูกค้ายืนยันการชำระเงิน
  8. ลูกค้ากลับไปยังแอป/ไซต์ของร้านค้า
  9. Webhook ยืนยันสถานะการชำระเงิน

เวลาดำเนินการโดยทั่วไป: 30 วินาที - 2 นาที

การหมดอายุของการชำระเงิน

ลูกค้าต้องดำเนินการชำระเงินให้เสร็จภายใน 3 นาที มิฉะนั้น charge จะหมดอายุ ตรวจสอบให้แน่ใจว่า UI ของคุณสื่อสารความเร่งด่วนนี้อย่างชัดเจน

การใช้งาน

ขั้นตอนที่ 1: สร้าง Source

curl https://api.omise.co/sources \
-u $OMISE_PUBLIC_KEY: \
-d "amount=100000" \
-d "currency=THB" \
-d "type=truemoney_jumpapp" \
-d "platform_type=ANDROID"

ขั้นตอนที่ 2: สร้าง Charge

curl https://api.omise.co/charges \
-u $OMISE_SECRET_KEY: \
-d "amount=100000" \
-d "currency=THB" \
-d "return_uri=https://example.com/payment/complete" \
-d "source=src_test_xxx"

คำขอรวม

สร้าง source และ charge ในคำขอเดียว:

curl https://api.omise.co/charges \
-u $OMISE_SECRET_KEY: \
-d "amount=100000" \
-d "currency=THB" \
-d "return_uri=https://example.com/payment/complete" \
-d "source[type]=truemoney_jumpapp" \
-d "source[platform_type]=ANDROID"

ขั้นตอนที่ 3: เปลี่ยนเส้นทางลูกค้า

// Detect platform and redirect
function redirectToTrueMoney(authorizeUri) {
// The authorize_uri contains the deep link
window.location.href = authorizeUri;
}

// After creating charge
redirectToTrueMoney(charge.authorize_uri);

ขั้นตอนที่ 4: จัดการการกลับมา

app.get('/payment/complete', async (req, res) => {
try {
// Get charge status
const chargeId = req.query.charge;
const charge = await omise.charges.retrieve(chargeId);

if (charge.status === 'successful') {
await fulfillOrder(charge.metadata.order_id);
res.redirect('/order-success');
} else if (charge.status === 'failed') {
res.redirect('/payment-failed?error=' + charge.failure_code);
} else {
// Still pending - wait for webhook
res.redirect('/payment-pending');
}
} catch (error) {
res.redirect('/payment-error');
}
});

ขั้นตอนที่ 5: จัดการ Webhook

app.post('/webhooks/omise', (req, res) => {
const event = req.body;

if (event.key === 'charge.complete') {
const charge = event.data;

if (charge.source.type === 'truemoney_jumpapp') {
if (charge.status === 'successful') {
fulfillOrder(charge.metadata.order_id);
} else if (charge.status === 'failed') {
handleFailedPayment(charge);
}
}
}

res.status(200).send('OK');
});

ตัวอย่างการใช้งานแบบสมบูรณ์

const express = require('express');
const omise = require('omise')({
secretKey: process.env.OMISE_SECRET_KEY
});

const app = express();
app.use(express.json());

// Checkout endpoint
app.post('/checkout/truemoney-jumpapp', async (req, res) => {
try {
const { amount, order_id, platform_type } = req.body;

// Validate amount (min 2000, max 5000000 satang)
if (amount < 2000 || amount > 5000000) {
return res.status(400).json({
error: 'Amount must be between THB 20.00 and THB 50,000.00'
});
}

// Validate platform
const platform = ['IOS', 'ANDROID'].includes(platform_type)
? platform_type
: 'ANDROID';

// Create source
const source = await omise.sources.create({
type: 'truemoney_jumpapp',
amount: amount,
currency: 'THB',
platform_type: platform
});

// Create charge
const charge = await omise.charges.create({
amount: amount,
currency: 'THB',
source: source.id,
return_uri: `${process.env.BASE_URL}/payment/complete`,
metadata: {
order_id: order_id
}
});

// Return deep link URL
res.json({
authorize_uri: charge.authorize_uri,
charge_id: charge.id,
expires_at: charge.expires_at
});

} catch (error) {
console.error('TrueMoney Jump App error:', error);
res.status(500).json({ error: error.message });
}
});

// Return handler
app.get('/payment/complete', async (req, res) => {
const chargeId = req.query.charge;

try {
const charge = await omise.charges.retrieve(chargeId);

if (charge.status === 'successful') {
res.redirect(`/order-confirmation?order=${charge.metadata.order_id}`);
} else {
res.redirect(`/payment-failed?charge=${chargeId}`);
}
} catch (error) {
res.redirect('/payment-error');
}
});

// Webhook handler
app.post('/webhooks/omise', (req, res) => {
const event = req.body;

if (event.key === 'charge.complete') {
const charge = event.data;

if (charge.source.type === 'truemoney_jumpapp') {
if (charge.status === 'successful') {
processOrder(charge.metadata.order_id);
sendConfirmationEmail(charge);
} else {
notifyPaymentFailure(charge);
}
}
}

res.sendStatus(200);
});

app.listen(3000);

การรวมเข้ากับแอปมือถือ

iOS (Swift)

import UIKit

class PaymentViewController: UIViewController {

func openTrueMoneyJumpApp(authorizeUri: String) {
guard let url = URL(string: authorizeUri) else {
showError("Invalid payment URL")
return
}

UIApplication.shared.open(url, options: [:]) { success in
if !success {
// TrueMoney app not installed - show fallback
self.showAppStorePrompt()
}
}
}

func showAppStorePrompt() {
let alert = UIAlertController(
title: "TrueMoney App Required",
message: "Please install the TrueMoney app to continue with this payment method.",
preferredStyle: .alert
)
alert.addAction(UIAlertAction(title: "Download", style: .default) { _ in
if let appStoreURL = URL(string: "https://apps.apple.com/th/app/truemoney-wallet/id1128152283") {
UIApplication.shared.open(appStoreURL)
}
})
alert.addAction(UIAlertAction(title: "Cancel", style: .cancel))
present(alert, animated: true)
}
}

Android (Kotlin)

import android.content.ActivityNotFoundException
import android.content.Intent
import android.net.Uri

class PaymentActivity : AppCompatActivity() {

fun openTrueMoneyJumpApp(authorizeUri: String) {
val intent = Intent(Intent.ACTION_VIEW, Uri.parse(authorizeUri))

try {
startActivity(intent)
} catch (e: ActivityNotFoundException) {
// TrueMoney app not installed - show fallback
showPlayStorePrompt()
}
}

private fun showPlayStorePrompt() {
AlertDialog.Builder(this)
.setTitle("TrueMoney App Required")
.setMessage("Please install the TrueMoney app to continue with this payment method.")
.setPositiveButton("Download") { _, _ ->
val playStoreIntent = Intent(
Intent.ACTION_VIEW,
Uri.parse("https://play.google.com/store/apps/details?id=th.co.truemoney.wallet")
)
startActivity(playStoreIntent)
}
.setNegativeButton("Cancel", null)
.show()
}
}

React Native

import { Linking, Alert, Platform } from 'react-native';

const openTrueMoneyJumpApp = async (authorizeUri) => {
try {
const supported = await Linking.canOpenURL(authorizeUri);

if (supported) {
await Linking.openURL(authorizeUri);
} else {
showAppStorePrompt();
}
} catch (error) {
console.error('Failed to open TrueMoney:', error);
showAppStorePrompt();
}
};

const showAppStorePrompt = () => {
const storeUrl = Platform.select({
ios: 'https://apps.apple.com/th/app/truemoney-wallet/id1128152283',
android: 'https://play.google.com/store/apps/details?id=th.co.truemoney.wallet'
});

Alert.alert(
'TrueMoney App Required',
'Please install the TrueMoney app to continue with this payment method.',
[
{ text: 'Cancel', style: 'cancel' },
{
text: 'Download',
onPress: () => Linking.openURL(storeUrl)
}
]
);
};

export { openTrueMoneyJumpApp };

ค่าสถานะ Charge

สถานะคำอธิบาย
pendingรอการยืนยันจากลูกค้าในแอป TrueMoney
successfulการชำระเงินเสร็จสมบูรณ์
failedการชำระเงินถูกปฏิเสธหรือเกิดข้อผิดพลาด
expiredลูกค้าไม่ดำเนินการเสร็จภายในช่วงเวลา 3 นาที

รหัสความล้มเหลว

รหัสคำอธิบายการดำเนินการที่แนะนำ
payment_expiredช่วงเวลายืนยันหมดอายุ (3 นาที)แจ้งให้ลูกค้าลองอีกครั้ง
payment_rejectedTrueMoney ปฏิเสธธุรกรรมตรวจสอบสถานะวิธีการชำระเงินของลูกค้า
insufficient_balanceยอดเงินในวอลเล็ตไม่เพียงพอแนะนำวิธีการชำระเงินทางเลือก
failed_processingข้อผิดพลาดในการประมวลผลทั่วไปลองใหม่หรือติดต่อฝ่ายสนับสนุน
invalid_accountปัญหาบัญชีลูกค้าลูกค้าควรยืนยันบัญชี TrueMoney

การคืนเงิน

TrueMoney Jump App รองรับการคืนเงินเต็มจำนวนและบางส่วนภายใน 30 วัน หลังจากธุรกรรมเดิม

สร้างการคืนเงิน

// Full refund
const fullRefund = await omise.charges.refund('chrg_test_xxx');

// Partial refund
const partialRefund = await omise.charges.refund('chrg_test_xxx', {
amount: 50000 // Partial refund of THB 500.00
});

ข้อควรพิจารณาเกี่ยวกับการคืนเงิน

ด้านรายละเอียด
ช่วงเวลา30 วันจาก charge เดิม
การคืนเงินบางส่วนรองรับสำหรับวิธีการชำระเงินส่วนใหญ่
เวลาประมวลผลโดยทั่วไป 1-3 วันทำการ
วิธีการชำระเงินเดิมการคืนเงินกลับไปยังแหล่งเงินทุนเดิม
การคืนเงิน Pay Next

การคืนเงินสำหรับธุรกรรม Pay Next (BNPL) อาจมีเวลาประมวลผลและข้อกำหนดที่แตกต่างกัน ติดต่อฝ่ายสนับสนุนสำหรับกรณีเฉพาะ

การยกเลิก

รองรับการยกเลิกในวันเดียวกันสำหรับธุรกรรม TrueMoney Jump App การยกเลิกจะยกเลิกธุรกรรมก่อนการชำระบัญชี

// Void a charge (same day only)
const voidResult = await omise.charges.reverse('chrg_test_xxx');
ระยะเวลาการยกเลิก

การยกเลิกต้องดำเนินการในวันปฏิทินเดียวกับธุรกรรมเดิม หลังจากเวลาตัดยอดการชำระบัญชี ให้ใช้การคืนเงินแทน

แนวทางปฏิบัติที่ดีที่สุด

  1. ตรวจจับแพลตฟอร์มอย่างถูกต้อง - ตรวจจับและส่ง platform_type ที่ถูกต้อง (IOS/ANDROID) เสมอเพื่อ deep linking ที่เหมาะสมที่สุด
  2. จัดการกรณีแอปไม่ได้ติดตั้ง - ให้ข้อความสำรองที่ชัดเจนหากไม่ได้ติดตั้งแอป TrueMoney
  3. วิธีการสำหรับมือถือเท่านั้น - วิธีนี้ต้องใช้อุปกรณ์มือถือที่มีแอป TrueMoney เสนอทางเลือกอื่นสำหรับผู้ใช้เดสก์ท็อป
  4. สื่อสารความเร่งด่วน - แสดงตัวนับถอยหลังแสดงช่วงเวลาชำระเงิน 3 นาที
  5. ให้ความสำคัญกับ Webhook - ใช้ webhooks สำหรับการดำเนินการคำสั่งซื้อเสมอ ไม่ใช่สถานะ return URL
  6. การตรวจสอบจำนวนเงิน - ตรวจสอบว่าจำนวนเงินอยู่ในช่วง THB 20.00 - THB 50,000.00 ก่อนเรียก API
  7. การจัดการข้อผิดพลาด - ใช้การจัดการข้อผิดพลาดอย่างครอบคลุมสำหรับทุกสถานการณ์ความล้มเหลว
  8. การทดสอบ - ทดสอบขั้นตอนทั้งหมดบนอุปกรณ์ iOS และ Android ก่อนเปิดใช้งานจริง

คำถามที่พบบ่อย

ความแตกต่างระหว่าง TrueMoney Jump App, TrueMoney Wallet และ TrueMoney QR คืออะไร?

TrueMoney Jump App (truemoney_jumpapp): การเปลี่ยนเส้นทางจากแอปสู่แอปที่ deep link โดยตรงไปยังแอปมือถือ TrueMoney เหมาะที่สุดสำหรับการรวมเข้ากับแอปมือถือที่มีประสบการณ์การชำระเงินที่เร็วที่สุด

TrueMoney Wallet (truemoney): ขั้นตอนการเปลี่ยนเส้นทางออนไลน์ที่ลูกค้าป้อนหมายเลขโทรศัพท์และยืนยันด้วย OTP ทำงานบนอุปกรณ์ใดก็ได้ที่มีเบราว์เซอร์

TrueMoney QR (truemoney): แสดง QR code ที่ลูกค้าสแกนด้วยแอป TrueMoney เหมาะสำหรับจุดขายและการชำระเงินบนเว็บเดสก์ท็อป

ลูกค้าสามารถใช้วิธีการชำระเงินใดในแอป TrueMoney ได้บ้าง?

ลูกค้าสามารถชำระเงินได้โดยใช้:

  • ยอดเงินในวอลเล็ต TrueMoney - เงินในบัญชี TrueMoney ของพวกเขา
  • บัญชีธนาคาร - บัญชีธนาคารที่เชื่อมต่อ
  • บัตรเครดิต/เดบิต - บัตรที่บันทึกไว้ใน TrueMoney
  • Pay Next (BNPL) - ตัวเลือกซื้อก่อนจ่ายทีหลัง

ตัวเลือกที่พร้อมใช้งานขึ้นอยู่กับการตั้งค่าบัญชี TrueMoney และระดับการยืนยันของลูกค้า

ทำไมการหมดอายุของการชำระเงินจึงมีเพียง 3 นาที?

ช่วงเวลาหมดอายุ 3 นาทีออกแบบมาเพื่อ:

  • ลดธุรกรรมที่ถูกละทิ้ง
  • รับประกันการยืนยันการชำระเงินแบบเรียลไทม์
  • ลดเวลาการถือครองสินค้าคงคลัง
  • ให้ประสบการณ์การชำระเงินบนมือถือที่ราบรื่น

หากลูกค้าต้องการเวลามากขึ้น พวกเขาสามารถเริ่มกระบวนการชำระเงินใหม่จากการชำระเงิน

ฉันจำเป็นต้องระบุประเภทแพลตฟอร์มหรือไม่?

แนะนำให้ใช้พารามิเตอร์ platform_type (IOS หรือ ANDROID) เพื่อพฤติกรรม deep link ที่เหมาะสมที่สุด ช่วยให้แอป TrueMoney มอบประสบการณ์ที่ดีที่สุดสำหรับอุปกรณ์ของลูกค้า หากไม่ระบุ ระบบจะพยายามตรวจจับโดยอัตโนมัติ แต่การระบุอย่างชัดเจนมีความน่าเชื่อถือมากกว่า

จะเกิดอะไรขึ้นถ้าลูกค้าไม่ได้ติดตั้งแอป TrueMoney?

หากไม่ได้ติดตั้งแอป TrueMoney deep link จะไม่ทำงาน ใช้สำรองที่:

  1. ตรวจจับว่าแอปเปิดได้สำเร็จหรือไม่
  2. แสดงข้อความให้ดาวน์โหลดจาก App Store หรือ Google Play
  3. เสนอวิธีการชำระเงินทางเลือก เช่น TrueMoney Wallet (OTP) หรือตัวเลือกอื่น
ฉันสามารถใช้วิธีการชำระเงินนี้บนเดสก์ท็อปได้หรือไม่?

TrueMoney Jump App ออกแบบมาสำหรับอุปกรณ์มือถือโดยเฉพาะ สำหรับผู้ใช้เดสก์ท็อป ใช้:

  • TrueMoney Wallet - ขั้นตอนเปลี่ยนเส้นทางแบบ OTP
  • TrueMoney QR - QR code ที่พวกเขาสามารถสแกนด้วยโทรศัพท์
ข้อจำกัดในการคืนเงินมีอะไรบ้าง?

การคืนเงินต้องดำเนินการภายใน 30 วัน หลังจากธุรกรรมเดิม รองรับการคืนเงินเต็มจำนวนและบางส่วนสำหรับวิธีการชำระเงินส่วนใหญ่ ข้อควรพิจารณาหลัก:

  • การคืนเงินกลับไปยังแหล่งเงินทุนเดิมที่ลูกค้าใช้
  • การประมวลผลโดยทั่วไปใช้เวลา 1-3 วันทำการ
  • การคืนเงิน Pay Next (BNPL) อาจมีข้อกำหนดเพิ่มเติม
  • การยกเลิกในวันเดียวกันสามารถใช้การยกเลิกแทนการคืนเงิน

แหล่งข้อมูลที่เกี่ยวข้อง