eWallet
Integrasi eWallet
eWallet adalah metode pembayaran dompet digital yang terintegrasi penuh melalui standar SNAP BI. Winpay mendukung integrasi berbagai eWallet populer seperti Speedcash, OVO, DANA, ShopeePay, dan AstraPay secara real-time via SNAP API.
Sequence Diagram
Bagian berikut menjelaskan alur transaksi eWallet:

Description:
| No | Proses | Dok Terkait | Deskripsi |
|---|---|---|---|
| 1 | Generate Signature | Signature Generation | Sebelum anda melakukan request API Create URL eWallet anda diwajibkan untuk Generate Signature untuk kebutuhan Autentikasi pada API Create URL eWallet |
| 2 | Assign Signature to X-Signature Header | Signature yang sudah digenerate bisa ditaruh pada header X-Signature pada saat Create URL eWallet | |
| 3 | Completing Header & Body Request Create EWallet | Header | Anda bisa melengkapi Header & Body sebelum melakukan Create URL eWallet |
| 4 | Request Create EWallet | Request | Pada Step ini anda bisa melakukan request API Create URL eWallet guna mendapatkan URL eWallet |
| 5 | Response URL eWallet | Response | Setelah Create URL eWallet anda akan mendapat URL eWallet untuk dibayarkan pada BANK terkait |
| 6 | Payment (User) | User melakukan pembayaran pada eWallet terkait | |
| 7 | Payment (Bank) | Bank mengirimkan perintah pembayaran pada Winpay | |
| 8 | Response Success (Payment Bank) | Winpay meresponse pembayaran berhasil pada BANK | |
| 9 | Response Success (Payment User) | Bank meresponse pembayaran berhasil User | |
| 10 | Sending Payment Notification | Payment Callback | Setelah proses pembayaran dari User, ke BANK dan BANK ke Winpay selesai, Winpay akan mengirimkan notifikasi pembayaran pada merchant guna memberitahu merchant bahwa pembayaran pada eWallet tersebut sudah sukses |
Metode Pembayaran Yang Di Dukung
Berikut adalah metode pembayaran yang didukung oleh Winpay eWallet:
| Kode Channel | Institusi |
|---|---|
| SC | Speedcash |
| OVO | OVO |
| DANA | DANA |
| SPAY | ShopeePay |
| ASTRA | AstraPay |
Transaksi eWallet
1. Payment (Create eWallet Payment)
Service ini digunakan untuk membuat transaksi pembayaran eWallet.
Payload Request
| Nama Field | Tipe Data | Wajib | Deskripsi |
|---|---|---|---|
| partnerReferenceNo | String | Y | Nomor transaksi Length: 5-50Karakter yang Diizinkan: huruf (a-z, A-Z), angka (0-9), garis bawah (_) dan tanda hubung (-) |
| amount | Object | Y | Object amount |
| amount.value | String | Y | Nilai transaksi Length: 1-12Allowed Chars: 0-9 |
| amount.currency | String | Y | Kode mata uang Length: 3Allowed Value: IDR |
| urlParam | Array | Y | Array url |
| urlParam.url | String | Y | Url callback |
| urlParam.type | String | Y | Tipe callback Allowed Value: PAY_NOTIFY dan PAY_RETURN |
| urlParam.isDeeplink | String | Y | Flag untuk menentukan apakah url callback merupakan deeplink atau tidak Allowed Value: N |
| validUpTo | String | Y | Waktu transaksi berakhir Format: YYYY-MM-DDTHH:mm:ssZ (ISO8601) Harus lebih dari 1 menit dan maksimal 3 bulan dari waktu request |
| additionalInfo | Object | Y | Object additionalInfo |
| additionalInfo.channel | String | Y | Channel eWallet Allowed Value: SC, OVO, DANA, SPAY |
| additionalInfo.customerPhone | String | Y | Nomor telepon customer |
| additionalInfo.customerName | String | Y | Nama customer Lenght: 5-25 Karakter yang diizinkan: huruf (a-z, A-Z), angka (0-9), tanda hubung (-), dan spasi (\s) |
{
"partnerReferenceNo": "000000000056",
"amount": {
"value": "10000.00",
"currency": "IDR"
},
"urlParam": [
{
"url": "https://test1.bi.go.id/v1/test",
"type": "PAY_NOTIFY",
"isDeeplink": "N"
},
{
"url": "https://test1.bi.go.id/v1/test",
"type": "PAY_RETURN",
"isDeeplink": "N"
}
],
"validUpTo": "2023-09-05T17:10:11+07:00",
"additionalInfo": {
"channel": "SPAY",
"customerPhone": "0895633156874",
"customerName": "Chus Pandi"
}
}
Response Payload
| Parameter | Tipe Data | Deskripsi |
|---|---|---|
| responseCode | String | Kode response |
| responseMessage | String | Pesan response |
| partnerReferenceNo | String | Nomor transaksi |
| appRedirectUrl | String | Url deeplink |
| webRedirectUrl | String | Url redirect |
| additionalInfo | Object | Object response |
| contractId | String | Nomor identifikasi transaksi yang dihasilkan di sistem Winpay |
| expiredTime | String | ewallet expiration in ISO8601 format |
| channel | String | Channel eWallet |
| instructions | Array | Array of payment instructions |
{
"responseCode": "2005400",
"responseMessage": "Success",
"partnerReferenceNo": "000000000056",
"appRedirectUrl": "",
"webRedirectUrl": "https://pay.uat.airpay.co.id/h5pay/pay?type=start&medium_index=dFhkbmR1bTBIamhWwwGYax2gqqaG0bwCV3nlkmQLDsIkIhz-8m0VHcHV0nVvrpd3jK_DCulreFD1J5whxFwzXw&order_key=dabvhWOGQdcTs-dR3s_sFR69_X188lg92nPv2v0-uT1zpS7nWhxcDJuuOzUln7Z1PPVTPc6MyF6Vrw&source=web&token=dFhkbmR1bTBIamhWwwGYax2gqqaG0bwCV3nlkmQLDsIkIhz-8m0VHcHV0nVvrpd3jK_DCulreFD1J5whxFwzXw",
"additionalInfo": {
"contractId": "so4c0a61fa-5ad4-4fee-99ed-2a7b06b30c4b",
"expiredTime": "2023-09-05T17:10:11+07:00",
"channel": "SPAY",
"instructions": []
}
}
List Response Code Create Payment eWallet
| Response Code | Response Message | Description |
|---|---|---|
| 2005400 | Success | |
| 4005400 | Bad Request | Kegagalan request umum, termasuk kegagalan saat memproses pesan |
| 4005401 | Invalid field format { field name } | |
| 4005402 | Invalid mandatory field {field name} | |
| 4015400 | Invalid signature | X-Signature salah |
| 4045416 | Partner not found | X-Partner-ID tidak terdaftar |
| 4095400 | Cannot use same X-EXTERNAL-ID in same day | X-External-ID sudah pernah digunakan di hari yang sama |
| 4095401 | Duplicate partnerReferenceNo | partnerReferenceNo sudah pernah digunakan |
| 5005400 | General Error | Kesalahan umum |
| 5005401 | Internal Server Error | Kegagalan internal server yang tidak dikenal. Silakan coba prosesnya kembali |
2. Payment Status
Service ini digunakan untuk cek status pembayaran dari eWallet.
Payload Request
| Nama Field | Tipe Data | Wajib | Deskripsi |
|---|---|---|---|
| originalPartnerReferenceNo | String | Y | Nomor transaksi sesuai dengan field partnerReferenceNo pada saat create payment Length: 5-50Karakter yang Diizinkan: huruf (a-z, A-Z), angka (0-9), garis bawah (_) dan tanda hubung (-) |
| additionalInfo | Object | Y | Object additionalInfo |
| additionalInfo.contractId | String | Y | Nomor identifikasi transaksi yang dihasilkan di sistem Winpay |
| additionalInfo.channel | String | Y | Channel eWallet |
{
"originalPartnerReferenceNo": "000000000053",
"additionalInfo": {
"contractId": "so748b157a-c7b2-4b2b-81cd-00fdd94c82bd",
"channel": "SPAY"
}
}
Response Payload
| Parameter | Tipe Data | Deskripsi |
|---|---|---|
| responseCode | String | Kode response |
| responseMessage | String | Pesan response |
| originalPartnerReferenceNo | String | Nomor transaksi |
| serviceCode | String | Kode service |
| latestTransactionStatus | String | Status transaksi, transaksi berhasil atau tidak berdasarkan status ini Length: 2 Values: 00 => Pembayaran Diterima07 => Belum Terbayar |
| additionalInfo | Object | Object response |
| contractId | String | Nomor identifikasi transaksi yang dihasilkan di sistem Winpay |
{
"responseCode": "2005500",
"responseMessage": "Successful",
"originalPartnerReferenceNo": "000000000053",
"serviceCode": "54",
"latestTransactionStatus": "07",
"additionalInfo": {
"contractId": "so748b157a-c7b2-4b2b-81cd-00fdd94c82bd"
}
}
List Response Codes
| Response Code | Response Message | Description |
|---|---|---|
| 2005500 | Success | |
| 4005500 | Bad Request | Kegagalan request umum, termasuk kegagalan saat memproses pesan |
| 4005501 | Invalid field format { field name } | |
| 4005502 | Invalid mandatory field {field name} | |
| 4015500 | Invalid signature | X-Signature salah |
| 4045501 | Transaction not found | partnerReferenceNo dan contractId tidak ditemukan |
| 4045516 | Partner not found | X-Partner-ID tidak terdaftar |
| 4095500 | Cannot use same X-EXTERNAL-ID in same day | X-External-ID sudah pernah digunakan di hari yang sama |
| 5005502 | reqbill not found | contractId tidak ditemukan |
| 5005500 | General Error | Kesalahan umum |
| 5005501 | Internal Server Error | Kegagalan internal server yang tidak dikenal. Silakan coba prosesnya kembali |
3. Payment Cancel
Service ini digunakan untuk membatalkan transaksi pembayaran eWallet. Transaksi yg bisa dibatalkan hanya transaksi yang belum terbayar.
Payload Request
| Nama Field | Tipe Data | Wajib | Deskripsi |
|---|---|---|---|
| originalPartnerReferenceNo | String | Y | Nomor transaksi sesuai dengan field partnerReferenceNo pada saat create payment Length: 5-50Karakter yang Diizinkan: huruf (a-z, A-Z), angka (0-9), garis bawah (_) dan tanda hubung (-) |
| reason | String | Y | Alasan pembatalan transaksi |
| additionalInfo | Object | Y | Object additionalInfo |
| contractId | String | Y | Nomor identifikasi transaksi yang dihasilkan di sistem Winpay |
| channel | String | Y | Channel eWallet |
{
"originalPartnerReferenceNo": "0000000000568",
"reason": "Network timeout",
"additionalInfo": {
"contractId": "soe1f74b38-e689-4747-b4bd-5dd876928349",
"channel": "SPAY"
}
}
Response Payload
| Parameter | Tipe Data | Deskripsi |
|---|---|---|
| responseCode | String | Kode response |
| responseMessage | String | Pesan response |
| additionalInfo | Object | Object response |
| contractId | String | Nomor identifikasi transaksi yang dihasilkan di sistem Winpay |
{
"responseCode": "2005700",
"responseMessage": "Successful",
"additionalInfo": {
"contractId": "soe1f74b38-e689-4747-b4bd-5dd876928349"
}
}
List Response Codes
| Response Code | Response Message | Description |
|---|---|---|
| 2005700 | Success | |
| 4005700 | Bad Request | Kegagalan request umum, termasuk kegagalan saat memproses pesan |
| 4005701 | Invalid field format { field name } | |
| 4005702 | Invalid mandatory field {field name} | |
| 4015700 | Invalid signature | X-Signature salah |
| 4045701 | Transaction not found | partnerReferenceNo dan contractId tidak ditemukan |
| 4045716 | Partner not found | X-Partner-ID tidak terdaftar |
| 4095700 | Cannot use same X-EXTERNAL-ID in same day | X-External-ID sudah pernah digunakan di hari yang sama |
| 5005700 | General Error | Kesalahan umum |
| 5005701 | Internal Server Error | Kegagalan internal server yang tidak dikenal. Silakan coba prosesnya kembali |
| 5005702 | reqbill not found | contractId tidak ditemukan |
Handle Payment Callback
Setelah customer melakukan pembayaran, Winpay akan mengirimkan callback ke merchant untuk memberitahukan status pembayaran. Merchant harus mengimplementasikan service untuk menerima callback dari Winpay.
Kami akan mengirimkan callback ke merchant 3x sampai merchant meresponse dengan response yang diharapkan. Namun ketika percobaan callback pertama sudah sesuai maka kami tidak akan mengirimkan callback lagi.
Callback Info
Layanan callback pembayaran eWallet yang dikirimkan oleh sistem Winpay ke server Merchant.
Struktur Header
| Header | Value | Deskripsi |
|---|---|---|
| Content-Type | application/json | |
| X-Timestamp | 2023-08-24T17:07:05+07:00 | ISO8601 String |
| X-Partner-ID | {partnerId} | |
| X-Signature | {signature} | |
| X-External-ID | {externalId} | |
| Channel-ID | {channelId} |
Callback Payload
| Parameter | Tipe Data | Deskripsi |
|---|---|---|
| originalPartnerReferenceNo | String | Nomor transaksi sesuai dengan field partnerReferenceNo pada saat create payment |
| originalReferenceNo | String | Nomor referensi pembayaran Winpay, unik pertransaksi |
| merchantId | String | Merchant ID |
| amount | Object | Object amount |
| amount.value | String | Nilai transaksi Length: 1-12Allowed Chars: 0-9 |
| amount.currency | String | Kode mata uang Length: 3Allowed Value: IDR |
| latestTransactionStatus | String | Status transaksi, transaksi berhasil atau tidak berdasarkan status ini 00 - Success 01 - Initiated 02 - Paying 03 - Pending04 - Refunded05 - Canceled06 - Failed07 - Not found |
| additionalInfo | Object | Object additionalInfo |
| additionalInfo.channel | String | Channel eWallet |
| additionalInfo.contractId | String | Nomor identifikasi transaksi yang dihasilkan di sistem Winpay |
{
"originalPartnerReferenceNo": "0000000000577",
"originalReferenceNo": "36289",
"merchantId": "170041",
"amount": {
"value": "1000",
"currency": "IDR"
},
"latestTransactionStatus": "00",
"additionalInfo": {
"channel": "SPAY",
"contractId": "so1baf2f8b-451b-44f0-80fb-fb68325e9c8b"
}
}
Expected Response
Response yang diharapkan dari merchant adalah sebagai berikut:
{
"responseCode": "2005600",
"responseMessage": "Successful"
}