Listrik - PLN

Prev Next

Menguji integrasi Pembayaran Tagihan Anda secara menyeluruh sangat penting untuk memastikan pengalaman yang lancar bagi pengguna Anda. Bagian ini menyediakan skenario tes khusus untuk pembayaran tagihan PLN (Perusahaan Listrik Negara), yang dapat menjadi dasar untuk menguji jenis pembayaran tagihan lainnya saat tersedia.

Skenario Tes PLN

PLN menawarkan dua jenis pembayaran listrik: Prabayar (token) dan Pascabayar (tagihan bulanan). Di bawah ini adalah skenario tes untuk kedua jenis tersebut.

Skenario Tes PLN Prabayar (Token)

Positif

Nama Skenario

Kode Produk

Nomor Pelanggan

(Magic Number)

Langkah-langkah Skenario

Pembelian PLN Prabayar 50rb

PLN_PREPAID_50K

12345678910

1. POST /inquiry menggunakan customer_number yang diketahui
2. POST /payment menggunakan inquiry_id dari respons inquiry
3. Menerima callback
4. GET /payment untuk mendapatkan detail pembayaran

Pembelian PLN Prabayar 200rb

PLN_PREPAID_200K

12345678910

1. POST /inquiry menggunakan customer_number yang diketahui
2. POST /payment menggunakan inquiry_id dari respons inquiry
3. Menerima callback
4. GET /payment untuk mendapatkan detail pembayaran

Negatif

Nama Skenario

Kode Produk

Nomor Pelanggan

(Magic Number)

Langkah-langkah Skenario

PLN Prabayar: Nomor Pelanggan Tidak Valid

PLN_PREPAID_50K

12345678911

POST /inquiry menggunakan customer_number yang tidak valid

PLN Prabayar: Biller Timeout

PLN_PREPAID_50K

12345678912

POST /inquiry menggunakan customer_number yang dikonfigurasi untuk biller timeout

PLN Prabayar: Biller Maintenance

PLN_PREPAID_50K

12345678913

POST /inquiry menggunakan customer_number yang dikonfigurasi untuk pemeliharaan biller

PLN Prabayar: Produk Tidak Ditemukan

PLN_PREPAID_10K

12345678914

POST /inquiry menggunakan product_code yang tidak diketahui

PLN Prabayar: Gagal Pembatasan Nomor

PLN_PREPAID_50K

12345678915

POST /inquiry menggunakan customer_number di luar 11-12 digit

PLN Prabayar: Kesalahan Umum

PLN_PREPAID_50K

12345678916

1. POST /inquiry
2. POST /payment menggunakan inquiry_id dari respons inquiry
3. Menerima callback
4. GET /payment untuk mendapatkan detail pembayaran

PLN Prabayar: Transaksi Duplikat

PLN_PREPAID_50K

12345678917

1. POST /inquiry
2. POST /payment menggunakan inquiry_id dari respons inquiry, menggunakan reference_id yang dibuat sebelumnya
3. Menerima callback
4. GET /payment untuk mendapatkan detail pembayaran

PLN Prabayar: KWH Melebihi Batas

PLN_PREPAID_50K

12345678918

1. POST /inquiry
2. POST /payment menggunakan inquiry_id dari respons inquiry
3. Menerima callback
4. GET /payment untuk mendapatkan detail pembayaran

PLN Prabayar: Transaksi Gagal

PLN_PREPAID_50K

12345678919

1. POST /inquiry
2. POST /payment menggunakan inquiry_id dari respons inquiry
3. Menerima callback
4. GET /payment untuk mendapatkan detail pembayaran

PLN Prabayar: Transaksi Mencurigakan

PLN_PREPAID_50K

12345678920

1. POST /inquiry
2. POST /payment menggunakan inquiry_id dari respons inquiry
3. Menerima callback
4. GET /payment untuk mendapatkan detail pembayaran

Skenario Tes PLN Pascabayar

Positif

Nama Skenario

Kode Produk

Nomor Pelanggan

(Magic Number)

Langkah-langkah Skenario

Pembayaran Tagihan PLN Pascabayar 1 Bulan

PLN_POSTPAID

22345678910

1. POST /inquiry menggunakan customer_number yang diketahui
2. POST /payment menggunakan inquiry_id dari respons inquiry
3. Menerima callback
4. GET /payment untuk mendapatkan detail pembayaran

Pembayaran Tagihan PLN Pascabayar 2 Bulan

PLN_POSTPAID

22345678911

1. POST /inquiry menggunakan customer_number yang diketahui
2. POST /payment menggunakan inquiry_id dari respons inquiry
3. Menerima callback
4. GET /payment untuk mendapatkan detail pembayaran

Pembayaran Tagihan PLN Pascabayar 3 Bulan

PLN_POSTPAID

22345678912

1. POST /inquiry menggunakan customer_number yang diketahui
2. POST /payment menggunakan inquiry_id dari respons inquiry
3. Menerima callback
4. GET /payment untuk mendapatkan detail pembayaran

Pembayaran Tagihan PLN Pascabayar 6 Bulan

PLN_POSTPAID

22345678913

1. POST /inquiry menggunakan customer_number yang diketahui
2. POST /payment menggunakan inquiry_id dari respons inquiry
3. Menerima callback
4. GET /payment untuk mendapatkan detail pembayaran

Negatif

Nama Skenario

Kode Produk

Nomor Pelanggan

(Magic Number)

Langkah-langkah Skenario

PLN Pascabayar: Nomor Pelanggan Tidak Valid

PLN_POSTPAID

22345678915

POST /inquiry menggunakan customer_number yang tidak valid

PLN Pascabayar: Tagihan Sudah Dibayar atau Tidak Tersedia

PLN_POSTPAID

22345678916

POST /inquiry menggunakan customer_number yang dikonfigurasi

PLN Pascabayar: Biller Timeout

PLN_POSTPAID

22345678917

POST /inquiry menggunakan customer_number yang dikonfigurasi untuk biller timeout

PLN Pascabayar: Biller Maintenance

PLN_POSTPAID

22345678918

POST /inquiry menggunakan customer_number yang dikonfigurasi untuk pemeliharaan biller

PLN Pascabayar: Produk Tidak Ditemukan

PLNPOSTPAID

22345678919

POST /inquiry menggunakan product_code yang tidak diketahui

PLN Pascabayar: Gagal Pembatasan Nomor

PLN_POSTPAID

22345678920

POST /inquiry menggunakan customer_number di luar 11-12 digit

PLN Pascabayar: Kesalahan Umum

PLN_POSTPAID

22345678921

1. POST /inquiry
2. POST /payment menggunakan inquiry_id dari respons inquiry
3. Menerima callback
4. GET /payment untuk mendapatkan detail pembayaran

PLN Pascabayar: Inquiry Tidak Valid

PLN_POSTPAID

22345678922

1. POST /inquiry
2. POST /payment menggunakan inquiry_id dari respons inquiry
3. Menerima callback
4. GET /payment untuk mendapatkan detail pembayaran

PLN Pascabayar: Transaksi Gagal

PLN_POSTPAID

22345678923

1. POST /inquiry
2. POST /payment menggunakan inquiry_id dari respons inquiry
3. Menerima callback
4. GET /payment untuk mendapatkan detail pembayaran

PLN Pascabayar: Transaksi Mencurigakan

PLN_POSTPAID

22345678924

1. POST /inquiry
2. POST /payment menggunakan inquiry_id dari respons inquiry
3. Menerima callback
4. GET /payment untuk mendapatkan detail pembayaran

Contoh Permintaan dan Respons

Contoh 1: Pembelian Token PLN Prabayar

  1. Permintaan Daftar Produk:

GET /v1/product?category=ELECTRICITY

Respons:

{
  "limit": 50,
  "cursor": "dummy-cursor-value-001==",
  "data": [
    {
      "type": "product",
      "id": "PLN_PREPAID_100K",
      "properties": {
        "product_name": "PLN Prepaid 100.000",
        "category": "ELECTRICITY",
        "biller": "PLN",
        "country": "ID",
        "currency": "IDR",
        "requires_inquiry": true,
        "availability_status": "AVAILABLE",
        "admin_amount": 2750,
        "base_amount": 100000,
        "total_amount": 102750,
        "revenue_share_amount": 500,
        "locale": {
          "en": "PLN Prepaid 100.000",
          "id": "PLN Prabayar 100.000"
        }
      }
    }
  ]
}
  1. Permintaan Inquiry:

{
  "product_id": "PLN_PREPAID_100K",
  "customer_number": "32185159194"
}

Respons Inquiry:

{
  "data": {
    "business_id": "5f27a14a9bf05c73dd040bc8",
    "type": "inquiry",
    "id": "inq-98765",
    "properties": {
      "product_id": "PLN_PREPAID_100K",
      "admin_amount": 2750,
      "base_amount": 100000,
      "total_amount": 102750,
      "revenue_share_amount": 500,
      "currency": "IDR",
      "customer_number": "32185159194",
      "customer_details": [
        {
          "key": "Nama Pelanggan",
          "value": "Ismail Rabbanii"
        },
        {
          "key": "Nomor Pelanggan",
          "value": "32185159194"
        }
      ],
      "product_details": [
        {
          "key": "Tarif/Daya",
          "value": "R2/000003500"
        },
        {
          "key": "Denom",
          "value": "100.000"
        }
      ],
      "bill_details": [
        {
          "key": "Admin Fee",
          "value": "Rp2.750"
        },
        {
          "key": "Total Bayar",
          "value": "Rp102.750"
        }
      ]
    }
  }
}
  1. Permintaan Payment:

{
  "product_id": "PLN_PREPAID_100K",
  "customer_number": "32185159194",
  "inquiry_id": "inq-98765",
  "reference_id": "tx-pln-001",
  "total_amount": 102750,
  "additional_properties": {
    "payment_reference": "sfinhsiof2309rr3"
  }
}

Respons Payment:

{
  "data": {
    "business_id": "5f27a14a9bf05c73dd040bc8",
    "type": "payment",
    "id": "trx-98765",
    "properties": {
      "product_id": "PLN_PREPAID_100K",
      "customer_number": "32185159194",
      "reference_id": "tx-pln-001",
      "admin_amount": 2750,
      "base_amount": 100000,
      "total_amount": 102750,
      "currency": "IDR",
      "status": "PENDING",
      "fulfilled_at": null,
      "failure_code": null,
      "failure_reason": null,
      "customer_details": [],
      "product_details": [],
      "bill_details": [],
      "payment_details": []
    }
  }
}
  1. Callback Pembayaran Berhasil:

{
  "business_id": "5f27a14a9bf05c73dd040bc8",
  "created": "2024-01-23T08:15:30Z",
  "event": "bill_payments.succeeded",
  "data": {
    "id": "trx-98765",
    "properties": {
      "reference_id": "tx-pln-001",
      "product_id": "PLN_PREPAID_100K",
      "customer_number": "32185159194",
      "total_amount": 102750,
      "status": "SUCCEEDED",
      "fulfilled_at": "2024-01-23T08:15:30Z"
    }
  }
}
  1. Permintaan Detail Pembayaran:

GET /v1/payment/trx-98765

Respons Berhasil:

{
  "data": {
    "business_id": "5f27a14a9bf05c73dd040bc8",
    "type": "payment",
    "id": "trx-98765",
    "properties": {
      "reference_id": "tx-pln-001",
      "product_id": "PLN_PREPAID_100K",
      "customer_number": "32185159194",
      "admin_amount": 2750,
      "base_amount": 100000,
      "total_amount": 102750,
      "status": "SUCCEEDED",
      "fulfilled_at": "2024-01-23T08:15:30Z",
      "failure_code": null,
      "failure_reason": null,
      "customer_details": [
        {
          "key": "Nama Pelanggan",
          "value": "Ismail Rabbanii"
        },
        {
          "key": "Nomor Pelanggan",
          "value": "32185159194"
        }
      ],
      "product_details": [
        {
          "key": "Tarif/Daya",
          "value": "R2/000003500"
        }
      ],
      "bill_details": [
        {
          "key": "Admin Fee",
          "value": "Rp2.750"
        },
        {
          "key": "Total Bayar",
          "value": "Rp102.750"
        }
      ],
      "payment_details": [
        {
          "key": "Token",
          "value": "1234-5678-9012-3456-7890"
        },
        {
          "key": "Serial Number",
          "value": "PLN987654321"
        }
      ]
    }
  }
}

Contoh 2: Transaksi Gagal (System Timeout)

Respons Pembayaran (endpoint yang sama dengan kasus berhasil):

{
  "data": {
    "business_id": "5f27a14a9bf05c73dd040bc8",
    "type": "payment",
    "id": "trx-98768",
    "properties": {
      "reference_id": "tx-pln-002",
      "product_id": "PLN_PREPAID_100K",
      "customer_number": "32185159195",
      "admin_amount": 2750,
      "base_amount": 100000,
      "total_amount": 102750,
      "currency": "IDR",
      "status": "PENDING",
      "fulfilled_at": null,
      "failure_code": null,
      "failure_reason": null,
      "customer_details": [],
      "product_details": [],
      "bill_details": [],
      "payment_details": []
    }
  }
}

Callback Pembayaran Gagal:

{
  "business_id": "5f27a14a9bf05c73dd040bc8",
  "created": "2024-01-23T08:30:00Z",
  "event": "bill_payments.failed",
  "data": {
    "id": "trx-98768",
    "reference_id": "tx-pln-002",
    "product_id": "PLN_PREPAID_100K",
    "customer_number": "32185159195",
    "total_amount": 102750,
    "status": "FAILED",
    "fulfilled_at": "2024-01-23T08:30:00Z",
    "failure_code": "BILLER_TIMEOUT",
    "failure_reason": "Biller system timeout after 30 seconds"
  }
}

Praktik Terbaik Pengujian

  1. Uji semua skenario: Terapkan kasus uji positif dan negatif.

  2. Verifikasi penanganan callback: Pastikan sistem Anda memproses callback keberhasilan dan kegagalan dengan benar.

  3. Periksa idempotensi: Verifikasi bahwa permintaan duplikat ditangani dengan benar.

  4. Uji skenario timeout: Simulasikan timeout untuk memastikan sistem Anda menanganinya dengan baik.

  5. Validasi pesan kesalahan: Pastikan pesan kesalahan mudah dipahami dan dapat ditindaklanjuti oleh pengguna.

  6. Uji pemeriksaan status: Verifikasi bahwa mekanisme pemeriksaan status Anda berfungsi sebagai fallback.

Dengan menguji secara menyeluruh menggunakan skenario-skenario ini, Anda akan memastikan integrasi Pembayaran Tagihan Anda memberikan pengalaman yang lancar bagi pengguna Anda sambil menangani kasus-kasus khusus dan kondisi kesalahan dengan benar.