Developer Documentation

API Produk Digital

Integrasikan toko Anda dengan RYYSENGTOR dan jual produk digital โ€” lisensi software, akun premium, kode voucher, link download โ€” langsung ke pelanggan Anda secara otomatis.

Quickstart

Tiga langkah untuk mulai berjualan produk digital via API.

๐Ÿ”‘

1. Dapatkan API Key

Masuk ke akun reseller Anda โ†’ salin API ID & API Key dari halaman Dashboard.

๐Ÿ’ณ

2. Isi Saldo

Top up saldo reseller. Setiap order akan memotong saldo secara otomatis.

๐Ÿš€

3. Mulai Order

Ambil daftar produk via API, buat order, dan produk langsung diterima.

Base URL

https://ryysengtor.shop/
Semua endpoint API menggunakan metode POST dengan Content-Type: application/x-www-form-urlencoded, kecuali Cashify QRIS yang menggunakan Content-Type: application/json.

Autentikasi

Setiap request wajib menyertakan tiga parameter berikut.

ParameterStatusKeterangan
api_idWajibAPI ID akun reseller Anda
api_keyWajibAPI Key akun reseller Anda
signatureWajibHash MD5 dari api_id + api_key (disambung langsung, tanpa spasi)

Generate signature:

// PHP $signature = md5($api_id . $api_key); // JavaScript import CryptoJS from 'crypto-js'; const signature = CryptoJS.MD5(api_id + api_key).toString(); // Python import hashlib signature = hashlib.md5((api_id + api_key).encode()).hexdigest()

Profile

Mendapatkan profil akun reseller dan saldo saat ini.

POST https://ryysengtor.shop/api/profile

โœ“ Respons Sukses

{ "status": true, "msg": "berhasil mendapatkan data profile", "data": { "full_name": "John Doe", "username": "johndoe", "email": "john@email.com", "balance": 250000, "role": "Gold", "created_at":"2024-01-01" } }

โœ• Respons Gagal

{ "status": false, "msg": "API ID atau API KEY tidak ditemukan" } { "status": false, "msg": "Signature Tidak Valid. Silakan periksa kredensial API Anda" }

Service โ€” Daftar Produk Digital

Mendapatkan seluruh produk digital yang tersedia. Respons diurutkan berdasarkan kategori lalu nama produk.

POST https://ryysengtor.shop/api/service

โœ“ Respons Sukses (array)

[ { "status": true, "msg": "berhasil mendapatkan data layanan", "data": { "id": 1, "kategori": "Software", "nama": "Lisensi Antivirus 1 Tahun", "harga": 50000, "tipe_akses": "teks", "status": "aktif" } }, // ... produk lainnya ]

Keterangan Field

FieldKeterangan
idService ID โ€” gunakan saat buat order
kategoriKategori produk (Software, Akun, dll)
namaNama produk
hargaHarga dalam Rupiah (sama untuk semua tier)
tipe_aksesteks Kode/Lisensi ยท link URL Download ยท drive Google Drive ยท file File ZIP
statusaktif = siap dipesan

Filter berdasarkan kategori:

// PHP โ€” filter kategori "Software" $software = array_filter($services, fn($s) => $s['data']['kategori'] === 'Software'); // JavaScript โ€” kelompokkan semua kategori const byKategori = services.reduce((acc, s) => { const kat = s.data.kategori; if (!acc[kat]) acc[kat] = []; acc[kat].push(s.data); return acc; }, {});

Order โ€” Buat Pesanan

Buat pesanan produk digital. Saldo dipotong otomatis dan akses_data (lisensi / link) langsung dikembalikan dalam respons.

POST https://ryysengtor.shop/api/order
ParameterStatusKeterangan
api_idWajibAPI ID Anda
api_keyWajibAPI Key Anda
signatureWajibmd5(api_id + api_key)
order_idWajibID unik dari sistem Anda โ€” tidak boleh duplikat
service_idWajibID produk dari endpoint /api/service
Langsung Sukses! Tidak perlu polling status. Begitu order berhasil, akses_data (kode lisensi / link download) sudah ada di dalam respons โ€” teruskan ke pelanggan Anda seketika.

โœ“ Respons Sukses

{ "status": true, "msg": "Pesanan berhasil!", "data": { "order_id": "TOKO-001", "produk": "Lisensi Antivirus 1 Tahun", "kategori": "Software", "service_id": 1, "tipe_akses": "teks", "akses_data": "XXXXX-XXXXX-XXXXX-XXXXX", "harga": 50000, "status": "Sukses", "note": "Produk digital berhasil dikirim." } }

โœ• Respons Gagal

{ "status": false, "msg": "Saldo anda tidak mencukupi" } { "status": false, "msg": "order_id sudah tersedia pada sistem kami" } { "status": false, "msg": "service_id tidak ditemukan atau produk tidak aktif" } { "status": false, "msg": "Signature Tidak Valid..." }

Nilai tipe_akses

NilaiArtinya
teksKode lisensi / serial number โ€” tampilkan langsung ke pelanggan
linkURL download external โ€” arahkan pelanggan ke URL
driveLink Google Drive โ€” sama seperti link
fileNama file ZIP di server โ€” unduh & teruskan ke pelanggan

Status Pesanan

Cek detail dan status pesanan berdasarkan order_id. Untuk produk digital, status selalu Sukses dan akses_data juga dikembalikan di sini.

POST https://ryysengtor.shop/api/status
ParameterStatusKeterangan
api_idWajibAPI ID Anda
api_keyWajibAPI Key Anda
signatureWajibmd5(api_id + api_key)
order_idWajibID pesanan yang ingin dicek

โœ“ Respons Sukses

{ "status": true, "msg": "Detail transaksi berhasil didapatkan", "data": { "order_id": "TOKO-001", "produk": "Lisensi Antivirus 1 Tahun", "kategori": "Software", "status": "Sukses", "akses_data": "XXXXX-XXXXX-XXXXX-XXXXX", "note": "", "harga": 50000 } }

โœ• Tidak Ditemukan

{ "status": false, "msg": "order_id tidak ditemukan", "data": { "order_id": "TOKO-001", "status": "error" } }

Payment Gateway โ€” Cashify QRIS

Integrasikan pembayaran QRIS ke toko Anda agar pelanggan bisa membayar secara otomatis sebelum produk dikirim.

Cara kerja: Pelanggan bayar via QRIS โ†’ Cashify konfirmasi โ†’ saldo reseller terpotong โ†’ order API diproses โ†’ akses_data dikirim ke pelanggan. Semua otomatis.

1. Buat Transaksi QRIS

POST https://cashify.my.id/api/generate/qris

Header:

Content-Type: application/json x-license-key: YOUR_CASHIFY_LICENSE_KEY

Request Body:

{ "id": "QR_ID_ANDA", "amount": 50000, "useUniqueCode": true, "packageIds": ["com.orderkuota.app"], "expiredInMinutes":30 }

Respons:

{ "status": 200, "data": { "transactionId": "TRX-ABC123", "totalAmount": 50001, "qr_string": "00020101...", "expired_at": "2024-06-01T10:30:00Z" } }
Simpan transactionId untuk polling status. totalAmount = nominal final yang harus dibayar pelanggan (bisa berbeda karena unique code).

Render QR ke pelanggan:

$qrImage = "https://larabert-qrgen.hf.space/v1/create-qr-code?size=500x500&style=2&color=000000&data=" . rawurlencode($qr_string); echo '<img src="' . $qrImage . '" alt="Scan QRIS untuk bayar">';

2. Polling Status Pembayaran

POST https://cashify.my.id/api/generate/check-status

Header + Body:

Header: x-license-key: YOUR_CASHIFY_LICENSE_KEY Body: { "transactionId": "TRX-ABC123" }
Status ResponsArtiTindakan
pendingBelum dibayarLanjut polling (setiap 3 detik)
paid / successLunasPanggil /api/order sekarang
expiredKadaluarsa (30 menit)Buat transaksi QRIS baru
failedGagalBeritahu pelanggan, coba lagi

3. Cara Mendapatkan Kredensial Cashify

  1. 1Daftar / masuk di cashify.my.id
  2. 2Buat QR baru โ†’ salin QR ID (field id)
  3. 3Menu Pengaturan / API โ†’ salin License Key (header x-license-key)
  4. 4Salin Package ID (default: com.orderkuota.app)

Alur Integrasi Lengkap

Dari pelanggan klik beli sampai produk diterima โ€” semuanya otomatis.

1

Tampilkan Daftar Produk

Panggil POST /api/service โ†’ tampilkan produk beserta harga di toko Anda. Cache respons ini (update setiap 1 jam cukup).

2

Pelanggan Pilih Produk & Checkout

Simpan service_id yang dipilih dan buat order_id unik di sistem Anda.

3

Buat Transaksi QRIS untuk Pelanggan

Panggil Cashify POST generate/qris dengan nominal harga produk. Tampilkan gambar QR + nominal + countdown 30 menit ke pelanggan.

4

Polling Status Pembayaran

Setiap 3 detik panggil Cashify POST check-status. Terus lakukan sampai status = paid atau expired.

5

Pembayaran Lunas โ†’ Buat Order

Panggil POST /api/order dengan order_id dan service_id. Respons langsung berisi akses_data.

6

Kirim Produk ke Pelanggan

Ambil akses_data dari respons order dan tampilkan / kirim ke pelanggan via email/WhatsApp. Selesai!

Diagram Alur:

GET /api/service โ†’ tampilkan daftar produk ke pelanggan โ†“ Pelanggan pilih produk & konfirmasi checkout โ†“ POST cashify/generate/qris โ†’ tampilkan QR + nominal ke pelanggan โ†“ Polling cashify/check-status setiap 3 detik โ†“ (status = "paid" / "success") POST /api/order { order_id, service_id } โ†“ Ambil akses_data dari respons โ†’ kirim ke pelanggan โœ“

Contoh Kode

Salin dan sesuaikan dengan sistem Anda.

PHP โ€” Alur Lengkap (buat QRIS โ†’ cek bayar โ†’ order โ†’ kirim produk)

// โ”€โ”€ Konfigurasi โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ $api_id = 'API_ID_ANDA'; $api_key = 'API_KEY_ANDA'; $signature = md5($api_id . $api_key); $base_url = 'https://ryysengtor.shop/'; $cf_license = 'CASHIFY_LICENSE_KEY_ANDA'; $cf_qr_id = 'CASHIFY_QR_ID_ANDA'; function apiPost($url, $data, $headers = []) { $isJson = is_string($data); $ch = curl_init($url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); curl_setopt($ch, CURLOPT_TIMEOUT, 30); if ($headers) curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); $resp = curl_exec($ch); curl_close($ch); return json_decode($resp, true); } // โ”€โ”€ STEP 1: Ambil daftar produk โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ $services = apiPost($base_url . 'api/service', [ 'api_id' => $api_id, 'api_key' => $api_key, 'signature' => $signature ]); // Contoh: pilih produk pertama $produk = $services[0]['data']; $serviceId = $produk['id']; $harga = $produk['harga']; // โ”€โ”€ STEP 2: Buat QRIS untuk pelanggan โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ $qrisResp = apiPost('https://cashify.my.id/api/generate/qris', json_encode([ 'id' => $cf_qr_id, 'amount' => $harga, 'useUniqueCode' => true, 'packageIds' => ['com.orderkuota.app'], 'expiredInMinutes' => 30 ]), ['Content-Type: application/json', 'x-license-key: ' . $cf_license] ); $trxId = $qrisResp['data']['transactionId']; $totalBayar= $qrisResp['data']['totalAmount']; $qrImg = 'https://larabert-qrgen.hf.space/v1/create-qr-code?size=500x500&style=2&color=000000&data=' . rawurlencode($qrisResp['data']['qr_string']); // โ†’ Tampilkan $qrImg ke pelanggan (img src), minta bayar Rp $totalBayar // โ”€โ”€ STEP 3: Polling cek pembayaran โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ $paid = false; for ($i = 0; $i < 600; $i++) { // max 30 menit (600 ร— 3 detik) sleep(3); $cek = apiPost('https://cashify.my.id/api/generate/check-status', json_encode(['transactionId' => $trxId]), ['Content-Type: application/json', 'x-license-key: ' . $cf_license] ); $st = $cek['data']['status'] ?? ''; if (in_array($st, ['paid', 'success'])) { $paid = true; break; } if (in_array($st, ['expired', 'failed'])) break; } if (!$paid) die('Pembayaran tidak berhasil.'); // โ”€โ”€ STEP 4: Buat order via API โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ $orderId = 'TOKO-' . date('YmdHis') . '-' . rand(100, 999); $orderResp = apiPost($base_url . 'api/order', [ 'api_id' => $api_id, 'api_key' => $api_key, 'signature' => $signature, 'order_id' => $orderId, 'service_id' => $serviceId, ]); if (!$orderResp['status']) die($orderResp['msg']); // โ”€โ”€ STEP 5: Kirim produk ke pelanggan โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ $aksesData = $orderResp['data']['akses_data']; $tipeAkses = $orderResp['data']['tipe_akses']; // teks / link / drive / file echo "Produk: " . $orderResp['data']['produk'] . "\nAkses: $aksesData"; // โ†’ Kirim $aksesData ke pelanggan via email / WhatsApp / tampilkan di halaman

Kode Error

Semua pesan error yang mungkin muncul dan cara mengatasinya.

Pesan ErrorPenyebabSolusi
API ID atau API KEY tidak ditemukanKredensial kosongCek api_id & api_key di dashboard
Pengguna...tidak ditemukanapi_id/api_key salahSalin ulang API ID & Key dari dashboard
Signature Tidak ValidFormula md5 keliruPastikan md5(api_id . api_key) tanpa pemisah
Saldo anda tidak mencukupiBalance < harga produkTop up saldo reseller
order_id sudah tersediaDuplikat order_idGunakan order_id baru & unik per transaksi
service_id tidak ditemukan atau produk tidak aktifID salah / produk dinonaktifkanRefresh daftar dari /api/service
IP tidak ada dalam whitelistIP server tidak diizinkanTambah IP server di pengaturan akun
Cashify: expiredQR kadaluarsa 30 menitBuat transaksi Cashify baru