Introduction
Selamat datang di AstraPay Dokumentasi API Merchant
Dokumen API ini merupakan dokumen yang dapat digunakan oleh pihak merchant yang mengambil kerja sama dengan AstraPay dalam proses integrasi secara sistem. Tujuan akhir dari dokumen ini adalah menjadikan AstraPay sebagai metode pembayaran dalam melakukan transaksi di merchant. Dokumen dapat digunakan oleh tim fungsional dan tim teknis untuk memahami desain yang akan dibangun.
Update terakhir : 4 Oktober 2024
Glossarium
Istilah | Definisi |
---|---|
Merchant | Pihak ketiga yang akan menggunakan dokumen |
API | Application Programming Interface. |
Database | Sebuah koleksi data yang tersusun dan di desain untuk kemudahan akses. Sebagai contoh nama pelanggan dan alamat |
AstraPay Member Account | Nomor pelanggan AstraPay yang digunakan untuk login ke aplikasi AstraPay |
Snap Keamanan
Snap keamanan AstraPay menggunakan enkripsi simetris dengan token ber-Standard Symmetric Encryption Signature HMAC_SHA512 (512 bits). Ada 4 komponen yang dibutuhkan untuk berkomunikasi:
- Client ID: adalah Client Identifier yang bersifat unik yang diterbitkan oleh AstraPay untuk akun Anda
Client Secret: adalah Secret Key yang digunakan untuk mengamankan enkripsi setiap request yang dikirim.
Public Key: adalah Public Key yang bersifat unik, diterbitkan oleh Anda dan diberikan kepada Astrapay.
Private Key: dibuat Private Key yang bersifat unik, diterbitkan oleh Anda dan disimpan oleh Anda sendiri.
Catatan : Client Secret dan Private Key bersifat rahasia, dilarang membagikan Client Secret dan atau Private Key kepada siapapun.
Untuk api keamanan, perlu diperhatikan tiga proses yaitu: 1. Generate Signature Auth 2. API B2B Access Token Request 3. Generate Signature Service
Generate Private Key dan Public Key
Cara generate private key dan public key, bisa melalui beberapa cara diantaranya generator online, logic coding atau melalui terminal/cmd. Untuk private key nantinya akan disimpan oleh merchant atau pengguna, sedangkan public key akan disimpan oleh merchant atau pengguna dan dibagikan ke AstraPay atau penyedia. Berikut merupakan penjelasan cara generate melalui terminal/cmd.
Untuk generate Private Key di terminal atau cmd, silahkan ketik command line dibawah:
openssl genrsa -out rsa_private_key.pem 2048
Untuk meng-export Public Key, di terminal ataum cmd, ketik command line dibawah:
openssl rsa -in rsa_private_key.pem -out rsa_public_key.pem -pubout
Encode Private Key to PKCS#8
openssl pkcs8 -topk8 -in rsa_private_key.pem -out pkcs8_rsa_private_key.pem -nocrypt
Untuk mengeluarkan nilai value dari file private_key atau public_key yang sudah tergenerate bisa dibuka dengan command line atau explorer. Dengan nama:
- pkcs8_rsa_private_key.pem = untuk private key
- rsa_public_key.pem = untuk public key.
Generate Signature Auth
Signature auth digunakan sebagai salah satu request header di api B2B Access Token Request. Dibawah ini merupakan langkah-langkah untuk men-generate signature auth.
1. Format payload untuk men-generate signature sebagai berikut:
[X-CLIENT-KEY] + "|" + [X-TIMESTAMP]
2. Signature yang sudah di generate sebelumnya dihasilkan dengan meng-aplikasikan enkripsi SHA-256 with RSA-2048 yang menggunakan private key pkcs8, kemudian hasilnya di encode menjadi base64.
3. Masukkan signature kedalam HTTP header “X-SIGNATURE” di api B2B Access Token Request
Contoh X-Signature yang sudah di generate:
85be817c55b2c135157c7e89f52499bf0c25ad6eeebe04a986e8c862561b19a5
API Access Token B2B
Protocol dan Service Address
Item | Value |
---|---|
Protocol | HTTPS |
Verb | POST |
API Name | Access Token B2B |
Function | API ini digunakan untuk mengambil token otorisasi berdasarkan client_id dan client_secret. Token digunakan untuk otorisasi HTTP Header |
Service Code | 73 |
Content type | application/json |
URL | snap-service/snap/v1.0/access-token/b2b |
Request
Contoh cURL
curl --location --request POST '/snap-service/snap/v1.0/access-token/b2b' \
--header 'x-client-key: client_id' \
--header 'x-timestamp: 2020-01-01T00:00:00+07:00' \
--header 'x-signature: KELOUOwWABn9/7gDrJ2ISSrf17xxxxxx' \
--header 'Content-Type: application/json' \
--data-raw '{
"grantType": "client_credentials"
}'
Header
Field | Type | Requirement | Description |
---|---|---|---|
Content-type | String | Mandatory | Tipe konten, data yang dikirim harus selalu application/json |
X-TIMESTAMP | String | Mandatory | Waktu lokal Merchant/Partner dalam format yyyy-MM-ddTHH:mm:ssTZD |
X-CLIENT-KEY | String | Mandatory | Merchant/Partner client_id |
X-SIGNATURE | String | Mandatory | Signature untuk API keamanan B2B Access Token Request (Siganture Auth).Verifikasi signature dapat dilakukan dengan menggunakan public key yang diberikan oleh Merchant/Partner |
Body
Field | Type | Requirement | Description |
---|---|---|---|
grantType | String | Mandatory | Data yang dikirim merupakan client_credential |
Response
Contoh Response
Content-type: application/json
X-TIMESTAMP: 2022-03-22T14:45:43+07:00
X-CLIENT-KEY: 85be817c55b2c135157c7e89f52499bf0c25ad6eeebe04a986e8c862561b19a5
{
"responseCode": "2007300",
"responseMessage": "Successful",
"accessToken": "DlHTC8U5urS6VDsWkNMv3ealeldgjR8H5CvYYfD8n5xxx",
"tokenType": "Bearer",
"expiresIn": "3600"
}
Header
Field | Type | Requirement | Description |
---|---|---|---|
Content-type | String | Mandatory | Tipe konten, data yang dikirim harus selalu application/json |
X-TIMESTAMP | String | Mandatory | Waktu lokal Merchant/Partner dalam format yyyy-MM-ddTHH:mm:ssTZD |
X-CLIENT-KEY | String | Mandatory | Merchant/Partner client_id |
Body
Field | Type | Requirement | Description |
---|---|---|---|
responseCode | String | Mandatory | Lihat response list |
responseMessage | String | Mandatory | Lihat response list |
accessToken | String | Conditional | Token Akses B2B |
tokenType | String | Conditional | Tipe dari token otorisasi, selalu berisi “Bearer” |
expiresIn | String | Conditional | Durasi aktif dari token. Secara default 3600 Detik. |
Generate Signature Service
Signature service digunakan sebagai salah satu request header (X-SIGNATURE) di API Service SNAP BI yang dihubungkan. Dibawah ini merupakan langkah-langkah untuk men-generate signature service.
1. Format payload untuk men-generate signature service adalah sebagai berikut:
[HTTP METHOD] + ”:” +
[RELATIVE PATH URL] + “:“ +
[B2B ACCESS TOKEN] + “:“ +
LowerCase(HexEncode(SHA-256(Minify([HTTP BODY])))) + “:“ +
[X-TIMESTAMP]
2. Signature yang sudah di generate sebelumnya dihasilkan dengan mengaplikasikan HMAC_SHA512 hashing menggunakan Client Secret yang diberikan AstraPay, kemudian hasilnya di encode menjadi base64.
3. Masukkan signature kedalam HTTP header “X-SIGNATURE” di API SNAP yang akan digunakan.
Contoh X-Signature yang sudah di generate:
06a7c024bd3927ecea861ddb8605f96b382cd09e8f0ed71a4c4e8c810627212dd6973ab495b405a14dbad54f9fe23f8873b33ebcc546e2766912b7de4c225ef5
Response List
Response Code | Service Code | Case Code | Response Message | Description |
---|---|---|---|---|
200 OK | any | 00 | Successful | Client berhasil teridentifikasi dan akses token diberikan. |
400 Bad Request | any | 01 | Invalid Field Format | Format field tidak benar. |
400 Bad Request | any | 02 | Invalid mandatory field {fieldName} | Data yang dibutuhkan tidak ada atau tidak lengkap. |
409 Duplicate | 47 | 01 | Duplicate partnerReferenceNo | partnerReferenceNo sudah ada pada sistem. |
404 Not Found | 47 | 17 | Invalid Terminal | Terminal code tidak ada di sistem. |
404 Not Found | 51 | 08 | Invalid Merchant | Merchant id tidak ada di sistem atau status merchant abnormal. |
500 Internal Server Error | Respons tidak valid dari Back-end atau Kesalahan Tidak Terdefinisi |
Payment Channel
Selamat datang di dokumentasi AstraPay Payment Channel, pada bagian ini akan dijelaskan cara Merchant melakukan integrasi AstraPay sebagai metode pembayaran pada Aplikasi Merchant, ada beberapa API yang kami sediakan untuk Merchant, yaitu:
- Authorization
- Account Link
- Account Registration
- Payment with linking
- Push to Payment BETA
- Profile
- Transaction Status
- Refund
- Response Code
- User Acceptance Testing
Dari proses di atas, akan dijelaskan apa saja yang perlu disiapkan, bagaimana step by step integration, dan apa yang akan ditampilkan ke user.
API Authorization, Payment, Profile dan Transaction Status, bisa Anda coba menggunakan Postman. Silahkan klik tombol dibawah ini untuk mencoba.
Sebelum melakukan proses integrasi, ada beberapa hal yang perlu dipersiapkan dan akan dibahas dibawah ini.
1. Introduction
1.1 Glosarium
Sebelum melakukan integrasi, mari kita bahas terlebih dahulu beberapa definisi dari istilah yang akan muncul pada dokumentasi ini. Penjelasan dari istilah tersebut adalah sebagai berikut:
Istilah | Deskripsi |
---|---|
Merchant | Pihak Ketiga yang ingin melakukan integrasi dengan AstraPay |
API | Application Programming Interface |
Database | Kumpulan data yang telah terorganisasi dan terstruktur. |
User | Pengguna atau Customer Jasa |
AstraPay Classic User | User AstraPay yang telah selesai melakukan registrasi. |
AstraPay Preferred User | User AstraPay yang telah selesai melakukan registrasi dan telah melakukan KYC di aplikasi AstraPay. |
1.2 Pendaftaran Merchant
Data Sample
Nama Merchant: Merchant
Email Merchant: [email protected]
Account Link Callback URL: merchant.com/account-link/callback
Payment Callback URL: merchant.com/payment/callback
Account Link Default URL: merchant.com/redirect/account-link/success, merchant.com/redirect/account-link/failed, merchant.com/redirect/account-link/error
Registration Default URL: merchant.com/redirect/registration/success, merchant.com/redirect/registration/failed, merchant.com/redirect/registration/error
Payment Default URL: merchant.com/redirect/payment/success, merchant.com/redirect/payment/failed, merchant.com/redirect/payment/error
Untuk melakukan integrasi dengan AstraPay, merchant diharuskan untuk mengirimkan beberapa data kepada AstraPay melalui email ke [email protected] dengan subjek "Pendaftaran Merchant Payment Channel [Nama Merchant]", data yang dikirimkan adalah sebagai berikut:
Field | Description | Requirement |
---|---|---|
Nama Merchant | Nama untuk menandakan Merchant yang melakukan integrasi | Mandatory |
Email Merchant | Email Merchant yang dapat dihubungi oleh AstraPay | Mandatory |
Account Link Callback URL | URL Merchant yang bisa dihit oleh AstraPay ketika ingin melakukan callback ke merchant setelah proses Account Link (Section 3) maupun Registration. Authorization: No Auth. | Mandatory |
Payment Callback URL | URL Merchant yang bisa dihit oleh AstraPay ketika ingin melakukan callback ke merchant setelah proses Payment. Authorization: No Auth. | Mandatory |
Account Link Default URL | URL Redirect Merchant yang akan mendirect User kembali ke halaman Merchant ketika sudah selesai melakukan Account Link (Section 3). Ada 3 URL yang diberikan, yaitu untuk case Success, Failed, dan Error. | Mandatory |
Registration Default URL | URL Redirect Merchant yang akan mendirect User kembali ke halaman Merchant ketika sudah selesai melakukan Registration (Section 3). Ada 3 URL yang diberikan, yaitu untuk case Success, Failed, dan Error. | Mandatory |
Payment Default URL | URL Redirect Merchant yang akan mendirect User kembali ke halaman Merchant ketika sudah selesai melakukan Payment (Section 4). Ada 3 URL yang diberikan, yaitu untuk case Success, Failed, dan Error. | Mandatory |
Setelah memberikan data tersebut ke pada AstraPay, Merchant akan diberikan credential (Mandatory) yang diperlukan untuk login Merchant Dashboard dan proses integrasi selanjutnya, credential yang diberikan adalah sebagai berikut:
Data Sample
Username: Merchant
Password: 23nds9&*w
ClientID: cd8a2deb-b004-4255-9c30-91656dc7d755
ClientSecret: ece0ae05-9a2e-4365-b59b-8ee7b1d8443b
Field | Description |
---|---|
Username | Username Merchant yang digunakan untuk login pada Merchant Dashboard (Coming Soon) |
Password | Password Merchant untuk melakukan login pada Merchant Dashboard (Coming Soon) |
ClientID | String unik untuk menandakan Merchant yang mengirim request |
ClientSecret | String unik rahasia untuk menandakan Merchant yang mengirim request |
Selain data di atas, AstraPay akan memberikan cara melakukan decrypt callbackSecurity yang nanti dibutuhkan oleh Merchant pada section 4.6.
2. Authorization
Authorization merupakan sebuah string token yang akan dipakai sebagai Request Header pada proses integrasi nanti, namun untuk mendapatkan Authorization ini Merchant perlu melakukan proses generate token. Proses Generate Token akan dijelaskan di bawah ini.
2.1 Endpoint
Complete Code
curl --location --request POST 'https://sandbox.astrapay.com/api/oauth/token' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'grant_type=client_credentials' \
--data-urlencode 'client_id=cd8a2deb-b004-4255-9c30-91656dc7d755' \
--data-urlencode 'client_secret=ece0ae05-9a2e-4365-b59b-8ee7b1d8443b'
Endpoint untuk proses Generate Token memiliki URL seperti di bawah ini:
Protocol: HTTPS
Method: POST
URL Sandbox: https://sandbox.astrapay.com/api/oauth/token
2.2 Request Header
Request Header yang harus dimasukkan untuk hit API Authorization adalah sebagai berikut:
Content-Type: application/x-www-form-urlencoded
2.3 Request Body
Request Body yang harus dimasukkan untuk melakukan hit pada Endpoint Generate Token adalah sebagai berikut
Sample Request Body
grant_type: client_credentials
client_id: cd8a2deb-b004-4255-9c30-91656dc7d755
client_secret: ece0ae05-9a2e-4365-b59b-8ee7b1d8443b
Field | Description | Type | Requirement |
---|---|---|---|
grant_type | Validasi jenis akses. Format: client_credentials | String | Mandatory |
client_id | String unik sebagai ID untuk menandakan Merchant yang mengirim request (Diberikan oleh AstraPay sesuai 1.2) | String (36) | Mandatory |
client_secret | String unik rahasia untuk menandakan Merchant yang mengirim request (Diberikan oleh AstraPay sesuai 1.2) | String (36) | Mandatory |
2.4 Response Body
Setelah melakukan request terhadap endpoint Generate Token, maka Merchant akan mendapat respon seperti di samping.
Sample Response Body
{
"access_token": "eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJlVm9kSlYzeVN6aUlyLW9aZjZCQzJtUVVaTmJFLWFaQndETjFUUmxmZE1jIn0.eyJleHAiOjE2Mzk0NDY3NzksImlhdCI6MTYzOTQ0NjQ3OSwianRpIjoiMzUxYWVlYTAtNTE2Ny00OTVkLWJhNTYtYWY5NmRhOTg2ZTFjIiwiaXNzIjoiaHR0cDovLzE3Mi4yMC4zLjEyNDo4MDgwL2F1dGgvcmVhbG1zL2FzdHJhcGF5LWJ1c2luZXNzIiwiYXVkIjoiYWNjb3VudCIsInN1YiI6IjJlNjJmNzVhLTA2Y2UtNGQ5ZC04NTRkLTdiYWYxYjk0OWJiOSIsInR5cCI6IkJlYXJlciIsImF6cCI6IjYwMDY4YzlmLTkyMGMtNGVlMy05M2Q5LWQ0NWRlMzcxZjJlMSIsImFjciI6IjEiLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsiZGVmYXVsdC1yb2xlcy1hc3RyYXBheS1idXNpbmVzcyIsIm9mZmxpbmVfYWNjZXNzIiwidW1hX2F1dGhvcml6YXRpb24iXX0sInJlc291cmNlX2FjY2VzcyI6eyJhY2NvdW50Ijp7InJvbGVzIjpbIm1hbmFnZS1hY2NvdW50IiwibWFuYWdlLWFjY291bnQtbGlua3MiLCJ2aWV3LXByb2ZpbGUiXX19LCJzY29wZSI6InByb2ZpbGUgZW1haWwiLCJlbWFpbF92ZXJpZmllZCI6ZmFsc2UsImNsaWVudEhvc3QiOiIxNzIuMjAuMy4xMjMiLCJjbGllbnRJZCI6IjYwMDY4YzlmLTkyMGMtNGVlMy05M2Q5LWQ0NWRlMzcxZjJlMSIsInByZWZlcnJlZF91c2VybmFtZSI6InNlcnZpY2UtYWNjb3VudC02MDA2OGM5Zi05MjBjLTRlZTMtOTNkOS1kNDVkZTM3MWYyZTEiLCJjbGllbnRBZGRyZXNzIjoiMTcyLjIwLjMuMTIzIn0.THD7R67KhJu93x4pBzQUSbxb4riGTROdPCFiVTGhz9v1sYmo7Ku1rDNrRw2hZcnnIxrXMPlVsHeLSrjS_gpXFUTSibqGlpqKpQ-niHxWnzHns-IbUAZF0Us0pj_7Yx3g0Q7huGwyV-ZyMXYrgZFCul4IKloUgEkYASznGGM2dCuH9kp90tGwXfQwLsgmq570mtE9LpSS0lIg92uLd8H7nDTCAhQVgG-9r5RkuxJv7GZqcajD2G4hrZgkR8FrtY5gnMu-mA4GzWGfpVwFWqRY_i9y2_nP5attQ07IsbFaARR6SKnMUAVG11mtRopDn8b4MTLpcAJ_IpVYRaQ8KcrZ_Q",
"expires_in": 3600,
"refresh_expires_in": 0,
"token_type": "Bearer",
"not-before-policy": 0,
"scope": "profile email"
}
Field | Description | Type |
---|---|---|
access_token | Token Authorization yang akan digunakan Merchant untuk menggunakan API Payment Channel AstraPay | Text |
expires_in | Durasi berlaku token. Satuan = Detik, untuk waktu durasi token adalah 3600 detik atau 1 Jam. | Integer |
refresh_expires_in | Waktu refresh kadaluarsa Token. Default: 0 | Integer |
token_type | Default: Bearer | String |
not-before-policy | Default: 0 | Integer |
scope | Application scope yang diizinkan. Default: "profile email" | String |
access_token ini akan dijadikan Authorization pada proses selanjutnya, ketika token sudah kadaluarsa maka Merchant harus melakukan ulang Generate Token kembali.
3. Account Link and Registration
Proses Account Link merupakan proses integrasi akun AstraPay yang dimiliki oleh User dengan Aplikasi Merchant. Pada saat proses Account Link, User juga dapat melakukan Registration jika belum mempunyai akun. Setelah selesai proses Registration, maka account yang baru saja diregister juga langsung terintegrasi dengan Merchant. Berikut ini akan dijelaskan apa saja yang dibutuhkan dan bagaimana step by step proses integrasi yang perlu dilakukan.
Global Architecture Account Link
Global Architecture Registration
3.1 Endpoint
--
Complete Code
curl --location --request GET 'https://sandbox.astrapay.com/merchant-service/link?clientId=cd8a2deb-b004-4255-9c30-91656dc7d755&merchantUserId=M-01'
Endpoint untuk proses Account Link dan Registration memiliki URL yang sama seperti di bawah ini:
Protocol: HTTPS
Method: GET
Sandbox URL: https://sandbox.astrapay.com/merchant-service/link
Namun yang membedakan adalah flow yang dilakukan oleh user yang akan dijelaskan masing-masing di poin 3.4 dan 3.5.
Request Parameter
Sample Request Parameter
https://sandbox.astrapay.com/merchant-service/link?clientId=cd8a2deb-b004-4255-9c30-91656dc7d755&merchantUserId=M-01
Sample URL
https://www.merchant.com/account-link/success?merchantUserId=M-01
atau
https://www.merchant.com/registration/success?merchantUserId=M-01
Sample App Deeplink
merchantapp://app/account-link/success?merchantUserId=M-01
atau
merchantapp://app/registration/success?merchantUserId=M-01
Request Parameter yang Merchant harus masukkan saat melakukan ujicoba adalah sebagai berikut
Parameter | Description | Type | Requirement |
---|---|---|---|
clientId | String unik untuk menandakan Merchant yang mengirim request (Diberikan oleh AstraPay sesuai 1.2) | String (36) | Mandatory |
merchantUserId | String unik untuk menandakan Akun User milik Merchant yang akan diintegrasikan dengan Akun AstraPay | String (255) | Mandatory |
Setelah memasukkan clientId pada Request Parameter, maka link akan terlihat seperti di samping. Lalu Merchant dapat langsung melakukan request tanpa perlu menambah Request Header maupun Request Body. Setelah melakukan request maka Merchant langsung diredirect ke HTML atau halaman Account Link dan Registration seperti pada 3.4 dan 3.5.
Ketika proses Account Link atau Registration selesai, maka Merchant akan diredirect sesuai dengan Account Link/Registration Default URL yang telah didaftarkan Merchant pada poin 1.2, dan akan berbentuk link seperti disamping.
Field | Description | Type |
---|---|---|
merchantUserId | String unik untuk menandakan Akun User milik Merchant yang akan diintegrasikan dengan Akun AstraPay | String (255) |
Di saat yang bersamaan, Sistem AstraPay akan melakukan callback ke Account Link Callback URL.
3.2 Account Link Callback
Ketika proses Account Link maupun Registration Sukses, maka Sistem AstraPay akan mengirimkan callback ke Account Link Callback URL Merchant yang telah didaftarkan oleh Merchant pada section 1. Adapun Request Header dan Request Body yang dikirimkan adalah sebagai berikut:
Method: POST
Content-Type: application/json
Request Body
Sample Request Body
{
"signature": "b0950d6cdb9ba3f59a2baaa7e4a9cc6296b09d0a"
"merchantUserId": "M-01"
"callbackTimestamp": "2021-08-31 08:25:48.363"
}
Field | Description | Type | Requirement |
---|---|---|---|
signature | String unik untuk menandakan integrasi antara akun AstraPay (account) dengan akun Merchant (merchantUserId) | String (255) | Mandatory |
merchantUserId | String unik untuk menandakan Akun User milik Merchant yang akan diintegrasikan dengan Akun AstraPay | String (255) | Mandatory |
callbackTimestamp | Waktu terjadinya pengiriman callback. (Generated Automatic by AstraPay) Format: yyyy-MM-dd HH:mm:ss.SSS | String | Mandatory |
Setelah Request Callback selesai maka Merchant diharapkan memberikan response seperti di samping:
Sample Response Body
{
"status":"OK"
"message":" "
}
Field | Description | Type |
---|---|---|
status | Status Callback | String |
message | Pesan tambahan oleh Merchant | String |
3.3 User Experience on Account Link
Pada section ini, akan dibahas apa saja yang akan dialami oleh Merchant User saat proses Account Link. Proses Account Link ini terdapat 4 bagian, yaitu:
- Account Number Page
- PIN Page
- OTP Page
- Account Link Result Page
Di bawah ini akan ditampilkan prototype untuk Account Link yang bisa dicoba oleh Merchant. Prototype ini akan menampilkan beberapa case, yaitu:
- Account Link Success
- Account Link Failed - Wrong PIN & Wrong OTP
3.3.1 Account Link Success
3.3.2 Account Link Failed - Wrong PIN & Wrong OTP
3.4 User Experience on Registration Page
Pada section ini, akan dibahas apa saja yang akan dialami oleh Merchant User saat proses Registration. Proses Registration ini terdapat 5 bagian, yaitu:
- Account Number Page
- Account Not Found Page
- Registration Page
- OTP Page
- Registration Result Page
Di bawah ini akan ditampilkan prototype untuk Register yang bisa dicoba oleh Merchant. Prototype ini akan menampilkan beberapa case, yaitu:
- Registration Success
- Registration Failed - Wrong OTP
3.4.1 Registration Success
3.4.2 Registration Failed - Wrong OTP
Kami menyediakan 2 metode pembayaran pada Payment Channel AstraPay, yaitu:
1. Payment with linking
2. Push to Payment
4. Payment with linking
Setelah melakukan proses Account Link, maka Merchant dapat mencoba pembayaran menggunakan account yang Merchant gunakan saat Account Link. Proses integrasi untuk Payment akan dijelaskan step by step di bawah ini.
4.1 Architecture
Keterangan
1. User melakukan checkout di Merchant
2. Merchant Backend melakukan hit request API ke AstraPay Backend untuk
mendapatkan token
3. AstraPay Backend memberikan response API berupa token dan url
Checkout Page ke Merchant Backend
4. Merchant Backend melakukan hit url ke Checkout Page AstraPay Webview
5. User melihat detail pembayaran dan klik tombol bayar
6. User memasukkan PIN dan AstraPay Backend melakukan validasi PIN
7. Setelah PIN terverifikasi, AstraPay Backend melakukan automatic redirect
ke webview sesuai default URL Merchant
8. Di waktu yang sama AstraPay Backend mengirimkan informasi status pembayaran
melalui payment callback ke Merchant Backend
Secara Arsitektur, metode pembayaran Merchant menggunakan AstraPay adalah sebagai berikut:
4.2 Endpoint
Complete Code
curl --location --request POST 'https://sandbox.astrapay.com/v1/merchant-service/payments' \
--header 'Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJlVm9kSlYzeVN6aUlyLW9aZjZCQzJtUVVaTmJFLWFaQndETjFUUmxmZE1jIn0.eyJleHAiOjE2Mzk0NDY3NzksImlhdCI6MTYzOTQ0NjQ3OSwianRpIjoiMzUxYWVlYTAtNTE2Ny00OTVkLWJhNTYtYWY5NmRhOTg2ZTFjIiwiaXNzIjoiaHR0cDovLzE3Mi4yMC4zLjEyNDo4MDgwL2F1dGgvcmVhbG1zL2FzdHJhcGF5LWJ1c2luZXNzIiwiYXVkIjoiYWNjb3VudCIsInN1YiI6IjJlNjJmNzVhLTA2Y2UtNGQ5ZC04NTRkLTdiYWYxYjk0OWJiOSIsInR5cCI6IkJlYXJlciIsImF6cCI6IjYwMDY4YzlmLTkyMGMtNGVlMy05M2Q5LWQ0NWRlMzcxZjJlMSIsImFjciI6IjEiLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsiZGVmYXVsdC1yb2xlcy1hc3RyYXBheS1idXNpbmVzcyIsIm9mZmxpbmVfYWNjZXNzIiwidW1hX2F1dGhvcml6YXRpb24iXX0sInJlc291cmNlX2FjY2VzcyI6eyJhY2NvdW50Ijp7InJvbGVzIjpbIm1hbmFnZS1hY2NvdW50IiwibWFuYWdlLWFjY291bnQtbGlua3MiLCJ2aWV3LXByb2ZpbGUiXX19LCJzY29wZSI6InByb2ZpbGUgZW1haWwiLCJlbWFpbF92ZXJpZmllZCI6ZmFsc2UsImNsaWVudEhvc3QiOiIxNzIuMjAuMy4xMjMiLCJjbGllbnRJZCI6IjYwMDY4YzlmLTkyMGMtNGVlMy05M2Q5LWQ0NWRlMzcxZjJlMSIsInByZWZlcnJlZF91c2VybmFtZSI6InNlcnZpY2UtYWNjb3VudC02MDA2OGM5Zi05MjBjLTRlZTMtOTNkOS1kNDVkZTM3MWYyZTEiLCJjbGllbnRBZGRyZXNzIjoiMTcyLjIwLjMuMTIzIn0.THD7R67KhJu93x4pBzQUSbxb4riGTROdPCFiVTGhz9v1sYmo7Ku1rDNrRw2hZcnnIxrXMPlVsHeLSrjS_gpXFUTSibqGlpqKpQ-niHxWnzHns-IbUAZF0Us0pj_7Yx3g0Q7huGwyV-ZyMXYrgZFCul4IKloUgEkYASznGGM2dCuH9kp90tGwXfQwLsgmq570mtE9LpSS0lIg92uLd8H7nDTCAhQVgG-9r5RkuxJv7GZqcajD2G4hrZgkR8FrtY5gnMu-mA4GzWGfpVwFWqRY_i9y2_nP5attQ07IsbFaARR6SKnMUAVG11mtRopDn8b4MTLpcAJ_IpVYRaQ8KcrZ_Q' \
--header 'Content-Type: application/json' \
--data-raw '{
"signature": "b0950d6cdb9ba3f59a2baaa7e4a9cc6296b09d0a",
"merchantTransactionId": "TRX000001",
"amount": "10000",
"currency": "IDR",
"description": "buy account premium"
}'
Endpoint untuk metode Payment yang bisa Merchant hit adalah di bawah ini:
Protocol: HTTPS
Method: POST
URL Sandbox: https://sandbox.astrapay.com/v1/merchant-service/payments
Contoh complete request ada di sebelah kanan ini, detail-detail dari sample tersebut akan dijelaskan setelah poin ini.
Request Header
Sample Request Header
{
"Authorization": "Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJlVm9kSlYzeVN6aUlyLW9aZjZCQzJtUVVaTmJFLWFaQndETjFUUmxmZE1jIn0.eyJleHAiOjE2Mzk0NDY3NzksImlhdCI6MTYzOTQ0NjQ3OSwianRpIjoiMzUxYWVlYTAtNTE2Ny00OTVkLWJhNTYtYWY5NmRhOTg2ZTFjIiwiaXNzIjoiaHR0cDovLzE3Mi4yMC4zLjEyNDo4MDgwL2F1dGgvcmVhbG1zL2FzdHJhcGF5LWJ1c2luZXNzIiwiYXVkIjoiYWNjb3VudCIsInN1YiI6IjJlNjJmNzVhLTA2Y2UtNGQ5ZC04NTRkLTdiYWYxYjk0OWJiOSIsInR5cCI6IkJlYXJlciIsImF6cCI6IjYwMDY4YzlmLTkyMGMtNGVlMy05M2Q5LWQ0NWRlMzcxZjJlMSIsImFjciI6IjEiLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsiZGVmYXVsdC1yb2xlcy1hc3RyYXBheS1idXNpbmVzcyIsIm9mZmxpbmVfYWNjZXNzIiwidW1hX2F1dGhvcml6YXRpb24iXX0sInJlc291cmNlX2FjY2VzcyI6eyJhY2NvdW50Ijp7InJvbGVzIjpbIm1hbmFnZS1hY2NvdW50IiwibWFuYWdlLWFjY291bnQtbGlua3MiLCJ2aWV3LXByb2ZpbGUiXX19LCJzY29wZSI6InByb2ZpbGUgZW1haWwiLCJlbWFpbF92ZXJpZmllZCI6ZmFsc2UsImNsaWVudEhvc3QiOiIxNzIuMjAuMy4xMjMiLCJjbGllbnRJZCI6IjYwMDY4YzlmLTkyMGMtNGVlMy05M2Q5LWQ0NWRlMzcxZjJlMSIsInByZWZlcnJlZF91c2VybmFtZSI6InNlcnZpY2UtYWNjb3VudC02MDA2OGM5Zi05MjBjLTRlZTMtOTNkOS1kNDVkZTM3MWYyZTEiLCJjbGllbnRBZGRyZXNzIjoiMTcyLjIwLjMuMTIzIn0.THD7R67KhJu93x4pBzQUSbxb4riGTROdPCFiVTGhz9v1sYmo7Ku1rDNrRw2hZcnnIxrXMPlVsHeLSrjS_gpXFUTSibqGlpqKpQ-niHxWnzHns-IbUAZF0Us0pj_7Yx3g0Q7huGwyV-ZyMXYrgZFCul4IKloUgEkYASznGGM2dCuH9kp90tGwXfQwLsgmq570mtE9LpSS0lIg92uLd8H7nDTCAhQVgG-9r5RkuxJv7GZqcajD2G4hrZgkR8FrtY5gnMu-mA4GzWGfpVwFWqRY_i9y2_nP5attQ07IsbFaARR6SKnMUAVG11mtRopDn8b4MTLpcAJ_IpVYRaQ8KcrZ_Q",
"Content-Type": "application/json"
}
Request Header yang harus dimasukkan sebelum melakukan hit API Payment adalah sebagai berikut:
Authorization: Bearer token (Cara generate token ada pada section 2)
Content-Type: application/json
Request Body
Request Body yang dimasukkan oleh Merchant adalah sebagai berikut:
Sample Request Body
{
"signature": "b0950d6cdb9ba3f59a2baaa7e4a9cc6296b09d0a",
"merchantTransactionId": "TRX000001",
"amount": "10000",
"currency": "IDR",
"description": "buy account premium"
}
Field | Description | Type (Length) | Requirement |
---|---|---|---|
signature | String unik untuk menandakan integrasi antara akun AstraPay (account) dengan akun Merchant (merchantUserId) | String (255) | Mandatory |
merchantTransactionId | Kode unik transaksi Merchant yang dicatat Merchant | String (255) | Mandatory |
amount | Jumlah atau Nominal Transaksi. Min: 10000, Max: 10000000. | String (8) | Mandatory |
currency | Jenis mata uang. Default: IDR (Selain IDR akan kami tolak) | String (3) | Mandatory |
description | Catatan yang diperlukan | String (255) | Optional |
Response Body
Sample Response Body
{
"token": "1c74a043-a28d-4826-a175-0bba189a83fd",
"urlRedirect": "https://sandbox.astrapay.com/merchant-service/payments/1c74a043-a28d-4826-a175-0bba189a83fd"
}
Setelah Merchant berhasil melakukan request payment, maka Merchant akan mendapatkan respon sebagai berikut:
Field | Description | Type |
---|---|---|
token | Set of strings untuk memberikan akses Merchant User untuk melakukan transaksi menggunakan AstraPay.js (Coming Soon) | String |
urlRedirect | URL Webview Payment AstraPay untuk Merchant User Melakukan Pembayaran | String |
urlRedirect inilah yang akan digunakan oleh Aplikasi Merchant untuk generate HTML AstraPay Payment Webview, adapun proses yang dialami oleh user akan dibahas pada 4.7.
Ketika proses Payment selesai, maka Merchant akan diredirect sesuai dengan Payment Default URL yang telah didaftarkan Merchant pada poin 1.2. dan akan seperti link seperti di samping.
Sample URL
https://www.merchant.com/redirect/payment/success?merchantTransactionId=TRX000001
Sample App Deeplink
merchantapp://app/payment/success?merchantTransactionId=TRX000001
Field | Description | Type |
---|---|---|
merchantTransactionId | Kode unik transaksi Merchant yang dicatat Merchant | String (255) |
Di saat yang bersamaan, Sistem AstraPay akan melakukan callback ke Payment Callback URL.
4.3 Payment Callback
Setelah Merchant User selesai melakukan proses pembayaran dan sukses, maka AstraPay akan mengirimkan request kepada Payment Callback URL milik Merchant yang telah didaftarkan ke AstraPay pada poin 1.2. Request tersebut berfungsi sebagai notifikasi ke Merchant tentang status pembayaran dari Transaksi yang baru dilakukan.
Request yang dikirimkan oleh AstraPay akan berupa Request Body sebagai berikut:
Method: POST
Content-Type: application/json
Sample Request Body
{
"merchantTransactionId": "TRX000001"
"astrapayTransactionId": "MP-001"
"amount": "10000"
"status": "Approved"
"callbackTimestamp": "2021-08-31 08:25:48.363"
"callbackSecurity": "c9ab3fa89b6c5b771e1162b50f1dd81f9f2c18b6015798c5ddcc5fb044a12519"
}
Field | Description | Type | Requirement |
---|---|---|---|
merchantTransactionId | Kode unik transaksi Merchant yang dicatat di Merchant | String (255) | Mandatory |
astrapayTransactionId | Kode unik transaksi Merchant yang dicatat di AstraPay | String (255) | Mandatory |
amount | Jumlah atau Nominal Transaksi. Min: 10000, Max: 10000000. | String (8) | Mandatory |
status | Status Transaksi (Approved / Reject / Timeout ) | String (8) | Mandatory |
callbackTimestamp | Waktu terjadinya pengiriman callback. (Generated Automatic by AstraPay) Format: yyyy-MM-dd HH:mm:ss.SSS | String | Mandatory |
callbackSecurity | String hasil automatic generation oleh sistem astrapay dari Timestamp dan merchantTransactionId. | String (255) | Mandatory |
Lalu setelah itu Merchant akan mengirimkan response seperti ini:
Sample Response Body
{
"status": "OK",
"message": " "
}
Field | Description | Type |
---|---|---|
status | Status Callback | String |
message | Pesan tambahan oleh Merchant | String |
Setelah proses Payment Notification selesai, maka proses pembayaran oleh Merchant User dan pencatatan oleh Merchant maupun AstraPay terhadap transaksi tersebut dapat dinyatakan selesai. Adapun proses-proses lain seperti refund, adalah proses yang berbeda dan dilakukan diluar proses ini.
4.4 User Experience on AstraPay Payment Webview
Pada section ini, akan dibahas apa saja yang akan dialami oleh Merchant User saat proses Payment. Proses Payment ini terdapat 3 bagian, yaitu:
- Payment Detail Page
- PIN Page
- Payment Result Page
Di bawah ini akan ditampilkan prototype untuk Payment yang bisa dicoba oleh Merchant. Prototype ini akan menampilkan beberapa case, yaitu:
- Payment Success
- Payment Wrong PIN
- Payment Expired
4.5 Payment Success
4.6 Payment Wrong PIN
4.7 Payment Expired
5. Push to Payment BETA
Push to payment adalah salah satu metode pembayaran di Payment Channel AstraPay, dengan metode ini user tidak perlu melakukan linking dengan Merchant. User hanya perlu menmasukkan nomor handphone yang sudah terdaftar pada AstraPay. Jika nomor yang dimasukkan belum terdaftar maka user akan diarahkan ke halaman registrasi seperti pada section 3.5 User Experience on Registration Page
5.1 Architecture
Keterangan
1. User melakukan checkout di Merchant
2. Merchant Backend melakukan hit request API ke AstraPay Backend untuk
mendapatkan token
3. AstraPay Backend memberikan response API berupa token dan url
Checkout Page ke Merchant Backend
4. Merchant Backend melakukan hit url ke Checkout Page AstraPay Webview
5. User memasukkan nomor handphone yang terdaftar di AstraPay dan masuk
ke detail pembayaran
6. User melihat detail pembayaran dan klik tombol bayar
7. User memasukkan PIN dan AstraPay Backend melakukan validasi PIN
8. Setelah PIN terverifikasi, AstraPay Backend melakukan automatic redirect
ke webview sesuai default URL Merchant
9. Di waktu yang sama AstraPay Backend mengirimkan informasi status pembayaran
melalui payment callback ke Merchant Backend
Secara Arsitektur, alur metode pembayaran push to payment adalah sebagai berikut:
5.2 Endpoint
Complete Code
curl --location --request POST 'https://sandbox.astrapay.com/merchant-service/push-payments' \
--header 'Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJlVm9kSlYzeVN6aUlyLW9aZjZCQzJtUVVaTmJFLWFaQndETjFUUmxmZE1jIn0.eyJleHAiOjE2Mzk0NDY3NzksImlhdCI6MTYzOTQ0NjQ3OSwianRpIjoiMzUxYWVlYTAtNTE2Ny00OTVkLWJhNTYtYWY5NmRhOTg2ZTFjIiwiaXNzIjoiaHR0cDovLzE3Mi4yMC4zLjEyNDo4MDgwL2F1dGgvcmVhbG1zL2FzdHJhcGF5LWJ1c2luZXNzIiwiYXVkIjoiYWNjb3VudCIsInN1YiI6IjJlNjJmNzVhLTA2Y2UtNGQ5ZC04NTRkLTdiYWYxYjk0OWJiOSIsInR5cCI6IkJlYXJlciIsImF6cCI6IjYwMDY4YzlmLTkyMGMtNGVlMy05M2Q5LWQ0NWRlMzcxZjJlMSIsImFjciI6IjEiLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsiZGVmYXVsdC1yb2xlcy1hc3RyYXBheS1idXNpbmVzcyIsIm9mZmxpbmVfYWNjZXNzIiwidW1hX2F1dGhvcml6YXRpb24iXX0sInJlc291cmNlX2FjY2VzcyI6eyJhY2NvdW50Ijp7InJvbGVzIjpbIm1hbmFnZS1hY2NvdW50IiwibWFuYWdlLWFjY291bnQtbGlua3MiLCJ2aWV3LXByb2ZpbGUiXX19LCJzY29wZSI6InByb2ZpbGUgZW1haWwiLCJlbWFpbF92ZXJpZmllZCI6ZmFsc2UsImNsaWVudEhvc3QiOiIxNzIuMjAuMy4xMjMiLCJjbGllbnRJZCI6IjYwMDY4YzlmLTkyMGMtNGVlMy05M2Q5LWQ0NWRlMzcxZjJlMSIsInByZWZlcnJlZF91c2VybmFtZSI6InNlcnZpY2UtYWNjb3VudC02MDA2OGM5Zi05MjBjLTRlZTMtOTNkOS1kNDVkZTM3MWYyZTEiLCJjbGllbnRBZGRyZXNzIjoiMTcyLjIwLjMuMTIzIn0.THD7R67KhJu93x4pBzQUSbxb4riGTROdPCFiVTGhz9v1sYmo7Ku1rDNrRw2hZcnnIxrXMPlVsHeLSrjS_gpXFUTSibqGlpqKpQ-niHxWnzHns-IbUAZF0Us0pj_7Yx3g0Q7huGwyV-ZyMXYrgZFCul4IKloUgEkYASznGGM2dCuH9kp90tGwXfQwLsgmq570mtE9LpSS0lIg92uLd8H7nDTCAhQVgG-9r5RkuxJv7GZqcajD2G4hrZgkR8FrtY5gnMu-mA4GzWGfpVwFWqRY_i9y2_nP5attQ07IsbFaARR6SKnMUAVG11mtRopDn8b4MTLpcAJ_IpVYRaQ8KcrZ_Q' \
--header 'Content-Type: application/json' \
--data-raw '{
"merchantTransactionId": "TRX000001",
"amount": "10000",
"currency": "IDR",
"description": "buy using push to payment"
}'
Endpoint untuk metode push to payment yang bisa Merchant hit adalah di bawah ini:
Protocol: HTTPS
Method: POST
URL Sandbox: https://sandbox.astrapay.com/merchant-service/push-payments
Contoh complete request ada di sebelah kanan, detail dari sample tersebut akan dijelaskan setelah poin ini.
Request Header
Sample Request Header
{
"Authorization": "Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJlVm9kSlYzeVN6aUlyLW9aZjZCQzJtUVVaTmJFLWFaQndETjFUUmxmZE1jIn0.eyJleHAiOjE2Mzk0NDY3NzksImlhdCI6MTYzOTQ0NjQ3OSwianRpIjoiMzUxYWVlYTAtNTE2Ny00OTVkLWJhNTYtYWY5NmRhOTg2ZTFjIiwiaXNzIjoiaHR0cDovLzE3Mi4yMC4zLjEyNDo4MDgwL2F1dGgvcmVhbG1zL2FzdHJhcGF5LWJ1c2luZXNzIiwiYXVkIjoiYWNjb3VudCIsInN1YiI6IjJlNjJmNzVhLTA2Y2UtNGQ5ZC04NTRkLTdiYWYxYjk0OWJiOSIsInR5cCI6IkJlYXJlciIsImF6cCI6IjYwMDY4YzlmLTkyMGMtNGVlMy05M2Q5LWQ0NWRlMzcxZjJlMSIsImFjciI6IjEiLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsiZGVmYXVsdC1yb2xlcy1hc3RyYXBheS1idXNpbmVzcyIsIm9mZmxpbmVfYWNjZXNzIiwidW1hX2F1dGhvcml6YXRpb24iXX0sInJlc291cmNlX2FjY2VzcyI6eyJhY2NvdW50Ijp7InJvbGVzIjpbIm1hbmFnZS1hY2NvdW50IiwibWFuYWdlLWFjY291bnQtbGlua3MiLCJ2aWV3LXByb2ZpbGUiXX19LCJzY29wZSI6InByb2ZpbGUgZW1haWwiLCJlbWFpbF92ZXJpZmllZCI6ZmFsc2UsImNsaWVudEhvc3QiOiIxNzIuMjAuMy4xMjMiLCJjbGllbnRJZCI6IjYwMDY4YzlmLTkyMGMtNGVlMy05M2Q5LWQ0NWRlMzcxZjJlMSIsInByZWZlcnJlZF91c2VybmFtZSI6InNlcnZpY2UtYWNjb3VudC02MDA2OGM5Zi05MjBjLTRlZTMtOTNkOS1kNDVkZTM3MWYyZTEiLCJjbGllbnRBZGRyZXNzIjoiMTcyLjIwLjMuMTIzIn0.THD7R67KhJu93x4pBzQUSbxb4riGTROdPCFiVTGhz9v1sYmo7Ku1rDNrRw2hZcnnIxrXMPlVsHeLSrjS_gpXFUTSibqGlpqKpQ-niHxWnzHns-IbUAZF0Us0pj_7Yx3g0Q7huGwyV-ZyMXYrgZFCul4IKloUgEkYASznGGM2dCuH9kp90tGwXfQwLsgmq570mtE9LpSS0lIg92uLd8H7nDTCAhQVgG-9r5RkuxJv7GZqcajD2G4hrZgkR8FrtY5gnMu-mA4GzWGfpVwFWqRY_i9y2_nP5attQ07IsbFaARR6SKnMUAVG11mtRopDn8b4MTLpcAJ_IpVYRaQ8KcrZ_Q",
"Content-Type": "application/json"
}
Request Header yang harus dimasukkan sebelum melakukan hit API push to payment adalah sebagai berikut:
Authorization: Bearer token (Cara generate token ada pada section 2)
Content-Type: application/json
Request Body
Request Body yang dimasukkan oleh Merchant adalah sebagai berikut:
Sample Request Body
{
"merchantTransactionId": "TRX000001",
"amount": "10000",
"currency": "IDR",
"description": "buy using push to payment"
}
Field | Description | Type (Length) | Requirement |
---|---|---|---|
merchantTransactionId | Kode unik transaksi Merchant yang dicatat Merchant | String (255) | Mandatory |
amount | Jumlah atau Nominal Transaksi. Min: 10000, Max: 10000000. | String (8) | Mandatory |
currency | Jenis mata uang. Default: IDR (Selain IDR akan kami tolak) | String (3) | Mandatory |
description | Catatan yang diperlukan | String (255) | Optional |
Response Body
Setelah Merchant berhasil melakukan request payment, maka Merchant akan mendapatkan respon sebagai berikut:
Sample Response Body
{
"token": "1c74a043-a28d-4826-a175-0bba189a83fd",
"urlRedirect": "https://sandbox.astrapay.com/merchant-service/payments/1c74a043-a28d-4826-a175-0bba189a83fd"
}
Field | Description | Type |
---|---|---|
token | Set of strings untuk memberikan akses Merchant User untuk melakukan transaksi menggunakan AstraPay.js (Coming Soon) | String |
urlRedirect | URL Webview Payment AstraPay uxzntuk Merchant User Melakukan Pembayaran | String |
urlRedirect inilah yang akan digunakan oleh Aplikasi Merchant untuk generate HTML AstraPay Payment Webview, adapun proses yang dialami oleh user akan dibahas pada 4.7.
Ketika proses Payment selesai, maka Merchant akan diredirect sesuai dengan Payment Default URL yang telah didaftarkan Merchant pada poin 1.2. dan akan seperti link seperti di samping.
Sample URL
https://www.merchant.com/redirect/payment/success?merchantTransactionId=TRX000001
Sample App Deeplink
merchantapp://app/payment/success?merchantTransactionId=TRX000001
Field | Description | Type |
---|---|---|
merchantTransactionId | Kode unik transaksi Merchant yang dicatat Merchant | String (255) |
Di saat yang bersamaan, Sistem AstraPay akan melakukan callback ke Payment Callback URL.
5.3 Payment Callback
Setelah Merchant User selesai melakukan proses pembayaran dan sukses, maka AstraPay akan mengirimkan request kepada Payment Callback URL milik Merchant yang telah didaftarkan ke AstraPay pada poin 1.2. Request tersebut berfungsi sebagai notifikasi ke Merchant tentang status pembayaran dari Transaksi yang baru dilakukan.
Request yang dikirimkan oleh AstraPay akan berupa Request Body sebagai berikut:
Method: POST
Content-Type: application/json
Sample Request Body
{
"merchantTransactionId": "TRX000001"
"astrapayTransactionId": "MP-001"
"amount": "10000"
"status": "Approved"
"callbackTimestamp": "2021-08-31 08:25:48.363"
"callbackSecurity": "c9ab3fa89b6c5b771e1162b50f1dd81f9f2c18b6015798c5ddcc5fb044a12519"
}
Field | Description | Type | Requirement |
---|---|---|---|
merchantTransactionId | Kode unik transaksi Merchant yang dicatat di Merchant | String (255) | Mandatory |
astrapayTransactionId | Kode unik transaksi Merchant yang dicatat di AstraPay | String (255) | Mandatory |
amount | Jumlah atau Nominal Transaksi. Min: 10000, Max: 10000000. | String (8) | Mandatory |
status | Status Transaksi (Approved / Reject / Timeout ) | String (8) | Mandatory |
callbackTimestamp | Waktu terjadinya pengiriman callback. (Generated Automatic by AstraPay) Format: yyyy-MM-dd HH:mm:ss.SSS | String | Mandatory |
callbackSecurity | String hasil automatic generation oleh sistem astrapay dari Timestamp dan merchantTransactionId. | String (255) | Mandatory |
Lalu setelah itu Merchant akan mengirimkan response seperti ini:
Sample Response Body
{
"status": "OK",
"message": " "
}
Field | Description | Type |
---|---|---|
status | Status Callback | String |
message | Pesan tambahan oleh Merchant | String |
Setelah proses Payment Notification selesai, maka proses pembayaran oleh Merchant User dan pencatatan oleh Merchant maupun AstraPay terhadap transaksi tersebut dapat dinyatakan selesai. Adapun proses-proses lain seperti refund, adalah proses yang berbeda dan dilakukan diluar proses ini.
6. Profile
Pada section ini akan membahas API Profile. API ini berguna untuk mendapatkan informasi user dengan menggunakan signature yang telah diberikan pada section 3.
6.1 Endpoint
Complete Code
curl --location --request GET 'https://sandbox.astrapay.com/merchant-service/profile?signature=b0950d6cdb9ba3f59a2baaa7e4a9cc6296b09d0a' \
--header 'Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJlVm9kSlYzeVN6aUlyLW9aZjZCQzJtUVVaTmJFLWFaQndETjFUUmxmZE1jIn0.eyJleHAiOjE2Mzk0NDY3NzksImlhdCI6MTYzOTQ0NjQ3OSwianRpIjoiMzUxYWVlYTAtNTE2Ny00OTVkLWJhNTYtYWY5NmRhOTg2ZTFjIiwiaXNzIjoiaHR0cDovLzE3Mi4yMC4zLjEyNDo4MDgwL2F1dGgvcmVhbG1zL2FzdHJhcGF5LWJ1c2luZXNzIiwiYXVkIjoiYWNjb3VudCIsInN1YiI6IjJlNjJmNzVhLTA2Y2UtNGQ5ZC04NTRkLTdiYWYxYjk0OWJiOSIsInR5cCI6IkJlYXJlciIsImF6cCI6IjYwMDY4YzlmLTkyMGMtNGVlMy05M2Q5LWQ0NWRlMzcxZjJlMSIsImFjciI6IjEiLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsiZGVmYXVsdC1yb2xlcy1hc3RyYXBheS1idXNpbmVzcyIsIm9mZmxpbmVfYWNjZXNzIiwidW1hX2F1dGhvcml6YXRpb24iXX0sInJlc291cmNlX2FjY2VzcyI6eyJhY2NvdW50Ijp7InJvbGVzIjpbIm1hbmFnZS1hY2NvdW50IiwibWFuYWdlLWFjY291bnQtbGlua3MiLCJ2aWV3LXByb2ZpbGUiXX19LCJzY29wZSI6InByb2ZpbGUgZW1haWwiLCJlbWFpbF92ZXJpZmllZCI6ZmFsc2UsImNsaWVudEhvc3QiOiIxNzIuMjAuMy4xMjMiLCJjbGllbnRJZCI6IjYwMDY4YzlmLTkyMGMtNGVlMy05M2Q5LWQ0NWRlMzcxZjJlMSIsInByZWZlcnJlZF91c2VybmFtZSI6InNlcnZpY2UtYWNjb3VudC02MDA2OGM5Zi05MjBjLTRlZTMtOTNkOS1kNDVkZTM3MWYyZTEiLCJjbGllbnRBZGRyZXNzIjoiMTcyLjIwLjMuMTIzIn0.THD7R67KhJu93x4pBzQUSbxb4riGTROdPCFiVTGhz9v1sYmo7Ku1rDNrRw2hZcnnIxrXMPlVsHeLSrjS_gpXFUTSibqGlpqKpQ-niHxWnzHns-IbUAZF0Us0pj_7Yx3g0Q7huGwyV-ZyMXYrgZFCul4IKloUgEkYASznGGM2dCuH9kp90tGwXfQwLsgmq570mtE9LpSS0lIg92uLd8H7nDTCAhQVgG-9r5RkuxJv7GZqcajD2G4hrZgkR8FrtY5gnMu-mA4GzWGfpVwFWqRY_i9y2_nP5attQ07IsbFaARR6SKnMUAVG11mtRopDn8b4MTLpcAJ_IpVYRaQ8KcrZ_Q' \
Endpoint untuk proses Profile yang bisa Merchant hit adalah di bawah ini:
Protocol: HTTPS
Method: GET
URL Sandbox: https://sandbox.astrapay.com/merchant-service/profile
Request Header
Sample Request Header
{
"Authorization": "Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJlVm9kSlYzeVN6aUlyLW9aZjZCQzJtUVVaTmJFLWFaQndETjFUUmxmZE1jIn0.eyJleHAiOjE2Mzk0NDY3NzksImlhdCI6MTYzOTQ0NjQ3OSwianRpIjoiMzUxYWVlYTAtNTE2Ny00OTVkLWJhNTYtYWY5NmRhOTg2ZTFjIiwiaXNzIjoiaHR0cDovLzE3Mi4yMC4zLjEyNDo4MDgwL2F1dGgvcmVhbG1zL2FzdHJhcGF5LWJ1c2luZXNzIiwiYXVkIjoiYWNjb3VudCIsInN1YiI6IjJlNjJmNzVhLTA2Y2UtNGQ5ZC04NTRkLTdiYWYxYjk0OWJiOSIsInR5cCI6IkJlYXJlciIsImF6cCI6IjYwMDY4YzlmLTkyMGMtNGVlMy05M2Q5LWQ0NWRlMzcxZjJlMSIsImFjciI6IjEiLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsiZGVmYXVsdC1yb2xlcy1hc3RyYXBheS1idXNpbmVzcyIsIm9mZmxpbmVfYWNjZXNzIiwidW1hX2F1dGhvcml6YXRpb24iXX0sInJlc291cmNlX2FjY2VzcyI6eyJhY2NvdW50Ijp7InJvbGVzIjpbIm1hbmFnZS1hY2NvdW50IiwibWFuYWdlLWFjY291bnQtbGlua3MiLCJ2aWV3LXByb2ZpbGUiXX19LCJzY29wZSI6InByb2ZpbGUgZW1haWwiLCJlbWFpbF92ZXJpZmllZCI6ZmFsc2UsImNsaWVudEhvc3QiOiIxNzIuMjAuMy4xMjMiLCJjbGllbnRJZCI6IjYwMDY4YzlmLTkyMGMtNGVlMy05M2Q5LWQ0NWRlMzcxZjJlMSIsInByZWZlcnJlZF91c2VybmFtZSI6InNlcnZpY2UtYWNjb3VudC02MDA2OGM5Zi05MjBjLTRlZTMtOTNkOS1kNDVkZTM3MWYyZTEiLCJjbGllbnRBZGRyZXNzIjoiMTcyLjIwLjMuMTIzIn0.THD7R67KhJu93x4pBzQUSbxb4riGTROdPCFiVTGhz9v1sYmo7Ku1rDNrRw2hZcnnIxrXMPlVsHeLSrjS_gpXFUTSibqGlpqKpQ-niHxWnzHns-IbUAZF0Us0pj_7Yx3g0Q7huGwyV-ZyMXYrgZFCul4IKloUgEkYASznGGM2dCuH9kp90tGwXfQwLsgmq570mtE9LpSS0lIg92uLd8H7nDTCAhQVgG-9r5RkuxJv7GZqcajD2G4hrZgkR8FrtY5gnMu-mA4GzWGfpVwFWqRY_i9y2_nP5attQ07IsbFaARR6SKnMUAVG11mtRopDn8b4MTLpcAJ_IpVYRaQ8KcrZ_Q",
}
Request Header yang harus dimasukkan sebelum melakukan hit API Profile adalah sebagai berikut:
Authorization: Bearer token (Cara generate token ada pada section 2)
Request Parameter
Request Parameter yang harus dimasukkan sebelum melakukan hit endpoint Profile adalah sebagai berikut.
Sample Request Parameter
https://sandbox.astrapay.com/merchant-service/profile?signature=b0950d6cdb9ba3f59a2baaa7e4a9cc6296b09d0a
Field | Description | Type | Requirement |
---|---|---|---|
signature | String unik yang menandakan bahwa Account AstraPay sudah terintegrasi dengan aplikasi Merchant | String (255) | Mandatory |
Response Body
Setelah melakukan request pada endpoint Profile dan telah tervalidasi, maka Merchant akan mendapatkan response sebagai berikut:
Sample Response Body
{
"balance": "5822.0"
}
Field | Description | Type | Requirement |
---|---|---|---|
balance | Saldo akun AstraPay. User Classic Max: 2000000, User Preferred Max: 10000000 | String | Mandatory |
7. Transaction Status
Pada section ini akan membahas API Transaction Status. API ini berguna untuk mendapatkan informasi transaksi merchant dengan menggunakan clientId dan merchantTransactionId yang telah dikirimkan pada section 4.
7.1 Endpoint
Complete Code
curl --location --request POST 'https://sandbox.astrapay.com/merchant-service/transaction-status' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJlVm9kSlYzeVN6aUlyLW9aZjZCQzJtUVVaTmJFLWFaQndETjFUUmxmZE1jIn0.eyJleHAiOjE2Mzk0NDY3NzksImlhdCI6MTYzOTQ0NjQ3OSwianRpIjoiMzUxYWVlYTAtNTE2Ny00OTVkLWJhNTYtYWY5NmRhOTg2ZTFjIiwiaXNzIjoiaHR0cDovLzE3Mi4yMC4zLjEyNDo4MDgwL2F1dGgvcmVhbG1zL2FzdHJhcGF5LWJ1c2luZXNzIiwiYXVkIjoiYWNjb3VudCIsInN1YiI6IjJlNjJmNzVhLTA2Y2UtNGQ5ZC04NTRkLTdiYWYxYjk0OWJiOSIsInR5cCI6IkJlYXJlciIsImF6cCI6IjYwMDY4YzlmLTkyMGMtNGVlMy05M2Q5LWQ0NWRlMzcxZjJlMSIsImFjciI6IjEiLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsiZGVmYXVsdC1yb2xlcy1hc3RyYXBheS1idXNpbmVzcyIsIm9mZmxpbmVfYWNjZXNzIiwidW1hX2F1dGhvcml6YXRpb24iXX0sInJlc291cmNlX2FjY2VzcyI6eyJhY2NvdW50Ijp7InJvbGVzIjpbIm1hbmFnZS1hY2NvdW50IiwibWFuYWdlLWFjY291bnQtbGlua3MiLCJ2aWV3LXByb2ZpbGUiXX19LCJzY29wZSI6InByb2ZpbGUgZW1haWwiLCJlbWFpbF92ZXJpZmllZCI6ZmFsc2UsImNsaWVudEhvc3QiOiIxNzIuMjAuMy4xMjMiLCJjbGllbnRJZCI6IjYwMDY4YzlmLTkyMGMtNGVlMy05M2Q5LWQ0NWRlMzcxZjJlMSIsInByZWZlcnJlZF91c2VybmFtZSI6InNlcnZpY2UtYWNjb3VudC02MDA2OGM5Zi05MjBjLTRlZTMtOTNkOS1kNDVkZTM3MWYyZTEiLCJjbGllbnRBZGRyZXNzIjoiMTcyLjIwLjMuMTIzIn0.THD7R67KhJu93x4pBzQUSbxb4riGTROdPCFiVTGhz9v1sYmo7Ku1rDNrRw2hZcnnIxrXMPlVsHeLSrjS_gpXFUTSibqGlpqKpQ-niHxWnzHns-IbUAZF0Us0pj_7Yx3g0Q7huGwyV-ZyMXYrgZFCul4IKloUgEkYASznGGM2dCuH9kp90tGwXfQwLsgmq570mtE9LpSS0lIg92uLd8H7nDTCAhQVgG-9r5RkuxJv7GZqcajD2G4hrZgkR8FrtY5gnMu-mA4GzWGfpVwFWqRY_i9y2_nP5attQ07IsbFaARR6SKnMUAVG11mtRopDn8b4MTLpcAJ_IpVYRaQ8KcrZ_Q' \
--data-raw '{
"merchantTransactionId": "TRX000001"
}'
Endpoint untuk proses Transaction Status yang bisa Merchant hit adalah di bawah ini:
Protocol: HTTPS
Method: POST
URL Sandbox: https://sandbox.astrapay.com/merchant-service/transaction-status
7.2 Request Header
Sample Request Header
{
Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJlVm9kSlYzeVN6aUlyLW9aZjZCQzJtUVVaTmJFLWFaQndETjFUUmxmZE1jIn0.eyJleHAiOjE2Mzk0NDY3NzksImlhdCI6MTYzOTQ0NjQ3OSwianRpIjoiMzUxYWVlYTAtNTE2Ny00OTVkLWJhNTYtYWY5NmRhOTg2ZTFjIiwiaXNzIjoiaHR0cDovLzE3Mi4yMC4zLjEyNDo4MDgwL2F1dGgvcmVhbG1zL2FzdHJhcGF5LWJ1c2luZXNzIiwiYXVkIjoiYWNjb3VudCIsInN1YiI6IjJlNjJmNzVhLTA2Y2UtNGQ5ZC04NTRkLTdiYWYxYjk0OWJiOSIsInR5cCI6IkJlYXJlciIsImF6cCI6IjYwMDY4YzlmLTkyMGMtNGVlMy05M2Q5LWQ0NWRlMzcxZjJlMSIsImFjciI6IjEiLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsiZGVmYXVsdC1yb2xlcy1hc3RyYXBheS1idXNpbmVzcyIsIm9mZmxpbmVfYWNjZXNzIiwidW1hX2F1dGhvcml6YXRpb24iXX0sInJlc291cmNlX2FjY2VzcyI6eyJhY2NvdW50Ijp7InJvbGVzIjpbIm1hbmFnZS1hY2NvdW50IiwibWFuYWdlLWFjY291bnQtbGlua3MiLCJ2aWV3LXByb2ZpbGUiXX19LCJzY29wZSI6InByb2ZpbGUgZW1haWwiLCJlbWFpbF92ZXJpZmllZCI6ZmFsc2UsImNsaWVudEhvc3QiOiIxNzIuMjAuMy4xMjMiLCJjbGllbnRJZCI6IjYwMDY4YzlmLTkyMGMtNGVlMy05M2Q5LWQ0NWRlMzcxZjJlMSIsInByZWZlcnJlZF91c2VybmFtZSI6InNlcnZpY2UtYWNjb3VudC02MDA2OGM5Zi05MjBjLTRlZTMtOTNkOS1kNDVkZTM3MWYyZTEiLCJjbGllbnRBZGRyZXNzIjoiMTcyLjIwLjMuMTIzIn0.THD7R67KhJu93x4pBzQUSbxb4riGTROdPCFiVTGhz9v1sYmo7Ku1rDNrRw2hZcnnIxrXMPlVsHeLSrjS_gpXFUTSibqGlpqKpQ-niHxWnzHns-IbUAZF0Us0pj_7Yx3g0Q7huGwyV-ZyMXYrgZFCul4IKloUgEkYASznGGM2dCuH9kp90tGwXfQwLsgmq570mtE9LpSS0lIg92uLd8H7nDTCAhQVgG-9r5RkuxJv7GZqcajD2G4hrZgkR8FrtY5gnMu-mA4GzWGfpVwFWqRY_i9y2_nP5attQ07IsbFaARR6SKnMUAVG11mtRopDn8b4MTLpcAJ_IpVYRaQ8KcrZ_Q,
Content-Type: application/json
}
Request Header yang harus dimasukkan sebelum melakukan hit endpoint Transaction Status adalah sebagai berikut:
Authorization: Bearer token (Cara generate token ada pada section 2)
Content-Type: appplication/json
Request Body
Request Body yang harus dimasukkan adalah sebagai berikut.
Sample Request Body
{
"merchantTransactionId": "TRX000001"
}
Field | Description | Type | Requirement |
---|---|---|---|
merchantTransactionId | Kode unik transaksi Merchant yang dicatat di Merchant | String (255) | Mandatory |
Response Body
Setelah melakukan request pada API Transaction Status dan telah tervalidasi, maka Merchant akan mendapatkan response sebagai berikut:
Sample Response Body
{
"merchantTransactionId": "TRX000001"
"astrapayTransactionId": "MP-001"
"amount": "10000"
"status": "APP"
}
Field | Description | Type |
---|---|---|
merchantTransactionId | Kode unik transaksi Merchant yang dicatat di Merchant | String (255) |
astrapayTransactionId | Kode unik transaksi Merchant yang dicatat di AstraPay | String (255) |
amount | Jumlah atau Nominal Transaksi. Min: 1, Max: 10000000 | String |
status | Status Transaksi (APP, REJ, PND, TIM) | String (3) |
APP = "Approved", Transaksi Sukses di AstraPay
REJ = "Rejected", Transaksi Gagal di AstraPay
PND = "Pending", Transaksi sedang dalam proses pembayaran.
TIM = "Timeout", Transaksi Gagal diproses di AstraPay karena Timeout
8. Refund BETA
Pada section ini akan membahas API Refund. API ini berfungsi untuk membuat request refund (pengembalian dana) saldo pengguna yang telah bertransaksi di merchant.
AstraPay dapat memberikan pengembalian dana untuk transaksi yang pengguna lakukan di merchant atas permintaan dari merchant. Saat ini, proses refund baru dapat dilakukan H+1 setelah Transaksi dilakukan (Setelah Settlement).
8.1 Endpoint
Complete Code
curl --location --request POST 'https://sandbox.astrapay.com/merchant-service/v1.0/customer-refund' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJUZk50bGRXTzhvRGhibU95STd1R0g0dV9ZMzBmeTc4b1I1T2V6S3JIdVpzIn0.eyJleHAiOjE2NTk2MDM1ODMsImlhdCI6MTY1OTU5OTk4MywianRpIjoiNzdjMTE3NzYtMzY5YS00MGYxLTllZGItMmM3MjNjNzJiMTI0IiwiaXNzIjoiaHR0cDovLzEwLjIwLjYuOTo4NDQzL2F1dGgvcmVhbG1zL2FzdHJhcGF5LWJ1c2luZXNzIiwiYXVkIjoiYWNjb3VudCIsInN1YiI6IjQ2NDg1MTRhLTY3YjMtNGRhZi04YjYzLTJiNWIxZmNjNGMwYiIsInR5cCI6IkJlYXJlciIsImF6cCI6ImMxOGVjMzVmLTU3ZDYtNGY2OS1iOTdlLWIyZWYyY2U3OGFiYiIsImFjciI6IjEiLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsiZGVmYXVsdC1yb2xlcy1hc3RyYXBheS1idXNpbmVzcyIsIm9mZmxpbmVfYWNjZXNzIiwidW1hX2F1dGhvcml6YXRpb24iXX0sInJlc291cmNlX2FjY2VzcyI6eyJhY2NvdW50Ijp7InJvbGVzIjpbIm1hbmFnZS1hY2NvdW50IiwibWFuYWdlLWFjY291bnQtbGlua3MiLCJ2aWV3LXByb2ZpbGUiXX19LCJzY29wZSI6InByb2ZpbGUgZW1haWwiLCJjbGllbnRJZCI6ImMxOGVjMzVmLTU3ZDYtNGY2OS1iOTdlLWIyZWYyY2U3OGFiYiIsImNsaWVudEhvc3QiOiIxNzIuMjAuNS4yMSIsImVtYWlsX3ZlcmlmaWVkIjpmYWxzZSwicHJlZmVycmVkX3VzZXJuYW1lIjoic2VydmljZS1hY2NvdW50LWMxOGVjMzVmLTU3ZDYtNGY2OS1iOTdlLWIyZWYyY2U3OGFiYiIsImNsaWVudEFkZHJlc3MiOiIxNzIuMjAuNS4yMSJ9.zNGxL4I5vNrOMqDflyfsN0jGGj-VDHz-37OkM4qSWKgN6gDIq_pMexcXaukdQSE2iT82GQPdB6euVHoxozrse8ck8WCepEpL5yhopyfm9llqKbT1WsrRw4nYp9kBJssGSXJDvqbp1nPffj-88K_GcLVReRLs9pMml-1ckkf72zAR1vX6VKFaP-ULMsYvubs1pGC70PYY3bWjFoe4nXQ70BOwFGbrRzKrX8_nfAgoaIJCF1eqMw2PJmIY2Pl25a8djMEDLcqKSJpUjmjH2gmSTS_til0zRUkt_E321YPASR4YkcycO067pBPBJ7nlaUdaP5Vkv_c4L6WZJKYjZrNoDQ' \
--header 'X-ASTRAPAY-KEY: eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJUZk50bGRXTzhvRGhibU95STd1R0g0dV9ZMzBmeTc4b1I1T2V6S3JIdVpzIn0.eyJleHAiOjE2NTk2MDM1ODMsImlhdCI6MTY1OTU5OTk4MywianRpIjoiNzdjMTE3NzYtMzY5YS00MGYxLTllZGItMmM3MjNjNzJiMTI0IiwiaXNzIjoiaHR0cDovLzEwLjIwLjYuOTo4NDQzL2F1dGgvcmVhbG1zL2FzdHJhcGF5LWJ1c2luZXNzIiwiYXVkIjoiYWNjb3VudCIsInN1YiI6IjQ2NDg1MTRhLTY3YjMtNGRhZi04YjYzLTJiNWIxZmNjNGMwYiIsInR5cCI6IkJlYXJlciIsImF6cCI6ImMxOGVjMzVmLTU3ZDYtNGY2OS1iOTdlLWIyZWYyY2U3OGFiYiIsImFjciI6IjEiLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsiZGVmYXVsdC1yb2xlcy1hc3RyYXBheS1idXNpbmVzcyIsIm9mZmxpbmVfYWNjZXNzIiwidW1hX2F1dGhvcml6YXRpb24iXX0sInJlc291cmNlX2FjY2VzcyI6eyJhY2NvdW50Ijp7InJvbGVzIjpbIm1hbmFnZS1hY2NvdW50IiwibWFuYWdlLWFjY291bnQtbGlua3MiLCJ2aWV3LXByb2ZpbGUiXX19LCJzY29wZSI6InByb2ZpbGUgZW1haWwiLCJjbGllbnRJZCI6ImMxOGVjMzVmLTU3ZDYtNGY2OS1iOTdlLWIyZWYyY2U3OGFiYiIsImNsaWVudEhvc3QiOiIxNzIuMjAuNS4yMSIsImVtYWlsX3ZlcmlmaWVkIjpmYWxzZSwicHJlZmVycmVkX3VzZXJuYW1lIjoic2VydmljZS1hY2NvdW50LWMxOGVjMzVmLTU3ZDYtNGY2OS1iOTdlLWIyZWYyY2U3OGFiYiIsImNsaWVudEFkZHJlc3MiOiIxNzIuMjAuNS4yMSJ9.zNGxL4I5vNrOMqDflyfsN0jGGj-VDHz-37OkM4qSWKgN6gDIq_pMexcXaukdQSE2iT82GQPdB6euVHoxozrse8ck8WCepEpL5yhopyfm9llqKbT1WsrRw4nYp9kBJssGSXJDvqbp1nPffj-88K_GcLVReRLs9pMml-1ckkf72zAR1vX6VKFaP-ULMsYvubs1pGC70PYY3bWjFoe4nXQ70BOwFGbrRzKrX8_nfAgoaIJCF1eqMw2PJmIY2Pl25a8djMEDLcqKSJpUjmjH2gmSTS_til0zRUkt_E321YPASR4YkcycO067pBPBJ7nlaUdaP5Vkv_c4L6WZJKYjZrNoDQ' \
--header 'X-SIGNATURE: 835663a9bb06955a905cc8d90262322dcac4bd25621b18b5fe6a86a4b3df287a' \
--header 'X-TIMESTAMP: 2022-04-21T11:37:51.436Z' \
--data-raw '{
"originalPartnerReferenceNo" : "TRANSACTION-TEST-08",
"partnerRefundNo": "PARTNER/NO/123/008",
"refundAmount": {
"amount": 10000,
"currency": "IDR"
},
"reason": "Komplain saldo terpotong tetapi pembayaran gagal",
"refundType": "FULL"
}'
Endpoint untuk proses Refund yang bisa Merchant hit adalah di bawah ini:
Protocol: HTTPS
Method: POST
URL Sandbox: https://sandbox.astrapay.com/merchant-service/v1.0/customer-refund
Request Header
Sample Request Header
{
Content-Type: application/json
Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJUZk50bGRXTzhvRGhibU95STd1R0g0dV9ZMzBmeTc4b1I1T2V6S3JIdVpzIn0.eyJleHAiOjE2NTEzMDgzNDMsImlhdCI6MTY1MTMwNDc0MywianRpIjoiZTc3MDE4MmQtNmMyZi00MjgyLWFlMzMtZWViNGRhY2I2ZDdiIiwiaXNzIjoiaHR0cDovLzE3Mi4yMC4zLjEyNDo4MDgwL2F1dGgvcmVhbG1zL2FzdHJhcGF5LWJ1c2luZXNzIiwiYXVkIjoiYWNjb3VudCIsInN1YiI6ImYxOTI0NjhkLWZhYzEtNDZkMy05NWQ0LTRkODFiOTBkYmEwNCIsInR5cCI6IkJlYXJlciIsImF6cCI6Ijg2MzQ0YTJiLWMwY2YtNGQzMi04ZDVkLWJmY2ViNDQ0MGYwMiIsImFjciI6IjEiLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsiZGVmYXVsdC1yb2xlcy1hc3RyYXBheS1idXNpbmVzcyIsIm9mZmxpbmVfYWNjZXNzIiwidW1hX2F1dGhvcml6YXRpb24iXX0sInJlc291cmNlX2FjY2VzcyI6eyJhY2NvdW50Ijp7InJvbGVzIjpbIm1hbmFnZS1hY2NvdW50IiwibWFuYWdlLWFjY291bnQtbGlua3MiLCJ2aWV3LXByb2ZpbGUiXX19LCJzY29wZSI6InByb2ZpbGUgZW1haWwiLCJlbWFpbF92ZXJpZmllZCI6ZmFsc2UsImNsaWVudEhvc3QiOiIxNzIuMjAuMy4xMjMiLCJjbGllbnRJZCI6Ijg2MzQ0YTJiLWMwY2YtNGQzMi04ZDVkLWJmY2ViNDQ0MGYwMiIsInByZWZlcnJlZF91c2VybmFtZSI6InNlcnZpY2UtYWNjb3VudC04NjM0NGEyYi1jMGNmLTRkMzItOGQ1ZC1iZmNlYjQ0NDBmMDIiLCJjbGllbnRBZGRyZXNzIjoiMTcyLjIwLjMuMTIzIn0.omdTLU4guhdpN30BmtUw2dvxEHIIRnceFph6csUj-Hd3SNH1fjkb5h0dvK0vyV5lLuYChBcuztr3LbIvydsE_ZNAwGd0YsyioBfuuOUROWXYodsZtqV-3KqT-o3G6c8ySSxn0-Twy0ETVwlGA1TClJDRIAXu4sQUD4xAYyRF4PYkLsOUf30I6698d_rJo8cjZtjdg5lqzTMMJB8juKDR7uikMIFJqUGSZh7wnOM3DnF1yTN9d2whOq533D9xDl3EOTQ__n50KOyrB32muxoXuN-FPcoHuOvY62blofmaECrSRl8PGEmuW8w0keM3vWNorme2NOuX8tpM3qMko4adZg
X-ASTRAPAY-KEY: eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJUZk50bGRXTzhvRGhibU95STd1R0g0dV9ZMzBmeTc4b1I1T2V6S3JIdVpzIn0.eyJleHAiOjE2NTk2MDM1ODMsImlhdCI6MTY1OTU5OTk4MywianRpIjoiNzdjMTE3NzYtMzY5YS00MGYxLTllZGItMmM3MjNjNzJiMTI0IiwiaXNzIjoiaHR0cDovLzEwLjIwLjYuOTo4NDQzL2F1dGgvcmVhbG1zL2FzdHJhcGF5LWJ1c2luZXNzIiwiYXVkIjoiYWNjb3VudCIsInN1YiI6IjQ2NDg1MTRhLTY3YjMtNGRhZi04YjYzLTJiNWIxZmNjNGMwYiIsInR5cCI6IkJlYXJlciIsImF6cCI6ImMxOGVjMzVmLTU3ZDYtNGY2OS1iOTdlLWIyZWYyY2U3OGFiYiIsImFjciI6IjEiLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsiZGVmYXVsdC1yb2xlcy1hc3RyYXBheS1idXNpbmVzcyIsIm9mZmxpbmVfYWNjZXNzIiwidW1hX2F1dGhvcml6YXRpb24iXX0sInJlc291cmNlX2FjY2VzcyI6eyJhY2NvdW50Ijp7InJvbGVzIjpbIm1hbmFnZS1hY2NvdW50IiwibWFuYWdlLWFjY291bnQtbGlua3MiLCJ2aWV3LXByb2ZpbGUiXX19LCJzY29wZSI6InByb2ZpbGUgZW1haWwiLCJjbGllbnRJZCI6ImMxOGVjMzVmLTU3ZDYtNGY2OS1iOTdlLWIyZWYyY2U3OGFiYiIsImNsaWVudEhvc3QiOiIxNzIuMjAuNS4yMSIsImVtYWlsX3ZlcmlmaWVkIjpmYWxzZSwicHJlZmVycmVkX3VzZXJuYW1lIjoic2VydmljZS1hY2NvdW50LWMxOGVjMzVmLTU3ZDYtNGY2OS1iOTdlLWIyZWYyY2U3OGFiYiIsImNsaWVudEFkZHJlc3MiOiIxNzIuMjAuNS4yMSJ9.zNGxL4I5vNrOMqDflyfsN0jGGj-VDHz-37OkM4qSWKgN6gDIq_pMexcXaukdQSE2iT82GQPdB6euVHoxozrse8ck8WCepEpL5yhopyfm9llqKbT1WsrRw4nYp9kBJssGSXJDvqbp1nPffj-88K_GcLVReRLs9pMml-1ckkf72zAR1vX6VKFaP-ULMsYvubs1pGC70PYY3bWjFoe4nXQ70BOwFGbrRzKrX8_nfAgoaIJCF1eqMw2PJmIY2Pl25a8djMEDLcqKSJpUjmjH2gmSTS_til0zRUkt_E321YPASR4YkcycO067pBPBJ7nlaUdaP5Vkv_c4L6WZJKYjZrNoDQ
X-SIGNATURE: 835663a9bb06955a905cc8d90262322dcac4bd25621b18b5fe6a86a4b3df287a
X-TIMESTAMP: 2022-04-21T11:37:51.436Z
}
Request Header yang harus dimasukkan sebelum melakukan hit endpoint Refund adalah sebagai berikut:
Field | Description | Type | Requirement |
---|---|---|---|
Content-Type | Application/json | String | Mandatory |
Authorization | Bearer token (Cara generate token ada pada section 2) | String | Mandatory |
X-ASTRAPAY-KEY | token dari Authorization | String | Mandatory |
X-SIGNATURE | Cara generate X-Signature ada pada menu Disbursement, BAB Signature | String | Mandatory |
X-TIMESTAMP | Waktu lokal client saat ini dengan format yyyy-MM-dd'T'HH:mm:ss.SSS'Z' | String | Mandatory |
Request Body
Request Body yang harus dimasukkan adalah sebagai berikut.
Sample Request Body
{
"originalPartnerReferenceNo" : "TRANSACTION-TEST-08",
"partnerRefundNo": "PARTNER/NO/123/008",
"refundAmount": {
"amount": 10000,
"currency": "IDR"
},
"reason": "Komplain saldo terpotong tetapi pembayaran gagal",
"refundType": "FULL"
}
Field | Description | Type | Requirement |
---|---|---|---|
originalPartnerReferenceNo | merchantTransactionId dari payment sebelumnya | String (255) | Mandatory |
partnerRefundNo | Kode unik transaksi dari Merchant yang akan dicatat ke AstraPay | String (255) | Mandatory |
refundAmount | Terdiri dari nilai total (amount) transaksi dan mata uang (currency) yang akan di kembalikan | Object | Mandatory |
amount | Nilai total transaksi | String sesuai (ISO4217) | Mandatory |
currency | Mata uang (IDR) | String (3) | Mandatory |
reason | Alasan pengembalian dilakukan | String (255) | Mandatory |
refundType | tipe refund diisi FULL atau PARTIAL(Coming Soon) | String (255) | Mandatory |
Response Header
Response Header yang akan diterima adalah sebagai berikut
Sample Response Header
{
HTTP: 202
Content-type: application/json
}
Field | Description | Type | Requirement |
---|---|---|---|
HTTP | Kode HTTP bisa 202 atau 400 | String | Mandatory |
Content-type | application/json | String | Mandatory |
Response Body
Setelah melakukan request pada API Refund dan telah tervalidasi, maka Merchant akan mendapatkan response sebagai berikut:
Sample Response Body
{
"responseCode":"2020300",
"responseMessage":"Request In Progress",
"originalReferenceNo":"082230872500.MP.20220421",
"originalPartnerReferenceNo": "TRANSACTION-TEST-08",
"refundNo":"0fc68e5c-233b-4cda-ac83-ffc6717cf5c5",
"partnerRefundNo":"PARTNER/NO/123/008",
"refundAmount":{
"amount":"10000",
"currency":"IDR"
},
"reason":"Komplain saldo terpotong tetapi pembayaran gagal"
}
Field | Description | Type |
---|---|---|
responseCode | kode response astrapay terdiri dari HTTP Status + Kode dari Astrapay | String (7) |
responseMessage | Deskripsi respon dari AstraPay | String (255) |
originalReferenceNo | Kode astrapayTransactionNumber dari payment | String |
refundNo | Kode unik pengajuan pengembalian yang digenerate oleh AstraPay | String |
partnerRefundNo | Kode unik transaksi dari Merchant yang akan dicatat AstraPay | String |
refundAmount | Terdiri dari nilai total transaksi (amount) dan mata uang (IDR) (currency) yang akan di kembalikan | Object |
amount | Nilai total transaksi | String sesuai (ISO4217) |
currency | Mata uang (IDR) | String |
reason | Alasan refund diajukan | String |
9. Cancel BETA
Pada section ini akan membahas API Cancel. API ini berfungsi untuk membatalkan transaksi yang sedang berlangsung. Saat ini, proses cancel dapat dilakukan sebelum transaksi yang dilakukan selesai atau ketika masih dalam status PND.
9.1 Endpoint
Complete Code
curl --location --request PATCH 'https://sandbox.astrapay.com/merchant-service/payments/TRANSACTION-TEST-08/cancel' \
--header 'Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICI1QjhXRGtYSzVBMWpyeFVrckMyWnB4NFN4XzVBRUlhMVpjM1NsOVZobUtJIn0.eyJleHAiOjE2NjI1MzU5MTUsImlhdCI6MTY2MjUzMjMxNSwianRpIjoiMWRhODU3MDctZWMxZi00NWNiLWE5OWQtN2I1N2M2YTM4OTcxIiwiaXNzIjoiaHR0cDovLzEwLjIwLjcuNjo4NDQzL2F1dGgvcmVhbG1zL2FzdHJhcGF5LWJ1c2luZXNzIiwiYXVkIjoiYWNjb3VudCIsInN1YiI6IjNkMDUyMzg3LWZiYTItNDIyMy04M2EyLWM1ZmE4N2U4N2Y1MSIsInR5cCI6IkJlYXJlciIsImF6cCI6ImY5MWZhYmZkLTMyMzEtNDU4ZS04MzIwLWFlOTliN2RjYWJkMiIsImFjciI6IjEiLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsiZGVmYXVsdC1yb2xlcy1hc3RyYXBheS1idXNpbmVzcyIsIm9mZmxpbmVfYWNjZXNzIiwidW1hX2F1dGhvcml6YXRpb24iXX0sInJlc291cmNlX2FjY2VzcyI6eyJhY2NvdW50Ijp7InJvbGVzIjpbIm1hbmFnZS1hY2NvdW50IiwibWFuYWdlLWFjY291bnQtbGlua3MiLCJ2aWV3LXByb2ZpbGUiXX19LCJzY29wZSI6InByb2ZpbGUgZW1haWwiLCJjbGllbnRJZCI6ImY5MWZhYmZkLTMyMzEtNDU4ZS04MzIwLWFlOTliN2RjYWJkMiIsImVtYWlsX3ZlcmlmaWVkIjpmYWxzZSwiY2xpZW50SG9zdCI6IjEwMy4xNTQuOTMuMTU0IiwicHJlZmVycmVkX3VzZXJuYW1lIjoic2VydmljZS1hY2NvdW50LWY5MWZhYmZkLTMyMzEtNDU4ZS04MzIwLWFlOTliN2RjYWJkMiIsImNsaWVudEFkZHJlc3MiOiIxMDMuMTU0LjkzLjE1NCJ9.DAKf1ZJkwrfdWEJObEuTClCIp5BByKRBZ6ipWYGRb_cBl_NDkFO5-dK5eZymLAvHajGfLF5DWPxjRrrdtsSPSa4v328p44WaDk8TW99gtgqN8ScZmMvnYHn-UtaezvAKJrxoJyie_kjqmty7SilSPq31x8eHJK0Lznv5DsDzEIYkNrlbj8ob7J8PYPAtN529VASubVAvvrv2-bgayMpYeMI_Vt7DOxZTzUCM4CsZDUAd51csAoYB0m2qiqXupPm8z9dOQy5iNTcuRiKPKdM5r9DZpkTspS0HQZ3Z3C9NGZTtercAEJ-dZq1_qZAhOefOav8bfspqGNFOZYVKbzCHKA' \
--data-raw ''
Endpoint untuk proses Cancel yang bisa Merchant hit adalah di bawah ini:
Protocol: HTTPS
Method: POST
URL Sandbox: https://sandbox.astrapay.com/merchant-service/payments/{merchantTransactionId}/cancel
9.2 Request Header
Sample Request Header
{
Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICI1QjhXRGtYSzVBMWpyeFVrckMyWnB4NFN4XzVBRUlhMVpjM1NsOVZobUtJIn0.eyJleHAiOjE2NjI1MzU5MTUsImlhdCI6MTY2MjUzMjMxNSwianRpIjoiMWRhODU3MDctZWMxZi00NWNiLWE5OWQtN2I1N2M2YTM4OTcxIiwiaXNzIjoiaHR0cDovLzEwLjIwLjcuNjo4NDQzL2F1dGgvcmVhbG1zL2FzdHJhcGF5LWJ1c2luZXNzIiwiYXVkIjoiYWNjb3VudCIsInN1YiI6IjNkMDUyMzg3LWZiYTItNDIyMy04M2EyLWM1ZmE4N2U4N2Y1MSIsInR5cCI6IkJlYXJlciIsImF6cCI6ImY5MWZhYmZkLTMyMzEtNDU4ZS04MzIwLWFlOTliN2RjYWJkMiIsImFjciI6IjEiLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsiZGVmYXVsdC1yb2xlcy1hc3RyYXBheS1idXNpbmVzcyIsIm9mZmxpbmVfYWNjZXNzIiwidW1hX2F1dGhvcml6YXRpb24iXX0sInJlc291cmNlX2FjY2VzcyI6eyJhY2NvdW50Ijp7InJvbGVzIjpbIm1hbmFnZS1hY2NvdW50IiwibWFuYWdlLWFjY291bnQtbGlua3MiLCJ2aWV3LXByb2ZpbGUiXX19LCJzY29wZSI6InByb2ZpbGUgZW1haWwiLCJjbGllbnRJZCI6ImY5MWZhYmZkLTMyMzEtNDU4ZS04MzIwLWFlOTliN2RjYWJkMiIsImVtYWlsX3ZlcmlmaWVkIjpmYWxzZSwiY2xpZW50SG9zdCI6IjEwMy4xNTQuOTMuMTU0IiwicHJlZmVycmVkX3VzZXJuYW1lIjoic2VydmljZS1hY2NvdW50LWY5MWZhYmZkLTMyMzEtNDU4ZS04MzIwLWFlOTliN2RjYWJkMiIsImNsaWVudEFkZHJlc3MiOiIxMDMuMTU0LjkzLjE1NCJ9.DAKf1ZJkwrfdWEJObEuTClCIp5BByKRBZ6ipWYGRb_cBl_NDkFO5-dK5eZymLAvHajGfLF5DWPxjRrrdtsSPSa4v328p44WaDk8TW99gtgqN8ScZmMvnYHn-UtaezvAKJrxoJyie_kjqmty7SilSPq31x8eHJK0Lznv5DsDzEIYkNrlbj8ob7J8PYPAtN529VASubVAvvrv2-bgayMpYeMI_Vt7DOxZTzUCM4CsZDUAd51csAoYB0m2qiqXupPm8z9dOQy5iNTcuRiKPKdM5r9DZpkTspS0HQZ3Z3C9NGZTtercAEJ-dZq1_qZAhOefOav8bfspqGNFOZYVKbzCHKA,
Content-Type: application/json
}
Request Header yang harus dimasukkan sebelum melakukan hit endpoint Cancel adalah sebagai berikut:
Authorization: Bearer token (Cara generate token ada pada section 2)
Content-Type: application/json
Response Body
Setelah melakukan request pada API Cancel dan telah tervalidasi, maka Merchant akan mendapatkan response sebagai berikut:
Sample Response Body
{
"merchantTransactionId": "Paket Hemat 001",
"message": "Transaction canceled"
}
Field | Description | Type |
---|---|---|
merchantTransactionId | Kode unik transaksi Merchant yang dicatat di Merchant | String |
message | Detail pesan response yang diberikan | String |
10. Response List
Astrapay menggunakan konvensional HTTP Response untuk menunjukkan keberhasilan atau kegagalan dalam permintaan API. Berikut ini adalah beberapa error paling umum dalam endpoint kami:
Status Code | Description |
---|---|
200 | Permintaan API berhasil dan bekerja sebagaimana mestinya |
400 | Permintaan tidak diterima karena ada kesalahan pada parameter |
401 | Akses tidak terotorisasi, contoh: API key tidak valid |
403 | Akses terlarang, contoh: API tidak memiliki akses |
500 | Error tidak diketahui atau ada masalah pada Astrapay End. Hubungi kami jika terjadi. |
10.1 Payment
Status Code | Message | Description |
---|---|---|
400 | Your Balance Is Not Enough | Saldo AstraPay tidak cukup untuk melakukan transaksi |
Currency must using IDR | Mata uang harus menggunakan IDR/Rupiah | |
Character only allow alphanumeric, dot, dash, tilda, underscore, slash or backslash | Karakter yang boleh digunakan hanya alfanumerik, titik, tilda, garis bawah, dan garis miring | |
Must be greater than or equal to 1 | Harga harus lebih dari atau sama dengan Rp1 | |
Size limit merchantTransactionId is 255 Characters | Karakter pada merchantTransactionID tidak boleh lebih dari 255 karakter | |
Signature not found | Signature pengguna AstraPay tidak ditemukan | |
Transaction ID already exist | ID Transaksi sudah digunakan |
10.2 Profile
Status Code | Message | Description |
---|---|---|
400 | Signature does not belong to this merchant | Signature pengguna ditemukan, tapi tidak terdaftar pada merchant |
Signature not found | Signature pengguna AstraPay tidak ditemukan |
10.3 Transaction Status
Status Code | Message | Description |
---|---|---|
400 | Merchant transaction ID not found | Merchant transaction ID tidak ditemukan |
Size limit merchantTransactionId is 255 Characters | Karakter pada merchantTransactionID tidak boleh lebih dari 255 karakter |
10.4 Refund
Status Code | Message | Description |
---|---|---|
202 | Request In Progress | Permintaan sedang di proses |
400 | Invalid Amount | Nominal Salah |
Your refund request not refundable | request refund tidak bisa dilakukan | |
Your refund number already exist | nomor refund sudah ada | |
Your refund request not allowed | request refund tidak diizinkan | |
Transactions more than a month cannot be refunded | transaksi lebih dari sebulan tidak bisa di refund |
10.4 Cancel
Status Code | Message | Description |
---|---|---|
200 | Transaction canceled | Transaksi berhasil dibatalkan |
400 | Merchant Transaction ID is Not Eligible | Merchant Transaction ID Tersebut sudah tidak bisa di cancel |
11. User Acceptance Testing
Jika proses development telah selesai, setiap merchant diwajibkan untuk mengikuti pelaksanaan User Acceptance Testing (UAT).
Untuk pelaksanaan UAT tersebut dilaksanakan oleh pihak Merchant. Untuk skenario testing yang akan dilakukan bisa langsung request form uat ke AstraPay.
Payment Channel SNAP BI V1.0
SNAP Introduction
Saat ini, AstraPay menyediakan metode baru untuk calon merchant yang ingin melakukan integrasi dengan AstraPay, melalui SNAP AstraPay API. Dimana SNAP (Standar Nasional Open API Pembayaran) adalah standar Open API yang ditetapkan Bank Indonesia agar menciptakan industri sistem pembayaran yang lebih maju di Indonesia.
Untuk melakukan integrasi dengan AstraPay, merchant diharuskan untuk melakukan pendaftaran melalui link dibawah ini.
Sudah terdaftar dan ingin melakukan penyesuaian
Quick Start
Dibawah ini adalah hal yang perlu kamu ketahui untuk melakukan integrasi:
Berikut adalah alur integrasi yang akan dilalui Merchant:
Keterangan:
1. Alur integrasi dengan Astrapay menyesuaikan dengan kondisi Merchant, apabila Merchant belum pernah integrasi, dapat lanjut ke tahap 2A. Apabila sudah integrasi, lanjut ke tahap 2B.
2A. Apabila Merchant belum pernah melakukan integrasi, Merchant dapat mengisi formulir pendaftaran pada halaman ini.
3A. Pihak AstraPay akan memeriksa data registrasi yang sudah diisikan dan akan di follow up mengenai kelanjutan tahap integrasi.
2B. Pihak AstraPay akan menghubungi Merchant yang sudah integrasi untuk membahas mengenai timeline penggunaan SNAP AstraPay.
3B. Pihak AstraPay kemudian akan mengirimkan email untuk kelanjutan proses integrasi menggunakan API SNAP secara teknis.
4. Merchant dapat melanjutkan development untuk integrasi. Merchant yang sebelumnya sudah integrasi dapat melihat Panduan Migrasi Menggunakan API SNAP.
5. Apabila development sudah selesai, Merchant diharapkan untuk menghubungi AstraPay.
6. Selanjutnya Merchant mengunduh dan mengisi semua dokumen testing yaitu Dev Site, Fungsionalitas, dan UAT yang tersedia di bawah ini.
7. Dokumen testing yang sudah diisi dikirimkan ke pihak AstraPay untuk dilakukan review.
8. Setelah direview, pihak AstraPay akan menghubungi Merchant terkait kebutuhan environment Production & akses Dashboard Merchant.
9. Apabila Merchant sudah siap untuk live ke Production, Merchant diharapkan memberi tahu Pihak AstraPay.
10. Aplikasi Merchant dapat live ke Production.
Environment
Item | Value |
---|---|
Development | https://sandbox.astrapay.com |
Production | URL production akan dikirimkan melalui email terdaftar setelah UAT selesai dilakukan |
Tahap Integrasi Development
Dibawah ini adalah hal yang perlu disiapkan dan diketahui sebelum melakukan development untuk melakukan integrasi:
- Mengisi formulir pendaftaran URL Merchant Payment Channel lalu mengirimkannya ke pihak AstraPay. Formulir URL dapat diunduh disini.
- Menyiapkan credential yang diperlukan untuk komunikasi antar penyedia (AstraPay) dan pengguna (Merchant/Partner):
- Client ID (X-Client-Key), dibuat oleh penyedia dan diberikan kepada pengguna. Dibutuhkan untuk menandakan Merchant yang mengirim request.
- Client Secret, dibuat oleh penyedia dan diberikan kepada pengguna. Dibutuhkan untuk menandakan Merchant yang mengirim request. Cara mendapatkan Client ID dan Client Secret:
- Melakukan registrasi dengan mengisi formulir pendaftaran.
- Merchant mendapatkan credential Client ID dan Client Secret melalui email yang tertera di formulir pendaftaran.
- Public Key, dibuat oleh pengguna dan diberikan kepada penyedia.
- Private Key, dibuat oleh pengguna dan disimpan oleh pengguna sendiri. Cara Generate Public Key dan Private Key.
- API yang membutuhkan Signature Auth, Signature Service, Token B2B, dan Token B2B2C sesuai pada sequence diagram, implementasinya dapat dilihat disini.
SNAP Registration
Layanan ini digunakan untuk mendaftarkan dan menghubungkan akun customer pada platform Merchant ke akun AstraPay customer.
Use Case Diagram
Berikut adalah flow untuk proses binding:
Sequence Diagram
Berikut adalah sequence diagram untuk proses binding:
Layanan ini terdiri dari 4 API, diantaranya:
Nama API | Deskripsi |
---|---|
API Account Binding | Digunakan untuk mendapatkan authCode |
API Access Token B2B2C | Digunakan untuk mengambil token otoriasasi user sebagai identifikasi pada setiap API yang berkaitan dengan data customer |
API Account Binding Inquiry (Opsional) | Digunakan untuk mengecek status binding customer |
API Account Unbinding | Digunakan untuk memutuskan binding antara akun pengguna layanan (Merchant) dengan akun penyedia layanan (AstraPay) |
API Account Binding
API ini digunakan untuk mendapatkan authCode.
Protocol & Service Address
Item | Value |
---|---|
Protocol | HTTPS |
Service Code | 07 |
Channel ID | 01207 |
Method | POST |
URL Sandbox | /snap-service/snap/v1.0/registration-account-binding |
Content-Type | application/json |
Request Header
Name | Type | Requirement | Description |
---|---|---|---|
Content-Type | String | Mandatory | Tipe konten, data yang dikirim harus selalu application/json |
Authorization | String | Mandatory | Bearer token hasil generate dari API Access Token B2B |
X-TIMESTAMP | String | Mandatory | Waktu lokal Merchant/Partner dalam format yyyy-MM-ddTHH:mm:ssTZD |
X-SIGNATURE | String | Mandatory | Hasil dari generate Signature Service |
X-PARTNER-ID | String | Mandatory | Client ID Merchant/Partner yang didapat dari AstraPay |
X-EXTERNAL-ID | String | Mandatory | Numeric string unik yang hanya dapat digunakan satu kali dalam satu hari. Format yang digunakan adalah: 36 Random Numeric String |
X-DEVICE-ID | String | Mandatory | Identifier device yang digunakan oleh customer pada API yang sedang diakses |
CHANNEL-ID | String | Mandatory | ID dari service yang mengakses API Account Binding (01207) |
Request Body
Contoh cURL Account Binding
curl --location 'https://sandbox.astrapay.com/snap-service/snap/v1.0/registration-account-binding' \
--header 'Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJUZk50bGRXTzhvRGhibU95STd1R0g0dV9ZMzBmeTc4b1I1T2V6S3JIdVpzIn0.eyJleHAiOjE3MDY4Mzk3NTksImlhdCI6MTcwNjgwMzc1OSwianRpIjoiZmUyOTEyNzMtNTM1Ny00MmE1LWExODMtOWUxNWNiZTdjYjBmIiwiaXNzIjoiaHR0cHM6Ly9rZXljbG9hay1zaXQuYXN0cmFwYXkuY29tL2F1dGgvcmVhbG1zL2FzdHJhcGF5LWJ1c2luZXNzIiwic3ViIjoiNDY2NTk5NzEtZTgwZC00OThiLTlkNjYtM2VhMTJjNDY5Mzk5IiwidHlwIjoiQmVhcmVyIiwiYXpwIjoiYzMzYWU3MTYtMjQwMi00OTc5LWIyMmQtMThhZmEyOGQzZDRlIiwicmVhbG1fYWNjZXNzIjp7InJvbGVzIjpbImRlZmF1bHQtcm9sZXMtYXN0cmFwYXkiXX0sInNjb3BlIjoicHJvZmlsZSBlbWFpbCIsImNsaWVudEhvc3QiOiIxODIuMjUzLjU5LjEwNSIsImNsaWVudElkIjoiYzMzYWU3MTYtMjQwMi00OTc5LWIyMmQtMThhZmEyOGQzZDRlIiwiZW1haWxfdmVyaWZpZWQiOmZhbHNlLCJwcmVmZXJyZWRfdXNlcm5hbWUiOiJzZXJ2aWNlLWFjY291bnQtYzMzYWU3MTYtMjQwMi00OTc5LWIyMmQtMThhZmEyOGQzZDRlIiwiY2xpZW50QWRkcmVzcyI6IjE4Mi4yNTMuNTkuMTA1In0.UhjrPznIeUiRMxptnrTeLN_Z6svcN0RzDsAU8oj_F965hRKVWDfp_B4kp2i1gnaC4Tp8X9jC-5xSEBicSZR4I-TitsuikPvT4l_NGqXcHCxSa4noeQmjoDysMILotTqa3rIx9_dWxvIyZil_t4b7L7fhTCVB-B6boxYpUGpBaNOxl6gdC8184AwFX-X8bqBTe2t9BaWZ6QBWAaarB4MdjYArrXW8N5C1oraPh4oAz2O2JVEhdM5ls1Jj0p2SlAVlsYSr9LbFJkwlJSJirDgjcArBbyFhx9OKLJT5F_7gvZm8iOBZuiUTOz4V0Sk79W-mwL0UcTIkCp1F-_PPfM0r3w' \
--header 'Content-Type: application/json' \
--header 'X-TIMESTAMP: 2023-06-02T13:20:19+07:00' \
--header 'X-SIGNATURE: DMQt5kjGE40k+GayNs+tY1VYWoHfum6ASuiEUp51ituU0/yoA4ZhQGyMeRXjBkrbbYhRR+YB3aiIss7Y5b5p4w==' \
--header 'X-PARTNER-ID: 22fd3727-3044-4596-8552-f4e54205f540' \
--header 'X-EXTERNAL-ID: 9812839751201231223895' \
--header 'X-DEVICE-ID: 09864ADCASA' \
--header 'CHANNEL-ID: 01207' \
--data '{
"merchantId":"9653109f-2806-48cf-ad75-85664c2db33e",
"phoneNo": "081111111111",
"additionalInfo": {
"finishBindingUrl": "https://Merchant.com",
"externalUid":"Testing22"
}
}'
Field | Type | Requirement | Description |
---|---|---|---|
merchantId | String | Mandatory | Kode unik setiap merchant yang diberikan AstraPay |
phoneNo | String | Optional | Nomor HP customer, apabila field ini terisi maka user wajib login dengan nomor yang sudah disertakan |
additionalInfo | Object | Mandatory | Informasi tambahan |
additionalInfo.finishBindingUrl | String | Mandatory | URL yang digunakan sebagai callback setelah proses get authCode berhasil |
additionalInfo.externalUid | String | Mandatory | ID milik user pada aplikasi partner (Merchant user ID) |
Response Body
Contoh Response
{
"responseCode": "2000700",
"responseMessage": "Successful",
"referenceNo": "644efc4f-9bb1-45ef-a6cf-1e396cbf1075",
"redirectUrl": "https://sandbox.astrapay.com/payment-channel/account-binding/644efc4f-9bb1-45ef-a6cf-1e396cbf1075",
"additionalInfo": {
"authCode": "nlleyvaQcB2SOkVjtF7ceCuC16BiqCc6DRrjaKOnnfRdToW8Tr"
}
}
Field | Type | Requirement | Description |
---|---|---|---|
responseCode | String | Mandatory | Lihat response list |
responseMessage | String | Mandatory | Lihat response list |
referenceNo | String | Mandatory | ID transaksi pada AstraPay |
redirectUrl | String | Mandatory | URL yang digunakan untuk mengarahkan user ke webview AstraPay untuk menyelesaikan proses binding account |
additionalInfo | Object | Mandatory | Informasi Tambahan |
additionalInfo.authCode | String | Mandatory | Authorization berupa string yang diberikan untuk pengguna dan dapat digunakan untuk mendapatkan akses token B2B2C |
API Access Token B2B2C
API ini digunakan untuk mengambil token otorisasi user sebagai identifikasi
Protocol & Service Address
Item | Value |
---|---|
Protocol | HTTPS |
Service Code | 74 |
Method | POST |
URL Sandbox | /snap-service/snap/v1.0/access-token/b2b2c |
Content-Type | application/json |
Request Header
Name | Type | Requirement | Description |
---|---|---|---|
Content-Type | String | Mandatory | Tipe konten, data yang dikirim harus selalu application/json |
X-TIMESTAMP | String | Mandatory | Waktu lokal Merchant/Partner dalam format yyyy-MM-ddTHH:mm:ssTZD |
X-SIGNATURE | String | Mandatory | Signature untuk API keamanan B2B Access Token Request (Signature Auth). Verifikasi signature dapat dilakukan oleh penyedia dengan menggunakan public key yang diberikan oleh pengguna (Merchant/Partner) |
X-CLIENT-KEY | String | Mandatory | Client ID Merchant/Partner yang didapat dari AstraPay |
Request Body
Contoh cURL Access Token B2B2C
curl --location --request POST 'https://sandbox.astrapay.com/snap-service/snap/v1.0/access-token/b2b2c' \
--header 'X-TIMESTAMP: 2022-01-01T00:00:00+07:00' \
--header 'X-SIGNATURE: 07abc7c30d245c0ecce3ef6c2a9ac76cd9ffaf6d0d090773b429c2b97437dc72047f46d9890abb2d6d8af7594ea19787e79ec80e388e2f6225b449c2e4d82e7df50f37c301424aede785935703c1c70235ba4e59f589f571218ce2dce4c061e598f0f38d1ac57f3feb52cf0c31078e3ceee8d796c53983fe1d38ebd71155aaa613700dc21f5a57941b787f921af7d287e72687d5242eb3063d543d5f5923f76db008cf4f56fb9c618f7f4bc8366ae70d88705617487754563e629119013fa0549e6645b397524b3dd2fa7e7f3fe9faf0fbf77da59f566861a3c510241fd4416ab7d0eba42d998e1178da51d607e0ef866607c458837c762323be53827d86e875' \
--header 'X-CLIENT-KEY: 962489e9-de5d-4eb7-92a4-b07d44d64bf4' \
--header 'Content-Type: application/json' \
--data-raw '{
"grantType": "AUTHORIZATION_CODE",
"authCode": "3p8Uuq0dkDBPagBvbFIo1QodNzZaJJXXITpL9mFRsWASqbxWA5",
}'
Field | Type | Requirement | Description |
---|---|---|---|
grantType | String | Mandatory | Penerapan tipe token request, bisa menggunakan AUTHORIZATION_CODE atau REFRESH_TOKEN |
authCode | String | Conditional | Authorization code yang diterima setelah user memberikan persetujuan. Wajib apabila grantType = AUTHORIZATION_CODE |
refreshToken | String | Conditional | Digunakan untuk mendapatkan accessToken baru dimana user tidak perlu memberikan persetujuan lagi. Bersifat wajib ketika grantType = REFRESH_TOKEN. Harus kurang dari validitas access token dan akan diatur oleh aplikasi penyedia untuk menghasilkan accessToken baru. |
Response Header
Name | Type | Requirement | Description |
---|---|---|---|
X-TIMESTAMP | String | Mandatory | Waktu lokal Merchant/Partner dalam format yyyy-MM-ddTHH:mm:ssTZD |
X-CLIENT-KEY | String | Mandatory | Merchant/Partner Client ID |
Response Body
Contoh Response
curl --location --request POST 'https://sandbox.astrapay.com/authorization-service/snap/v1.0/access-token/b2b2c' \
--header 'X-TIMESTAMP: 2022-01-01T00:00:00+07:00' \
--header 'X-CLIENT-KEY: 962489e9-de5d-4eb7-92a4-b07d44d64bf4' \
--data-raw '{
"responseCode": "2007400",
"responseMessage": "Successful",
"accessToken":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiIyMTFlZThiMi1hN2FlLTRhZGUtYmJlYS1mNzI3MDk3ZmQ0NmEiLCJjbGllbnRJZCI6IjZhZTk1N2M0LTI4NjMtNDcxMy1hY2NlLWJhMTJkZTYzNmNmYyIsIm5iZiI6MTYxMTQ2ODk3OCwiZXhwIjoxNjExNDY5ODc4LCJpYXQiOjE2MTE0Njg5Nzh9.KM7yz9GvuUaDR1bXwei4iO0h4e3g4o1Hct5Ie9VoBdo",
"tokenType":"Bearer",
"accessTokenExpiryTime":"2020-01-01T00:00:00+07:00",
"refreshToken":"57d21fe3-ba9c-4f2d-9fde-eae669bbf80d",
"refreshTokenExpiryTime":"2020-01-01T00:00:00+07:00"
}'
Field | Type | Requirement | Description |
---|---|---|---|
responseCode | String | Mandatory | Lihat response list |
responseMessage | String | Mandatory | Lihat response list |
accessToken | String | Mandatory | Authorization berupa string yang diberikan untuk pengguna dan digunakan untuk mengakses daya yang dilindungi |
tokenType | String | Mandatory | Bearer Token |
accessTokenExpiryTime | String | Mandatory | Waktu ketika accessToken akan expired. accessToken akan expired dalam waktu 15 hari dengan format ISO8601 |
refreshToken | String | Mandatory | Random string yang digunakan pengguna untuk mendapatkan accessToken baru untuk mengakses data user. |
refreshTokenExpiryTime | String | Mandatory | Waktu untuk refreshToken akan expired. |
Response List
Response Code | Response Message | Description |
---|---|---|
4017400 | authCode Used | authCode sudah pernah dipakai |
4017400 | authCode expired | authCode sudah kedaluwarsa |
4017400 | refreshToken invalid | Refresh Token tidak sesuai |
API Account Binding Inquiry
API ini digunakan untuk mengecek status binding customer dan bersifat opsional.
Protocol & Service Address
Item | Value |
---|---|
Protocol | HTTPS |
Service Code | 08 |
Channel ID | 01108 |
Method | POST |
URL Sandbox | /snap-service/snap/v1.0/registration-account-inquiry |
Content-Type | application/json |
Request Header
Name | Type | Requirement | Description |
---|---|---|---|
Content-Type | String | Mandatory | Tipe konten, data yang dikirim harus selalu application/json |
Authorization | String | Mandatory | Bearer token hasil generate dari API Access Token B2B |
X-TIMESTAMP | String | Mandatory | Waktu lokal Merchant/Partner dalam format yyyy-MM-ddTHH:mm:ssTZD |
X-SIGNATURE | String | Mandatory | Hasil dari generate Signature Service |
X-PARTNER-ID | String | Mandatory | Client ID Merchant/Partner yang didapat dari AstraPay |
X-EXTERNAL-ID | String | Mandatory | Numeric string unik yang hanya dapat digunakan satu kali dalam satu hari. Format yang digunakan adalah: 36 Random Numeric String |
X-DEVICE-ID | String | Mandatory | Identifier device yang digunakan oleh customer pada API yang sedang diakses |
CHANNEL-ID | String | Mandatory | ID dari service yang mengakses API Account Binding Inquiry (01108) |
Request Body
Contoh cURL Account Binding Inquiry
curl --location 'https://sandbox.astrapay.com/snap-service/snap/v1.0/registration-account-inquiry' \
--header 'Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJUZk50bGRXTzhvRGhibU95STd1R0g0dV9ZMzBmeTc4b1I1T2V6S3JIdVpzIn0.eyJleHAiOjE3MDY4Mzk3NTksImlhdCI6MTcwNjgwMzc1OSwianRpIjoiZmUyOTEyNzMtNTM1Ny00MmE1LWExODMtOWUxNWNiZTdjYjBmIiwiaXNzIjoiaHR0cHM6Ly9rZXljbG9hay1zaXQuYXN0cmFwYXkuY29tL2F1dGgvcmVhbG1zL2FzdHJhcGF5LWJ1c2luZXNzIiwic3ViIjoiNDY2NTk5NzEtZTgwZC00OThiLTlkNjYtM2VhMTJjNDY5Mzk5IiwidHlwIjoiQmVhcmVyIiwiYXpwIjoiYzMzYWU3MTYtMjQwMi00OTc5LWIyMmQtMThhZmEyOGQzZDRlIiwicmVhbG1fYWNjZXNzIjp7InJvbGVzIjpbImRlZmF1bHQtcm9sZXMtYXN0cmFwYXkiXX0sInNjb3BlIjoicHJvZmlsZSBlbWFpbCIsImNsaWVudEhvc3QiOiIxODIuMjUzLjU5LjEwNSIsImNsaWVudElkIjoiYzMzYWU3MTYtMjQwMi00OTc5LWIyMmQtMThhZmEyOGQzZDRlIiwiZW1haWxfdmVyaWZpZWQiOmZhbHNlLCJwcmVmZXJyZWRfdXNlcm5hbWUiOiJzZXJ2aWNlLWFjY291bnQtYzMzYWU3MTYtMjQwMi00OTc5LWIyMmQtMThhZmEyOGQzZDRlIiwiY2xpZW50QWRkcmVzcyI6IjE4Mi4yNTMuNTkuMTA1In0.UhjrPznIeUiRMxptnrTeLN_Z6svcN0RzDsAU8oj_F965hRKVWDfp_B4kp2i1gnaC4Tp8X9jC-5xSEBicSZR4I-TitsuikPvT4l_NGqXcHCxSa4noeQmjoDysMILotTqa3rIx9_dWxvIyZil_t4b7L7fhTCVB-B6boxYpUGpBaNOxl6gdC8184AwFX-X8bqBTe2t9BaWZ6QBWAaarB4MdjYArrXW8N5C1oraPh4oAz2O2JVEhdM5ls1Jj0p2SlAVlsYSr9LbFJkwlJSJirDgjcArBbyFhx9OKLJT5F_7gvZm8iOBZuiUTOz4V0Sk79W-mwL0UcTIkCp1F-_PPfM0r3w' \
--header 'Content-Type: application/json' \
--header 'X-TIMESTAMP: 2023-06-02T13:20:19+07:00' \
--header 'X-SIGNATURE: DMQt5kjGE40k+GayNs+tY1VYWoHfum6ASuiEUp51ituU0/yoA4ZhQGyMeRXjBkrbbYhRR+YB3aiIss7Y5b5p4w==' \
--header 'X-PARTNER-ID: 22fd3727-3044-4596-8552-f4e54205f540' \
--header 'X-EXTERNAL-ID: 9812839751201231223895' \
--header 'X-DEVICE-ID: 09864ADCASA' \
--header 'CHANNEL-ID: 01108' \
--data '{
"additionalInfo": {
"refreshToken": "57d21fe3-ba9c-4f2d-9fde-eae669bbf80d"
}
}'
Field | Type | Requirement | Description |
---|---|---|---|
additionalInfo | Object | Mandatory | Informasi tambahan |
additionalInfo.refreshToken | String | Mandatory | Informasi tambahan berupa refreshToken |
Response Header
Name | Type | Requirement | Description |
---|---|---|---|
Content-Type | String | Mandatory | Tipe konten, data yang dikirim harus selalu application/json |
X-TIMESTAMP | String | Mandatory | Waktu lokal Merchant/Partner dalam format yyyy-MM-ddTHH:mm:ssTZD |
X-SIGNATURE | String | Mandatory | Hasil dari generate Signature Service |
Response Body
Contoh Response
{
"responseCode": "2000800",
"responseMessage": "Successful",
"referenceNo": "82c7ead2-ac97-49e0-a350-637712e46306",
}
Field | Type | Requirement | Description |
---|---|---|---|
responseCode | String | Mandatory | Lihat response list |
responseMessage | String | Mandatory | Lihat response list |
referenceNo | String | Mandatory | ID transaksi pada AstraPay |
API Account Unbinding
Layanan ini digunakan untuk memutuskan binding antara akun pengguna layanan dengan akun penyedia layanan. Hubungi kami apabila ingin mengimplementasikan API ini.
Protocol & Service Address
Item | Value |
---|---|
Protocol | HTTPS |
Service Code | 09 |
Channel ID | 01709 |
Method | POST |
URL Sandbox | snap-service/snap/v1.0/registration-account-unbinding |
Content-Type | application/json |
Request Header
Name | Type | Requirement | Description |
---|---|---|---|
Authorization | String | Mandatory | Bearer token hasil generate dari API Access Token B2B |
Content-Type | String | Mandatory | Tipe konten, data yang dikirim harus selalu application/json |
X-TIMESTAMP | String | Mandatory | Waktu lokal Merchant/Partner dalam format yyyy-MM-ddTHH:mm:ssTZD |
X-SIGNATURE | String | Mandatory | Signature untuk API Account Unbinding hasil dari generate Signature Service |
X-PARTNER-ID | String | Mandatory | Client ID Merchant/Partner yang didapat dari AstraPay |
X-EXTERNAL-ID | String | Mandatory | Numeric string unik yang hanya dapat digunakan satu kali dalam satu hari. Format yang digunakan adalah: 36 Random Numeric String |
X-DEVICE-ID | String | Mandatory | Identifier device yang digunakan oleh customer pada API yang sedang diakses |
CHANNEL-ID | String | Mandatory | ID dari service yang mengakses API Account Unbinding (01709) |
Request Body
Contoh cURL Account Unbinding
curl --location --request POST 'https://sandbox.astrapay.com/snap-service/snap/v1.0/registration-account-unbinding' \
--header 'Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICI1QjhXRGtYSzVBMWpyeFVrckMyWnB4NFN4XzVBRUlhMVpjM1NsOVZobUtJIn0.eyJleHAiOjE2NzI0MTA2MTQsImlhdCI6MTY3MjM3NDYxNCwianRpIjoiNTUyNWRiMTctZDIxNC00YmU4LWI1ZTQtYTAwNDUxODE1MjgzIiwiaXNzIjoiaHR0cDovLzEwLjIwLjcuNjo4NDQzL2F1dGgvcmVhbG1zL2FzdHJhcGF5LWJ1c2luZXNzIiwiYXVkIjoiYWNjb3VudCIsInN1YiI6IjMzZTRhYTQ0LTU2M2QtNGE5NC05NjE2LWQ0MDdlZTZhZjc0NyIsInR5cCI6IkJlYXJlciIsImF6cCI6ImMxOGVjMzVmLTU3ZDYtNGY2OS1iOTdlLWIyZWYyY2U3OGFiYiIsImFjciI6IjEiLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsiZGVmYXVsdC1yb2xlcy1hc3RyYXBheS1idXNpbmVzcyIsIm9mZmxpbmVfYWNjZXNzIiwidW1hX2F1dGhvcml6YXRpb24iXX0sInJlc291cmNlX2FjY2VzcyI6eyJhY2NvdW50Ijp7InJvbGVzIjpbIm1hbmFnZS1hY2NvdW50IiwibWFuYWdlLWFjY291bnQtbGlua3MiLCJ2aWV3LXByb2ZpbGUiXX19LCJzY29wZSI6InByb2ZpbGUgZW1haWwiLCJlbWFpbF92ZXJpZmllZCI6ZmFsc2UsImNsaWVudEhvc3QiOiIxNzIuMjAuMTAuNDAiLCJjbGllbnRJZCI6ImMxOGVjMzVmLTU3ZDYtNGY2OS1iOTdlLWIyZWYyY2U3OGFiYiIsInByZWZlcnJlZF91c2VybmFtZSI6InNlcnZpY2UtYWNjb3VudC1jMThlYzM1Zi01N2Q2LTRmNjktYjk3ZS1iMmVmMmNlNzhhYmIiLCJjbGllbnRBZGRyZXNzIjoiMTcyLjIwLjEwLjQwIn0.c8LFOYl72UuvqGlc69kO7TuWLL_AkV1doAaZVzSwXA-6oyu85babY49T5DIElTTHGBWQXKBKOovnOmLBK9cJscshcm-dDm9kBGn8JI0yLjfHMa_-KLXFN8eedPu5pu936NIvO8rANGXo0b1pWoSKC4NgW8WxHZvzmUpN_H0-0WdTzFvbRRpcy2b1NrSa4xMwEa3tgdM8yIGFDDtK1l7X0KjSGlZ7LGarzbjf9yul9f6xNOcJOSMPu8zOWwYtiEKQabUm0wJSW2dvXYG_3VCeKeuhgEivOeoqzAEvq5a9AYVifOPwl-Hi_ba4DaH6wGohHcBjn9e6-xTTp7dWNxJCFQ' \
--header 'Content-Type: application/json' \
--header 'X-TIMESTAMP: 2022-10-24T07:44:11+07:00' \
--header 'X-SIGNATURE: 7jkf3scp5kd8opCBnuWql+GayuKoyPD3vKsKGDyRsNbNEc/qzWgIvADGYmR8FSOU9FFmE4JJvR0JO9cYGqmlvg==' \
--header 'X-PARTNER-ID: c18ec35f-57d6-4f69-b97e-b2ef2ce78abb' \
--header 'X-EXTERNAL-ID: 008541234525416' \
--header 'X-DEVICE-ID: 09864ADCASA' \
--header 'CHANNEL-ID: 01709' \
--data-raw '{
"merchantId": "9653109f-2806-48cf-ad75-85664c2db33e",
"additionalInfo":{
"refreshToken": "57d21fe3-ba9c-4f2d-9fde-eae669bbf80d"
}
}'
Field | Type | Requirement | Description |
---|---|---|---|
merchantId | String | Mandatory | Kode unik setiap merchant yang diberikan AstraPay |
additionalInfo | Object | Mandatory | Informasi Tambahan |
additionalInfo.refreshToken | String | Mandatory | Informasi tambahan berupa refreshToken |
Response Body
Contoh Response
{
"responseCode":"2000900",
"responseMessage":"Request has been processed successfully",
"referenceNo":"2020102977770000000009",
"unlinkResult":"success"
}
Field | Type | Requirement | Description |
---|---|---|---|
responseCode | String | Mandatory | Lihat response list |
responseMessage | String | Mandatory | Lihat response list |
referenceNo | String | Mandatory | ID transaksi pada AstraPay |
unlinkResult | String | Mandatory | Hasil dari proses unbinding |
SNAP Direct Debit
Layanan ini digunakan untuk melakukan pembayaran di sisi customer dari rincian pembelian sampai mendapatkan notifikasi bahwa pembayaran sudah berhasil.
Use Case Diagram
Berikut adalah use case diagram Direct Debit
Layanan ini terdiri dari 3 API, diantaranya:
1. API Direct Debit Payment
2. API Direct Debit Payment Status
3. API Direct Debit Payment Refund
4. API Direct Debit Payment Notify
API Direct Debit Payment
API ini digunakan untuk melakukan pembayaran.
Protocol & Service Address
Item | Value |
---|---|
Protocol | HTTPS |
Service Code | 54 |
Channel ID | 00854 |
Method | POST |
URL Sandbox | /merchant-service/snap/v1.0/debit/payment-host-to-host |
Content-Type | application/json |
Request Header
Name | Type | Requirement | Description |
---|---|---|---|
Authorization | String | Mandatory | Bearer token hasil generate dari API Access Token B2B |
Authorization-Customer | String | Conditional | Akses token milik customer hasil generate dari API Access Token B2B2C. Bersifat wajib ketika menggunakan metode pembayaran payment with linking |
Content-Type | String | Mandatory | Tipe konten, data yang dikirim harus selalu application/json |
X-TIMESTAMP | String | Mandatory | Waktu lokal Merchant/Partner dalam format yyyy-MM-ddTHH:mm:ssTZD |
X-SIGNATURE | String | Mandatory | Signature untuk API Direct Debit hasil dari generate Signature Service |
X-PARTNER-ID | String | Mandatory | Client ID Merchant/Partner yang didapat dari AstraPay |
X-EXTERNAL-ID | String | Mandatory | Numeric string unik yang hanya dapat digunakan satu kali dalam satu hari. Format yang digunakan adalah: 36 Random Numeric String |
X-DEVICE-ID | String | Conditional | Identifier device yang digunakan oleh customer pada API yang sedang diakses. Bersifat wajib ketika menggunakan metode pembayaran payment with linking |
CHANNEL-ID | String | Mandatory | ID dari service yang mengakses API Direct Debit Payment (00854) |
Request Body
Contoh cURL Direct Debit Payment
curl --location --request POST 'https://sandbox.astrapay.com/merchant-service/snap/v1.0/debit/payment-host-to-host' \
--header 'Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICI1QjhXRGtYSzVBMWpyeFVrckMyWnB4NFN4XzVBRUlhMVpjM1NsOVZobUtJIn0.eyJleHAiOjE2NzI0MTA2MTQsImlhdCI6MTY3MjM3NDYxNCwianRpIjoiNTUyNWRiMTctZDIxNC00YmU4LWI1ZTQtYTAwNDUxODE1MjgzIiwiaXNzIjoiaHR0cDovLzEwLjIwLjcuNjo4NDQzL2F1dGgvcmVhbG1zL2FzdHJhcGF5LWJ1c2luZXNzIiwiYXVkIjoiYWNjb3VudCIsInN1YiI6IjMzZTRhYTQ0LTU2M2QtNGE5NC05NjE2LWQ0MDdlZTZhZjc0NyIsInR5cCI6IkJlYXJlciIsImF6cCI6ImMxOGVjMzVmLTU3ZDYtNGY2OS1iOTdlLWIyZWYyY2U3OGFiYiIsImFjciI6IjEiLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsiZGVmYXVsdC1yb2xlcy1hc3RyYXBheS1idXNpbmVzcyIsIm9mZmxpbmVfYWNjZXNzIiwidW1hX2F1dGhvcml6YXRpb24iXX0sInJlc291cmNlX2FjY2VzcyI6eyJhY2NvdW50Ijp7InJvbGVzIjpbIm1hbmFnZS1hY2NvdW50IiwibWFuYWdlLWFjY291bnQtbGlua3MiLCJ2aWV3LXByb2ZpbGUiXX19LCJzY29wZSI6InByb2ZpbGUgZW1haWwiLCJlbWFpbF92ZXJpZmllZCI6ZmFsc2UsImNsaWVudEhvc3QiOiIxNzIuMjAuMTAuNDAiLCJjbGllbnRJZCI6ImMxOGVjMzVmLTU3ZDYtNGY2OS1iOTdlLWIyZWYyY2U3OGFiYiIsInByZWZlcnJlZF91c2VybmFtZSI6InNlcnZpY2UtYWNjb3VudC1jMThlYzM1Zi01N2Q2LTRmNjktYjk3ZS1iMmVmMmNlNzhhYmIiLCJjbGllbnRBZGRyZXNzIjoiMTcyLjIwLjEwLjQwIn0.c8LFOYl72UuvqGlc69kO7TuWLL_AkV1doAaZVzSwXA-6oyu85babY49T5DIElTTHGBWQXKBKOovnOmLBK9cJscshcm-dDm9kBGn8JI0yLjfHMa_-KLXFN8eedPu5pu936NIvO8rANGXo0b1pWoSKC4NgW8WxHZvzmUpN_H0-0WdTzFvbRRpcy2b1NrSa4xMwEa3tgdM8yIGFDDtK1l7X0KjSGlZ7LGarzbjf9yul9f6xNOcJOSMPu8zOWwYtiEKQabUm0wJSW2dvXYG_3VCeKeuhgEivOeoqzAEvq5a9AYVifOPwl-Hi_ba4DaH6wGohHcBjn9e6-xTTp7dWNxJCFQ' \
--header 'Authorization-Customer: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzUxMiJ9.eyJleHRlcm5hbFVpZCI6InVzZXJJZDEyMyIsInN1YiI6IjA4MjIzNTQwMTExMyIsIm5iZiI6MTY3MjMyMDc2NiwibWVyY2hhbnRJZCI6ImMxOGVjMzVmLTU3ZDYtNGY2OS1iOTdlLWIyZWYyY2U3OGFiYiIsImlzcyI6IkFzdHJhUGF5LVNuYXAiLCJjbGFpbSI6IlNOQVAiLCJleHAiOjE2NzM2MTY3NjYsInR5cGUiOiJBQ0NFU1MiLCJpYXQiOjE2NzIzMjA3NjYsInVzZXJJZCI6MjAwMDI4LCJqdGkiOiIzZmNlMGYyZC01ZjQ2LTQxOTEtODFjYy05ZTE3MTE3MTU2MGQifQ.VDp_PXp_4xryNF74JUhlHnvcC-8agCLY2Ej5B5Sqh_t_pfZF-AqJZXQSr0dKFCDCnIzn_OsK1ydKoQmeQP4IJ3wV2Ep7QaG9VCRVR0WhgJMYB6BaiBpt4kZpryqAjPgHh7lYhSs4sTtxegxMT4IUK4Glw-yCZC_qgWEUFffh1VsT-JHNI0nIQbapVvPkOvuHBX2t_JqmGXz3BESH2-woaI3MEz-zbdPm7lJzN_A1QZAtVPgaZXdVMj9c9-3olcdoDyOj86X-EHW_O30GRKdxLm09ier31VRKj15U3E8Lgaw0IcYniqNNhLkp300fKf6_26eH0zeZrAIPwRxIHv5CSA ' \
--header 'Content-Type: application/json' \
--header 'X-TIMESTAMP: 2022-10-23T07:44:11+07:00' \
--header 'X-SIGNATURE: 7jkf3scp5kd8opCBnuWql+GayuKoyPD3vKsKGDyRsNbNEc/qzWgIvADGYmR8FSOU9FFmE4JJvR0JO9cYGqmlvg==' \
--header 'X-PARTNER-ID: c18ec35f-57d6-4f69-b97e-b2ef2ce78abb' \
--header 'X-EXTERNAL-ID: 008541234525416' \
--header 'X-DEVICE-ID: 09864ADCASA' \
--header 'CHANNEL-ID: 00854' \
--data-raw '{
"partnerReferenceNo": "TRX301222140301000",
"merchantId":"ffedcd28-70ea-4540-9172-d335f5dda51c",
"amount": {
"value": "10000.00",
"currency": "IDR"
},
"additionalInfo": {
"description": "Buy Starbucks"
}
}'
Field | Type | Requirement | Description |
---|---|---|---|
partnerReferenceNo | String | Mandatory | ID transaksi pada Merchant/Partner |
merchantId | String | Conditional | Kode unik setiap Merchant yang diberikan AstraPay. Bersifat wajib ketika Merchant terdaftar memiliki Sub-Merchant pada sistem AstraPay |
amount | String | Mandatory | - |
amount.value | String (ISO4217) | Mandatory | Jumlah bersih transaksi yang diterima termasuk 2 digit decimal. Cth: 10000.00 |
amount.currency | String | Mandatory | Mata Uang |
additionalInfo | Object | Mandatory | Informasi Tambahan |
additionalInfo.description | String | Mandatory | Deskripsi |
additionalInfo.paymentType | String | Conditional | Bersifat wajib ketika Merchant terdaftar menggunakan fitur In-APP Payment AstraPay (paymentType=IN_APP). Hubungi kami apabila ingin mengimplementasikan fitur ini |
Response Body
Contoh Response
{
"responseCode":"2005400",
"responseMessage":"Successful",
"partnerReferenceNo":"2020102900000000000001",
"referenceNo":"INV/PAC/ONP/230223/26PIVDJFNW0",
"webRedirectUrl": "https://sandbox.astrapay.com/merchant-service/payments/1c74a043-a28d-4826-a175-0bba189a83fd"
}
Field | Type | Requirement | Description |
---|---|---|---|
responseCode | String | Mandatory | Lihat response list |
responseMessage | String | Mandatory | Lihat response list |
partnerReferenceNo | String | Mandatory | ID transaksi pada Merchant/Partner |
referenceNo | String | Mandatory | ID transaksi pada AstraPay |
webRedirectUrl | String | Conditional | URL pembayaran AstraPay (Webview). Cth: https://sandbox.astrapay.com/merchant-service/payments/1c74a043-a28d-4826-a175-0bba189a83fd |
appRedirectUrl | String | Conditional | URL pembayaran AstraPay (Apps). Response ini tersedia jika merchant menambahkan 'paymentType=IN_APP' pada 'additionalInfo'. Cth: astrapay://payment-channel/payment?id={transactionId} |
API Direct Debit Payment Status
API ini digunakan untuk melakukan pengecekan status transaksi.
Protocol & Service Address
Item | Value |
---|---|
Protocol | HTTPS |
Service Code | 55 |
Channel ID | 00155 |
Method | POST |
URL Sandbox | /merchant-service/snap/v1.0/debit/status |
Content-Type | application/json |
Request Header
Name | Type | Requirement | Description |
---|---|---|---|
Authorization | String | Mandatory | Bearer token dari hasil generate dari API Access Token B2B |
Content-Type | String | Mandatory | Tipe konten, data yang dikirim harus selalu application/json |
X-TIMESTAMP | String | Mandatory | Waktu lokal Merchant/Partner dalam format yyyy-MM-ddTHH:mm:ssTZD yang valuenya sama dengan yang digunakan pada signature-auth, token B2B Access Token Request, dan signature-service |
X-SIGNATURE | String | Mandatory | Signature untuk API Direct Debit hasil dari generate Signature Service |
X-PARTNER-ID | String | Mandatory | Client ID Merchant/Partner yang didapat dari AstraPay |
X-EXTERNAL-ID | String | Mandatory | Numeric string unik yang hanya dapat digunakan satu kali dalam satu hari. Format yang digunakan adalah: 36 Random Numeric String |
CHANNEL-ID | String | Mandatory | ID dari service yang mengakses API Direct Debit Payment Status (00155) |
Request Body
Contoh cURL Direct Debit Payment Status
curl --location --request POST 'https://sandbox.astrapay.com/merchant-service/snap/v1.0/debit/status' \
--header 'Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICIzTF9udFF6MGZsNjl5UHB4T2RBTDk3NDNGOU05UWszVklTOWMwZGNwa2VFIn0' \
--header 'Content-Type: application/json' \
--header 'X-TIMESTAMP: 2020-01-01T00:00:00+07:00' \
--header 'X-SIGNATURE: v3yjqcO1MpqNINgjkGiqkSeeGypreVjDHZQKe8qxu0rr5vGzFmQQeOIviryOqQgQ/nEdeWN5eu47xedeEG3a0Q==' \
--header 'X-PARTNER-ID: c18ec35f-57d6-4f69-b97e-b2ef2ce78abb' \
--header 'X-EXTERNAL-ID: 12345678s' \
--header 'CHANNEL-ID: 00155' \
--data-raw '{
"originalPartnerReferenceNo":"TRANSACTION-TEST-05",
"originalReferenceNo":"",
"serviceCode":"54",
"amount":{
"value":"100000.00",
"currency":"IDR"
}
}'
Field | Type | Requirement | Description |
---|---|---|---|
originalPartnerReferenceNo | String | Mandatory | ID transaksi dari Merchant/Partner (Merchant/Partner Transaction ID) |
originalReferenceNo | String | Optional | ID transaksi dari AstraPay |
serviceCode | String | Mandatory | Kode service yang diakses |
amount | Object | Mandatory | - |
amount.value | String (ISO4217) | Mandatory | Jumlah net dari transaksi termasuk 2 digit decimal. Cth: 100000.00 |
amount.currency | String | Mandatory | Kode mata uang berdasarkan ISO (IDR) |
Response Body
Contoh Response
{
"responseCode":"2005500",
"responseMessage":"Request has been processed successfully",
"originalPartnerReferenceNo":"2020102900000000000001", //merchantTransactionId
"originalReferenceNo":"2020102977770000000009",
"serviceCode":"54",
"latestTransactionStatus":"00",
"refundHistory":[
{
"refundNo":"96194816941239812",
"partnerReferenceNo":"239850918204981205970",
"refundAmount":{
"value":"100000.00",
"currency":"IDR"
},
"refundStatus":"00",
"refundDate":"2020-12-23T07:44:16+07:00",
"reason":"Sayur 1 hilang"
},
{
"refundNo":"96194123981251341",
"partnerReferenceNo":"2398509123131981205970",
"refundAmount":{
"value":"100000.00",
"currency":"IDR"
},
"refundStatus":"00",
"refundDate":"2020-12-23T07:54:16+07:00",
"reason":"Sayur 2 rusak"
}
],
"transAmount":{
"value":"100000.00",
"currency":"IDR"
},
"feeAmount":{
"value":"2000.00",
"currency":"IDR"
},
"paidTime":"2020-12-21T14:56:11+07:00",
"additionalInfo":{
}
}
Field | Type | Requirement | Description |
---|---|---|---|
responseCode | String | Mandatory | Lihat response list |
responseMessage | String | Mandatory | Lihat response list |
originalPartnerReferenceNo | String | Mandatory | ID transaksi dari Merchant/Partner (Merchant/Partner Transaction ID) |
originalReferenceNo | String | Mandatory | ID transaksi dari AstraPay |
serviceCode | String | Mandatory | Kode service yang diakses |
latestTransactionStatus | String | Mandatory | 00 - Success 01 - Initiated 02 - Paying 03 - Pending 04 - Refunded 05 - Canceled 06 - Failed 07 - Not found |
refundHistory | Object | Optional | Riwayat refund, jika belum pernah refund akan kosong |
refundNo | String | Conditional | ID refund |
partnerReferenceNo | String | Mandatory | ID refund dari Merchant/Partner |
refundAmount | Object | Mandatory | - |
refundAmount.value | String(ISO4217) | Mandatory | Jumlah net dari refund termasuk 2 digit decimal. Cth: 100000.00 |
refundAmount.currency | String | Mandatory | Kode mata uang berdasarkan ISO (IDR) |
refundStatus | String | Mandatory | Status refund |
refundDate | String | Conditional | Tanggal refund |
reason | String | Optional | Alasan refund |
transAmount | Object | Mandatory | - |
transAmount.value | String(ISO4217) | Mandatory | Jumlah transaksi yang dibayarkan termasuk 2 digit decimal. Cth: 100000.00 |
transAmount.currency | String | Mandatory | Kode mata uang berdasarkan ISO (IDR) |
feeAmount | Object | Mandatory | - |
feeAmount.value | String(ISO4217) | Mandatory | Jumlah biaya layanan yang dibayarkan termasuk 2 digit decimal. Cth: 2000.00 |
feeAmount.currency | String | Mandatory | Kode mata uang berdasarkan ISO (IDR) |
paidTime | String | Conditional | Tanggal transaksi |
additionalInfo | Object | Optional | Informasi tambahan |
API Direct Debit Payment Notify
API ini digunakan untuk melakukan callback dari AstraPay ke merchant.
Protocol & Service Address
Item | Value |
---|---|
Protocol | HTTPS |
Service Code | 56 |
Channel ID | 00656 |
Method | POST |
URL Sandbox | /v1.0/debit/notify |
Content-Type | application/json |
Request Header
Name | Type | Requirement | Description |
---|---|---|---|
Authorization | String | Mandatory | Bearer token dari hasil generate dari API Access Token B2B |
Content-Type | String | Mandatory | Tipe konten, data yang dikirim harus selalu application/json |
X-TIMESTAMP | String | Mandatory | Waktu lokal Merchant/Partner dalam format yyyy-MM-ddTHH:mm:ssTZD yang valuenya sama dengan yang digunakan pada signature-auth, token B2B Access Token Request, dan signature-service |
X-SIGNATURE | String | Mandatory | Signature untuk API Direct Debit hasil dari generate Signature Service |
X-PARTNER-ID | String | Mandatory | Client ID Merchant/Partner yang didapat dari AstraPay |
X-EXTERNAL-ID | String | Mandatory | Numeric string unik yang hanya dapat digunakan satu kali dalam satu hari. Format yang digunakan adalah: 36 Random Numeric String |
CHANNEL-ID | String | Mandatory | ID dari service yang mengakses API Payment Notify (00656) |
Request Body
Contoh cURL Direct Debit Payment Notify
curl --location --request POST 'https://merchant.com/v2/snap/v1.0/debit/notify' \
--header 'Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJhcHByZXN0c2VydmljZSIsImF1ZCI6InNsYXNocm9vdCIsImlhdCI6MTY3MTEzNDUyMSwibmJmIjoxNjcxMTM0NTIxLCJleHAiOjE2NzExMzgxMjEsImRhdGEiOnsidWlkIjoiZDBmNTU0NTJjM2E2MmQ0MDNlNjNiNDRmZGFiMGY4NGU0NTZhYjc0YTIwMjIxMjE2MDMwMjAxIiwidWlwIjoiYjNmNjM0NjY5OTQwZTA4YWFlZDQ1NDZhMGZlMjFmNjJkMWJjNDcwMDIwMjIxMjE2MDMwMjAxIn19.jGoDTMu0H7-nxdmQnTOnRiJIucxjvB1yokOsuoIzWbA' \
--header 'Content-Type: application/json' \
--header 'X-TIMESTAMP: 2022-12-15T17:07:16+07:00' \
--header 'X-SIGNATURE: EwSP45pjvkOTJ59OJkjbhKQwqQuonulSZ0yiswz6q3r0U0OgWest15xOAdQ8Fu5lY6+wRJIt3a3J9i6SHO6OUw==' \
--header 'X-PARTNER-ID: dcb60ae4-4d38-11ec-81d3-0242ac130003' \
--header 'X-EXTERNAL-ID: 167284702245712690811679223447346553' \
--header 'CHANNEL-ID: 00656' \
--data-raw '{
"originalPartnerReferenceNo":"AP2210110252200023",
"originalReferenceNo":"INV/PAY/ONP/221215/NP5BYX56D26",
"merchantId":"1478c1f7-f06d-426b-95cd-034cd085910e",
"amount":{
"value":"10000.00",
"currency":"IDR"
},
"latestTransactionStatus":"00",
"finishedTime":"2022-12-15T17:07:15+07:00"
}'
Field | Type | Requirement | Description |
---|---|---|---|
originalPartnerReferenceNo | String | Mandatory | ID transaksi dari Merchant/Partner (Merchant Transaction ID) |
originalReferenceNo | String | Mandatory | AstraPay Transaction ID |
merchantId | String | Mandatory | Kode unik setiap merchant yang diberikan AstraPay |
amount | String | Mandatory | - |
amount.value | String(ISO4217) | Mandatory | Jumlah bersih transaksi yang diterima termasuk 2 digit decimal. Cth: 10000.00 |
amount.currency | String | Mandatory | Mata uang |
latestTransactionStatus | String | Mandatory | 00 - Success 01 - Initiated 02 - Paying 03 - Pending 04 - Refunded 05 - Canceled 06 - Failed 07 - Not found |
finishedTime | String | Mandatory | Waktu transaksi selesai |
Response Body
Contoh Response
{
"responseCode":"2005600",
"responseMessage":"Request has been processed successfully"
}
Field | Type | Requirement | Description |
---|---|---|---|
responseCode | String | Mandatory | Lihat response list |
responseMessage | String | Mandatory | Lihat response list |
API Direct Debit Payment Refund
API ini digunakan untuk melakukan pengembalian saldo ke user. Hubungi kami apabila ingin mengimplementasikan API ini
Protocol & Service Address
Item | Value |
---|---|
Protocol | HTTPS |
Service Code | 58 |
Channel ID | 00258 |
Method | POST |
URL Sandbox | /merchant-service/snap/v1.0/debit/refund |
Content-Type | application/json |
Request Header
Name | Type | Requirement | Description |
---|---|---|---|
Authorization | String | Mandatory | Bearer token dari hasil generate dari API Access Token B2B |
Content-Type | String | Mandatory | Tipe konten, data yang dikirim harus selalu application/json |
X-TIMESTAMP | String | Mandatory | Waktu lokal Merchant/Partner dalam format yyyy-MM-ddTHH:mm:ssTZD |
X-SIGNATURE | String | Mandatory | Signature untuk API Direct Debit Payment Refund hasil dari generate Signature Service |
X-PARTNER-ID | String | Mandatory | Client ID Merchant/Partner yang didapat dari AstraPay |
X-EXTERNAL-ID | String | Mandatory | Numeric string unik yang hanya dapat digunakan satu kali dalam satu hari. Format yang digunakan adalah: 36 Random Numeric String |
X-DEVICE-ID | String | Conditional | Identifier device yang digunakan oleh customer pada API yang sedang diakses. Bersifat wajib ketika menggunakan metode pembayaran payment with linking |
CHANNEL-ID | String | Mandatory | ID dari service yang mengakses API Direct Debit Payment Refund (00258) |
Request Body
Contoh cURL Direct Debit Payment Refund
curl --location --request POST 'https://sandbox.astrapay.com/merchant-service/snap/v1.0/debit/refund' \
--header 'Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJUZk50bGRXTzhvRGhibU95STd1R0g0dV9ZMzBmeTc4b1I1T2V6S3JIdVpzIn0.eyJleHAiOjE3MTM3OTcyNzcsImlhdCI6MTcxMzc2MTI3NywianRpIjoiNmI1NjNkMTUtZDExZC00MGYwLWI0MGMtYzE3MmQ4YzUyNWVkIiwiaXNzIjoiaHR0cHM6Ly9rZXljbG9hay1zaXQuYXN0cmFwYXkuY29tL2F1dGgvcmVhbG1zL2FzdHJhcGF5LWJ1c2luZXNzIiwic3ViIjoiNDY2NTk5NzEtZTgwZC00OThiLTlkNjYtM2VhMTJjNDY5Mzk5IiwidHlwIjoiQmVhcmVyIiwiYXpwIjoiYzMzYWU3MTYtMjQwMi00OTc5LWIyMmQtMThhZmEyOGQzZDRlIiwicmVhbG1fYWNjZXNzIjp7InJvbGVzIjpbImRlZmF1bHQtcm9sZXMtYXN0cmFwYXkiXX0sInNjb3BlIjoicHJvZmlsZSBlbWFpbCIsImNsaWVudEhvc3QiOiIzNC4xMDEuMjEwLjE5NiIsImNsaWVudElkIjoiYzMzYWU3MTYtMjQwMi00OTc5LWIyMmQtMThhZmEyOGQzZDRlIiwiZW1haWxfdmVyaWZpZWQiOmZhbHNlLCJwcmVmZXJyZWRfdXNlcm5hbWUiOiJzZXJ2aWNlLWFjY291bnQtYzMzYWU3MTYtMjQwMi00OTc5LWIyMmQtMThhZmEyOGQzZDRlIiwiY2xpZW50QWRkcmVzcyI6IjM0LjEwMS4yMTAuMTk2In0.cF8G8YEIioE8CvxVBjNRtZRJToLXj4MCPHZEamkpmopGup_KhkDueWpIE_pRbaBtMz_WtO5ouxfJg21-SBahlAaDl49J5bbBKXObEjjpi7lbUkrn4RWQPPoUJLrm95vDyOLFBr5RoYVkc_RS4rVcW64GJskmNokygjFdMo5qymkT2UCyXZl0zPMkN6aTsaaDeicBFXtxyiIblJSMJQfxiLH5bE07PMGnxMdMihM79QoeotrdnYBoHdsbv0uYkR18Iss08fmpM7XzuMDilgccmZRR3zYI6A2V2TLXwtrnvB1bYTggEw1E5HNKF9ynljDmc_ZpJoFH7FuWo1kb2DdvgQ' \
--header 'Content-Type: application/json' \
--header 'X-SIGNATURE: +ECf18Ykl7aEnZcvfyZla8XjB6iRx++UP1jTALFRUckRUYXK1ZTh+VngVoZXCja5W6kNDgE/MCKueLWGF5C6ww==' \
--header 'X-TIMESTAMP: 2024-04-10T13:20:19+07:00' \
--header 'X-PARTNER-ID: c33ae716-2402-4979-b22d-18afa28d3d4e' \
--header 'X-EXTERNAL-ID: 1290831208480120239' \
--header 'CHANNEL-ID: 00258' \
--data-raw '{
"originalPartnerReferenceNo":"TRX3012221403010037",
"partnerRefundNo":"RFNDTST123",
"refundAmount":{
"value":"20000",
"currency":"IDR"
},
"reason":"Customer complain"
}'
Field | Type | Requirement | Description |
---|---|---|---|
OriginalPartnerReferenceNo | String | Mandatory | ID transaksi dari Merchant/Partner (Merchant Transaction ID) |
partnerRefundNo | String | Mandatory | ID refund dari Merchant/Partner |
refundAmount | Object | Mandatory | - |
refundAmount.value | String(ISO4217) | Mandatory | Jumlah saldo yang dikembalikan termasuk 2 digit decimal. Cth: 10000.00 |
refundAmount.currency | String | Mandatory | Mata uang |
reason | String | Optional | Alasan pengembalian saldo |
Response Body
Contoh Response
{
"responseCode": "2005800",
"responseMessage": "Successful",
"originalPartnerReferenceNo": "TRX3012221403010037",
"originalReferenceNo": "INV/PAC/ONP/240405/107RDGLOFW0",
"refundNo": "INV/REF/ONP/240422/5056259LP1B",
"partnerRefundNo": "RFNDTST123",
"refundAmount": {
"value": "20000",
"currency": "IDR"
},
"refundTime": "2024-04-22T11:50:56.837811"
}
Field | Type | Requirement | Description |
---|---|---|---|
responseCode | String | Mandatory | Lihat response list |
responseMessage | String | Mandatory | Lihat response list |
originalPartnerReferenceNo | String | Mandatory | ID transaksi dari Merchant/Partner (Merchant Transaction ID) |
OriginalReferenceNo | String | Mandatory | ID transaksi dari AstraPay |
refundNo | String | Mandatory | ID refund dari AstraPay |
partnerRefundNo | String | Mandatory | ID refund dari Merchant/Partner |
refundAmount | Object | Mandatory | - |
refundAmount.value | String(ISO4217) | Mandatory | Jumlah saldo yang dikembalikan |
refundAmount.currency | String | Mandatory | Mata uang |
refundTime | String | Mandatory | Waktu pengembalian saldo |
SNAP Balance Inquiry
Layanan ini digunakan untuk mengecek saldo customer yang hanya terdiri dari 1 API, yaitu API Balance Inquiry.
Use Case Diagram
Berikut adalah use case diagram Balance Inquiry
Berikut ini adalah flow Balance Inquiry.
API Balance Inquiry
API ini digunakan untuk mengetahui jumlah saldo customer.
Protocol & Service Address
Item | Value |
---|---|
Protocol | HTTPS |
Service Code | 11 |
Channel ID | 00311 |
Method | POST |
URL Sandbox | /merchant-service/snap/v1.0/balance-inquiry |
Content-Type | application/json |
Request Header
Name | Type | Requirement | Description |
---|---|---|---|
Authorization | String | Mandatory | Bearer token dari hasil generate dari API Access Token B2B |
Authorization-Customer | String | Mandatory | Akses token milik customer hasil generate dari API Access Token B2B2C. Bersifat wajib ketika menggunakan metode pembayaran payment with linking |
Content-Type | String | Mandatory | Tipe konten, data yang dikirim harus selalu application/json |
X-TIMESTAMP | String | Mandatory | Waktu lokal Merchant/Partner dalam format yyyy-MM-ddTHH:mm:ssTZD |
X-SIGNATURE | String | Mandatory | Signature untuk API Direct Debit hasil dari generate Signature Service |
X-PARTNER-ID | String | Mandatory | Client ID Merchant/Partner yang didapat dari AstraPay |
X-EXTERNAL-ID | String | Mandatory | Numeric string unik yang hanya dapat digunakan satu kali dalam satu hari. Format yang digunakan adalah: 36 Random Numeric String |
X-DEVICE-ID | String | Conditional | Identifier device yang digunakan oleh customer pada API yang sedang diakses. Bersifat wajib ketika menggunakan metode pembayaran payment with linking |
CHANNEL-ID | String | Mandatory | ID dari service yang mengakses API Balance Inquiry (00311) |
Request Body
Contoh cURL Balance Inquiry
curl --location --request POST 'https://sandbox.astrapay.com/merchant-service/snap/v1.0/balance-inquiry' \
--header 'Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICI1QjhXRGtYSzVBMWpyeFVrckMyWnB4NFN4XzVBRUlhMVpjM1NsOVZobUtJIn0.eyJleHAiOjE2NzA5MzgzNjAsImlhdCI6MTY3MDkwMjM2MCwianRpIjoiYTZmMWIzNWItM2Y0NS00ZjJmLThiYzQtODQ0ZDcxOTE1NzNkIiwiaXNzIjoiaHR0cDovLzEwLjIwLjcuNjo4NDQzL2F1dGgvcmVhbG1zL2FzdHJhcGF5LWJ1c2luZXNzIiwiYXVkIjoiYWNjb3VudCIsInN1YiI6IjMzZTRhYTQ0LTU2M2QtNGE5NC05NjE2LWQ0MDdlZTZhZjc0NyIsInR5cCI6IkJlYXJlciIsImF6cCI6ImMxOGVjMzVmLTU3ZDYtNGY2OS1iOTdlLWIyZWYyY2U3OGFiYiIsImFjciI6IjEiLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsiZGVmYXVsdC1yb2xlcy1hc3RyYXBheS1idXNpbmVzcyIsIm9mZmxpbmVfYWNjZXNzIiwidW1hX2F1dGhvcml6YXRpb24iXX0sInJlc291cmNlX2FjY2VzcyI6eyJhY2NvdW50Ijp7InJvbGVzIjpbIm1hbmFnZS1hY2NvdW50IiwibWFuYWdlLWFjY291bnQtbGlua3MiLCJ2aWV3LXByb2ZpbGUiXX19LCJzY29wZSI6InByb2ZpbGUgZW1haWwiLCJlbWFpbF92ZXJpZmllZCI6ZmFsc2UsImNsaWVudEhvc3QiOiIxNzIuMjAuMTAuMzkiLCJjbGllbnRJZCI6ImMxOGVjMzVmLTU3ZDYtNGY2OS1iOTdlLWIyZWYyY2U3OGFiYiIsInByZWZlcnJlZF91c2VybmFtZSI6InNlcnZpY2UtYWNjb3VudC1jMThlYzM1Zi01N2Q2LTRmNjktYjk3ZS1iMmVmMmNlNzhhYmIiLCJjbGllbnRBZGRyZXNzIjoiMTcyLjIwLjEwLjM5In0.XF8epufqemFGyb94GKz53O4lXQ_jyF2UBuyfc4DagWDgGWBKQVosg_VrEwAVdjgeakQQHIDc7Bq3kCfBt1AGxJjASxpsdgpAhx9DmhsfK8YQnK2-WPyvjHIdAA1Ws8Amr8ccCs5iSlXd5Vz6gjnu5ETfxFOEJztu-RtURM7lwnkp8P4rHTf47lZEpC6zAGqasKdUE1AtVP3GW6arMCB0SE-2roWoP1bFMYq802fHcIqdIT0Egc55UnQbsXYfUbrDZ1YvuVJehUamn1PJe5HWZ2PyYGMqhn4efE5xElfWLyeJO2llbNPrCLBgRrgGqYwzWPCuZRKpCnJNyHne3_3oZA' \
--header 'Authorization-Customer: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzUxMiJ9.eyJleHRlcm5hbFVpZCI6InVzZXJJZDEyMyIsInN1YiI6IjA4MjIzNTQwMTExMyIsIm5iZiI6MTY3MDkwMjQ4MiwibWVyY2hhbnRJZCI6ImMxOGVjMzVmLTU3ZDYtNGY2OS1iOTdlLWIyZWYyY2U3OGFiYiIsImlzcyI6IkFzdHJhUGF5LVNuYXAiLCJjbGFpbSI6IlNOQVAiLCJleHAiOjE2NzIxOTg0ODIsInR5cGUiOiJBQ0NFU1MiLCJpYXQiOjE2NzA5MDI0ODIsInVzZXJJZCI6MjAwMDI4LCJqdGkiOiJkMDRhYWYzOS03YjEyLTQ1YzAtODYzYS1lYTIzMDhkNzJiMTUifQ.WdAwnIzcN7aobItqxdWjbb7FdodlK73_qs8HVBOZu5gCjMK5PyuP2vWL49hfuiDm85IlTOs5S9HnEdqHGPOhfdORa6pnkxX9v884N-Nq-eRoBbYSHsZTzvNGKlg_zvFBHveC6_GCxCwIzKzXMtIJoi2_ZmrgupRbW9KZTqzqUWIYYEjCMQS-dGh3s79iQ2cIiUD-PonINnXTtaq31fBPd2TT0nHoXrYzxVvN2Vzq289ivzb0A3tx2tmFdCkbzKrYstBhcQ3vragu7-TiJ2kR9Mf_o7K6jVulOpCr-tmxawblJPDnWJqzyVJtgnRB7j0W9n4pw3USohWz_Yd_t5GebQ' \
--header 'Content-Type: application/json' \
--header 'X-TIMESTAMP: 2022-10-23T07:44:11+07:00' \
--header 'X-SIGNATURE: xxxTuetiAq4Iv0gTmP+9R6jF1glQf85sS48qRrZHZHGrEEeDE+RummnSCVZiZuJTkaLOywNkcQxx' \
--header 'X-PARTNER-ID: c18ec35f-57d6-4f69-b97e-b2ef2ce78abb' \
--header 'X-EXTERNAL-ID: 003111234567890124s2s2r' \
--header 'X-DEVICE-ID: 09864ADCASA' \
--header 'CHANNEL-ID: 00311' \
--data-raw '{
"balanceTypes": ["BALANCE", "POINT"]
}'
Field | Type | Requirement | Description |
---|---|---|---|
balanceTypes | Array of String | Mandatory | Menentukan jenis saldo customer yang ingin ditampilkan (Saat ini AstraPay hanya memiliki jenis saldo "BALANCE" yang bersifat mandatory dan jenis saldo "POINT" yang bersifat optional) |
Response Body
Contoh Response
{
"responseCode":"2001100",
"responseMessage":"Successful",
"accountInfos":[
{
"balanceType":"BALANCE",
"amount":{
"value":"10000.00",
"currency":"IDR"
}
},
{
"balanceType":"POINT",
"amount":{
"value":"100.00",
"currency":"IDR"
}
}
],
"additionalInfo":[
"userStatus" : "LOCKED"
]
}
Field | Type | Requirement | Description |
---|---|---|---|
responseCode | String | Mandatory | Lihat response list |
responseMessage | String | Mandatory | Lihat response list |
accountInfos | List | Optional | Berisikan informasi mengenai saldo customer |
balanceType | String | Mandatory | Jenis saldo |
amount | Object | Optional | - |
amount.value | String (ISO4217) | Mandatory | Jumlah bersih transaksi yang diterima termasuk 2 digit decimal. Cth: 10000.00 |
amount.currency | String | Mandatory | Mata uang |
additionalInfo | Object | Optional | Informasi tambahan |
additionalInfo.userStatus | String | Mandatory | Status akun user (ACTIVE/LOCKED/INCLOSURE) |
Response List Payment Channel
Dibawah ini merupakan daftar response code yang akan muncul. Format “xx” dalam Response Code diisikan dengan Service Code dari masing-masing api.
Response Code | Response Message | Description |
---|---|---|
200xx00 | Successful | Sukses |
400xx00 | Bad Request | Pesan umum yang akan diterima ketika permintaan gagal/tidak sesuai |
400xx01 | Invalid Field Format X-TIMESTAMP | Format field X-TIMESTAMP salah |
400xx01 | Invalid Field Format X-EXTERNAL-ID | Format field X-EXTERNAL-ID salah |
400xx01 | Invalid Field Format CHANNEL-ID | Format field CHANNEL-ID salah |
400xx02 | Invalid Field Format X-TIMESTAMP | X-TIMESTAMP tidak ada atau tidak lengkap |
400xx02 | Invalid Field Format X-EXTERNAL-ID | X-EXTERNAL-ID tidak ada atau tidak lengkap |
400xx02 | Invalid Field Format X-PARTNER-ID | X-PARTNER-ID tidak ada atau tidak lengkap |
400xx02 | Invalid Field Format CHANNEL-ID | CHANNEL-ID tidak ada atau tidak lengkap |
401xx00 | Unauthorized. Signature | Invalid signature |
401xx01 | Invalid Token (B2B) | Request token invalid |
409xx00 | Conflict | Menggunakan X-EXTERNAL-ID yang sama di hari yang sama |
404xx08 | Invalid Merchant | Client ID atau Merchant ID tidak ditemukan |
500xx00 | General Error | General Error |
Response List Account Unbinding
Response Code | Response Message | Description |
---|---|---|
4010904 | Customer Token Not Found | Token tidak ditemukan pada sistem |
Response List Account Binding Inquiry
Response Code | Response Message | Description |
---|---|---|
4010804 | Customer Token Not Found | Token tidak ditemukan pada sistem |
Response List Payment
Response Code | Response Message | Description |
---|---|---|
4015401 | Invalid Token (B2B2C) | Request Token B2B2C invalid |
4035405 | Inactive Account | Akun Inactive |
4095401 | Duplicate partnerReferenceNo | Transaction ID merchant lebih dari satu |
Response List Payment Status
Response Code | Response Message | Description |
---|---|---|
4045501 | Transaction Not Found | Transaksi tidak ditemukan |
Response List Payment Refund
Response Code | Response Message | Description |
---|---|---|
2025800 | Refund still in process | Refund sedang dalam proses |
4035802 | Exceeds Transaction Amount Limit | Nominal refund yang diajukan melebihi nominal transaksi |
4035804 | Activity Count Limit Exceeded | Melebihi batas jumlah refund atas transaksi tersebut. Untuk setiap nomor transaksi hanya bisa di-refund satu kali. |
4035814 | Insufficient Funds | Partner tidak memiiki dana untuk proses refund |
4035815 | Transaction not permitted. Cashback is being processed | Cashback atas transaksi tersebut sedang dalam proses |
4035815 | Transaction not permitted. Date limit exceeded | Tanggal transaksi > 3 bulan |
4035823 | Account Limit Exceeded | Akun customer terkena limit (daily/monthly) atau limit saldo. Baca selengkapnya mengenai limit akun customer disini. |
4045800 | Invalid Transaction Status | Transaksi tidak tercatat 'success' pada sistem AstraPay |
Response List Balance Inquiry
Response Code | Response Message | Description |
---|---|---|
4011101 | Invalid Token B2B2C | Request Token B2B2C invalid |
4041111 | Invalid Account | User Account is closed |
Panduan Penyesuaian SNAP AstraPay
Merchant yang sudah pernah melakukan integrasi dengan AstraPay dan ingin melakukan penyesuaian dengan menggunapan SNAP API AstraPay, perlu mengetahui beberapa hal dibawah ini:
Penambahan API yang akan diimplementasi untuk melakukan integrasi sesuai SNAP
Nama API | Deskripsi |
---|---|
API Access Token B2B | Digunakan untuk mengambil token otoriasasi Client ID dan Client Secret . Token digunakan untuk otorisasi HTTP Header |
API Access Token B2B2C | Digunakan untuk mengambil token otoriasasi user sebagai identifikasi pada setiap API yang berkaitan dengan data customer |
API Account Unbinding | Digunakan untuk memutuskan binding antara akun pengguna layanan (Merchant) dengan akun penyedia layanan (AstraPay) |
API Account Binding Inquiry (Opsional) | Digunakan untuk mengecek status binding customer |
Daftar Perubahan API sesuai SNAP AstraPay
Fungsi | API Sebelumnya | SNAP AstraPay |
---|---|---|
Menghubungkan account customer dengan AstraPay | API Account Link and Registration | - API Account Binding - API Access Token B2B2C - API Account Binding Inquiry (Opsional) |
Menampilkan saldo AstraPay customer | API Get Profile | API Balance Inquiry |
Memproses pembayaran | API Payment with Linking API Push to Payment |
API Direct Debit Payment |
Melakukan pengembalian dana customer | API Refund | API Direct Debit Refund |
Mengetahui status transaksi yang sedang di proses | API Transaction Status | API Direct Debit Payment Status |
Mendapatkan callback proses transaksi dari AstraPay | Sebelumnya sudah terdapat di dalam API Payment with Linking dan Push to Payment | API Direct Debit Nofify |
Disbursement
Alur Disbursement
Alur Skenario Timeout Disbursement
Pada Disbursement Service memiliki Service Level Agreement (SLA) untuk response dari API Disbursement, yaitu selama 45 detik, maka merchant diharuskan untuk advice terhadap proses disbursement yang dilakukan. Berikut gambar alur untuk skenario timeout.
Untuk melakukan disbursement saldo AstraPay, sistem kami akan memvalidasi tipe dari setiap akun tujuan. Harap memperhatikan limit dari setiap tipe akun yang menjadi tujuan transaksi, pastikan tipe user yaitu Classic dan Preferred sudah sesuai dengan kriteria dibawah :
- Tipe akun
Classic
:- Memiliki maximum saldo
Rp.2.000.000
- Dan memiliki maximum transaksi bulanan sebesar
Rp.20.000.000
- Memiliki maximum saldo
- Tipe akun
Preferred
:- Memiliki maximum saldo
Rp.10.000.000
- Dan memiliki maximum transaksi bulanan sebesar
Rp.20.000.000
- Memiliki maximum saldo
Pembuatan Token Akses
Authorization merupakan sebuah string token yang akan dipakai sebagai Request Header pada proses integrasi nanti, namun untuk mendapatkan Authorization ini Merchant Disbursement perlu melakukan proses generate access_token
.
Endpoint untuk proses Generate Token memiliki URL seperti di bawah ini:
Protocol: HTTPS
Method: POST
URL Sandbox: https://sandbox.astrapay.com/api/oauth/token
Sample Request Header
Content-Type: application/x-www-form-urlencoded
Sample Request Body
grant_type: client_credentials
client_id: a9652973-4a43-434f-924f-f584f50feed6
client_secret: ck2IwGsOvZa8L15kCTjCB2bvGYsLFDv4
Request
Field | Tipe Data | Wajib | Deskripsi |
---|---|---|---|
grant_type | String | Y | Validasi jenis akses. Format: client_credentials |
client_id | String(36) | Y | String unik sebagai ID untuk menandakan Merchant yang mengirim request |
client_secret | String(32) | Y | String unik rahasia untuk menandakan Merchant yang mengirim request |
Sample Response Body
{
"access_token": "eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJlVm9kSlYzeVN6aUlyLW9aZjZCQzJtUVVaTmJFLWFaQndETjFUUmxmZE1jIn0.eyJleHAiOjE2Mzk0NDY3NzksImlhdCI6MTYzOTQ0NjQ3OSwianRpIjoiMzUxYWVlYTAtNTE2Ny00OTVkLWJhNTYtYWY5NmRhOTg2ZTFjIiwiaXNzIjoiaHR0cDovLzE3Mi4yMC4zLjEyNDo4MDgwL2F1dGgvcmVhbG1zL2FzdHJhcGF5LWJ1c2luZXNzIiwiYXVkIjoiYWNjb3VudCIsInN1YiI6IjJlNjJmNzVhLTA2Y2UtNGQ5ZC04NTRkLTdiYWYxYjk0OWJiOSIsInR5cCI6IkJlYXJlciIsImF6cCI6IjYwMDY4YzlmLTkyMGMtNGVlMy05M2Q5LWQ0NWRlMzcxZjJlMSIsImFjciI6IjEiLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsiZGVmYXVsdC1yb2xlcy1hc3RyYXBheS1idXNpbmVzcyIsIm9mZmxpbmVfYWNjZXNzIiwidW1hX2F1dGhvcml6YXRpb24iXX0sInJlc291cmNlX2FjY2VzcyI6eyJhY2NvdW50Ijp7InJvbGVzIjpbIm1hbmFnZS1hY2NvdW50IiwibWFuYWdlLWFjY291bnQtbGlua3MiLCJ2aWV3LXByb2ZpbGUiXX19LCJzY29wZSI6InByb2ZpbGUgZW1haWwiLCJlbWFpbF92ZXJpZmllZCI6ZmFsc2UsImNsaWVudEhvc3QiOiIxNzIuMjAuMy4xMjMiLCJjbGllbnRJZCI6IjYwMDY4YzlmLTkyMGMtNGVlMy05M2Q5LWQ0NWRlMzcxZjJlMSIsInByZWZlcnJlZF91c2VybmFtZSI6InNlcnZpY2UtYWNjb3VudC02MDA2OGM5Zi05MjBjLTRlZTMtOTNkOS1kNDVkZTM3MWYyZTEiLCJjbGllbnRBZGRyZXNzIjoiMTcyLjIwLjMuMTIzIn0.THD7R67KhJu93x4pBzQUSbxb4riGTROdPCFiVTGhz9v1sYmo7Ku1rDNrRw2hZcnnIxrXMPlVsHeLSrjS_gpXFUTSibqGlpqKpQ-niHxWnzHns-IbUAZF0Us0pj_7Yx3g0Q7huGwyV-ZyMXYrgZFCul4IKloUgEkYASznGGM2dCuH9kp90tGwXfQwLsgmq570mtE9LpSS0lIg92uLd8H7nDTCAhQVgG-9r5RkuxJv7GZqcajD2G4hrZgkR8FrtY5gnMu-mA4GzWGfpVwFWqRY_i9y2_nP5attQ07IsbFaARR6SKnMUAVG11mtRopDn8b4MTLpcAJ_IpVYRaQ8KcrZ_Q",
"expires_in": 3600,
"refresh_expires_in": 0,
"token_type": "Bearer",
"not-before-policy": 0,
"scope": "profile email"
}
Kode Error
Status Code | Message | Deskripsi |
---|---|---|
200 OK |
Client berhasil teridentifikasi dan akses token diberikan. | |
400 Bad Request |
Invalid client credentials | Otentikasi klien gagal client_id atau client_secret tidak dikenal. |
Unsupported grant_type | value grant_type yang tidak sesuai. |
|
Client secret not provided in request | client_secret tidak disertakan dalam request. |
|
Missing form parameter: grant_type | value grant_type tidak disertakan dalam request. |
|
500 Internal Server Error |
Respons tidak valid dari Back-end atau Kesalahan Tidak Terdefinisi |
Signature
Signature digunakan oleh AstraPay untuk memverifikasi bahwa request dari Host tidak tersusupi oleh hacker.
Generate Signature
Contoh StringToSign
HttpMethod : POST
Url : /disbursement-service/h2h/inquiries
AstraPayKey : eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJiOThDaFhUWFVJQ3J4SjhadWt5OWNCUXpBLThqQnhxa0lndmpoM0h3SVpFIn0.eyJleHAiOjE2NDg2MjE2ODksImlhdCI6MTY0ODYyMTM4OSwianRpIjoiM2RlZmY3MzAtZTllZi00MWM5LTk4MWYtZDdlOTcyYjZiNjMzIiwiaXNzIjoiaHR0cDovLzE3Mi4yMC42Ljc5OjgwODAvYXV0aC9yZWFsbXMvYXN0cmFwYXktYnVzaW5lc3MiLCJhdWQiOiJhY2NvdW50Iiwic3ViIjoiMmQzMGUzYjAtNjk0Yi00NjkyLWE4YmUtYmJhNTA5ZjBjNjQ5IiwidHlwIjoiQmVhcmVyIiwiYXpwIjoiODE5Njk2MTItYWZmMS0xMWVjLWI5MDktMDI0MmFjMTIwMDAyIiwiYWNyIjoiMSIsInJlYWxtX2FjY2VzcyI6eyJyb2xlcyI6WyJkZWZhdWx0LXJvbGVzLWFzdHJhcGF5LWJ1c2luZXNzIiwib2ZmbGluZV9hY2Nlc3MiLCJ1bWFfYXV0aG9yaXphdGlvbiJdfSwicmVzb3VyY2VfYWNjZXNzIjp7ImFjY291bnQiOnsicm9sZXMiOlsibWFuYWdlLWFjY291bnQiLCJtYW5hZ2UtYWNjb3VudC1saW5rcyIsInZpZXctcHJvZmlsZSJdfX0sInNjb3BlIjoicHJvZmlsZSBlbWFpbCIsImVtYWlsX3ZlcmlmaWVkIjpmYWxzZSwiY2xpZW50SG9zdCI6IjE3Mi4yMC42LjEwOSIsImNsaWVudElkIjoiODE5Njk2MTItYWZmMS0xMWVjLWI5MDktMDI0MmFjMTIwMDAyIiwicHJlZmVycmVkX3VzZXJuYW1lIjoic2VydmljZS1hY2NvdW50LTgxOTY5NjEyLWFmZjEtMTFlYy1iOTA5LTAyNDJhYzEyMDAwMiIsImNsaWVudEFkZHJlc3MiOiIxNzIuMjAuNi4xMDkifQ.dcVfUrHe53BXZU2abOvSxFkZy59BcEO6Zb3jLMlU9FL_XBxN09lPSgQ_MY2ejksz0oTHkyjlRz9apG6c3n5GY34hj6jjY_UFV6A97VVv53F0nLqdpTlFKQYuzIrZs4BJmUzvBGviTI9K9dNagQ6rop6LwsqzJxGT8laS5EtIDDqaP4kciADqv0xOaWZfqYE9nbz91w54qQ5vT2y64XeINoQXFzr7hvhmXY8sgbCWDgKdlxnWU_oN-76EJmT2Yfa66aEMF8vIL7NLk_6_MsVduIdvge5covOltsWnICOZUHThfDj-CLbzUL55d62h7PkMmOKlCdl9HCS8pa_CKK4Rtg
RequestBody : {"userIdentification":"085939526552","amount":15000}
Timestamp : 2021-04-21T11:37:51.436Z
StringToSign : POST:/disbursement-service/h2h inquiries:eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJiOThDaFhUWFVJQ3J4SjhadWt5OWNCUXpBLThqQnhxa0lndmpoM0h3SVpFIn0.eyJleHAiOjE2NDg2MjE2ODksImlhdCI6MTY0ODYyMTM4OSwianRpIjoiM2RlZmY3MzAtZTllZi00MWM5LTk4MWYtZDdlOTcyYjZiNjMzIiwiaXNzIjoiaHR0cDovLzE3Mi4yMC42Ljc5OjgwODAvYXV0aC9yZWFsbXMvYXN0cmFwYXktYnVzaW5lc3MiLCJhdWQiOiJhY2NvdW50Iiwic3ViIjoiMmQzMGUzYjAtNjk0Yi00NjkyLWE4YmUtYmJhNTA5ZjBjNjQ5IiwidHlwIjoiQmVhcmVyIiwiYXpwIjoiODE5Njk2MTItYWZmMS0xMWVjLWI5MDktMDI0MmFjMTIwMDAyIiwiYWNyIjoiMSIsInJlYWxtX2FjY2VzcyI6eyJyb2xlcyI6WyJkZWZhdWx0LXJvbGVzLWFzdHJhcGF5LWJ1c2luZXNzIiwib2ZmbGluZV9hY2Nlc3MiLCJ1bWFfYXV0aG9yaXphdGlvbiJdfSwicmVzb3VyY2VfYWNjZXNzIjp7ImFjY291bnQiOnsicm9sZXMiOlsibWFuYWdlLWFjY291bnQiLCJtYW5hZ2UtYWNjb3VudC1saW5rcyIsInZpZXctcHJvZmlsZSJdfX0sInNjb3BlIjoicHJvZmlsZSBlbWFpbCIsImVtYWlsX3ZlcmlmaWVkIjpmYWxzZSwiY2xpZW50SG9zdCI6IjE3Mi4yMC42LjEwOSIsImNsaWVudElkIjoiODE5Njk2MTItYWZmMS0xMWVjLWI5MDktMDI0MmFjMTIwMDAyIiwicHJlZmVycmVkX3VzZXJuYW1lIjoic2VydmljZS1hY2NvdW50LTgxOTY5NjEyLWFmZjEtMTFlYy1iOTA5LTAyNDJhYzEyMDAwMiIsImNsaWVudEFkZHJlc3MiOiIxNzIuMjAuNi4xMDkifQ.dcVfUrHe53BXZU2abOvSxFkZy59BcEO6Zb3jLMlU9FL_XBxN09lPSgQ_MY2ejksz0oTHkyjlRz9apG6c3n5GY34hj6jjY_UFV6A97VVv53F0nLqdpTlFKQYuzIrZs4BJmUzvBGviTI9K9dNagQ6rop6LwsqzJxGT8laS5EtIDDqaP4kciADqv0xOaWZfqYE9nbz91w54qQ5vT2y64XeINoQXFzr7hvhmXY8sgbCWDgKdlxnWU_oN-76EJmT2Yfa66aEMF8vIL7NLk_6_MsVduIdvge5covOltsWnICOZUHThfDj-CLbzUL55d62h7PkMmOKlCdl9HCS8pa_CKK4Rtg:77bf1abdccbeeff284c4f06b99d5cf9e22bfa56cc744aa5784da873275a1c86c:2021-04-21T11:37:51.436Z
Value | Deskripsi | Contoh |
---|---|---|
HTTPMethod | Jenis dari HTTP Method, tetap dalam value UPPERCASE | POST, GET |
Url | Keseluruhan Uniform Resource Locator yang diakses oleh Host, semua karakter setelah nama domain | /disbursement-service/h2h/inquiries |
AstraPayKey | Bearer Token yang dikirim melalui request header dengan field x-astrapay-key |
eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJiOThDaFhUWFVJQ3J4SjhadWt5OWNCUXpBLThqQnhxa0lndmpoM0h3SVpFIn0.eyJleHAiOjE2NDg2MjE2ODksImlhdCI6MTY0ODYyMTM4OSwianRpIjoiM2RlZmY3MzAtZTllZi00MWM5LTk4MWYtZDdlOTcyYjZiNjMzIiwiaXNzIjoiaHR0cDovLzE3Mi4yMC42Ljc5OjgwODAvYXV0aC9yZWFsbXMvYXN0cmFwYXktYnVzaW5lc3MiLCJhdWQiOiJhY2NvdW50Iiwic3ViIjoiMmQzMGUzYjAtNjk0Yi00NjkyLWE4YmUtYmJhNTA5ZjBjNjQ5IiwidHlwIjoiQmVhcmVyIiwiYXpwIjoiODE5Njk2MTItYWZmMS0xMWVjLWI5MDktMDI0MmFjMTIwMDAyIiwiYWNyIjoiMSIsInJlYWxtX2FjY2VzcyI6eyJyb2xlcyI6WyJkZWZhdWx0LXJvbGVzLWFzdHJhcGF5LWJ1c2luZXNzIiwib2ZmbGluZV9hY2Nlc3MiLCJ1bWFfYXV0aG9yaXphdGlvbiJdfSwicmVzb3VyY2VfYWNjZXNzIjp7ImFjY291bnQiOnsicm9sZXMiOlsibWFuYWdlLWFjY291bnQiLCJtYW5hZ2UtYWNjb3VudC1saW5rcyIsInZpZXctcHJvZmlsZSJdfX0sInNjb3BlIjoicHJvZmlsZSBlbWFpbCIsImVtYWlsX3ZlcmlmaWVkIjpmYWxzZSwiY2xpZW50SG9zdCI6IjE3Mi4yMC42LjEwOSIsImNsaWVudElkIjoiODE5Njk2MTItYWZmMS0xMWVjLWI5MDktMDI0MmFjMTIwMDAyIiwicHJlZmVycmVkX3VzZXJuYW1lIjoic2VydmljZS1hY2NvdW50LTgxOTY5NjEyLWFmZjEtMTFlYy1iOTA5LTAyNDJhYzEyMDAwMiIsImNsaWVudEFkZHJlc3MiOiIxNzIuMjAuNi4xMDkifQ.dcVfUrHe53BXZU2abOvSxFkZy59BcEO6Zb3jLMlU9FL_XBxN09lPSgQ_MY2ejksz0oTHkyjlRz9apG6c3n5GY34hj6jjY_UFV6A97VVv53F0nLqdpTlFKQYuzIrZs4BJmUzvBGviTI9K9dNagQ6rop6LwsqzJxGT8laS5EtIDDqaP4kciADqv0xOaWZfqYE9nbz91w54qQ5vT2y64XeINoQXFzr7hvhmXY8sgbCWDgKdlxnWU_oN-76EJmT2Yfa66aEMF8vIL7NLk_6_MsVduIdvge5covOltsWnICOZUHThfDj-CLbzUL55d62h7PkMmOKlCdl9HCS8pa_CKK4Rtg |
RequestBody | Isi dari Body pada request, dalam bentuk compact / minify (menghapus semua tabs, whitespace) sebelum dilakukan hash dengan algoritma SHA-256 | {"userIdentification":"08123456789","amount":15000} |
Timestamp | Timestamp dengan format ISO8601 dan dalam format waktu UTC, yyyy-MM-ddTHH:mm:ss.SSSZ . Dan dikirim melalui request header dengan field x-timestamp |
2021-04-21T11:37:51.436Z |
Contoh Request Header
curl --location --request POST 'https://sandbox.astrapay.com/disbursement-service/h2h/inquiries' \
--header 'Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJlVm9kSlYzeVN6aUlyLW9aZjZCQzJtUVVaTmJFLWFaQndETjFUUmxmZE1jIn0.eyJleHAiOjE2Mzk0NDY3NzksImlhdCI6MTYzOTQ0NjQ3OSwianRpIjoiMzUxYWVlYTAtNTE2Ny00OTVkLWJhNTYtYWY5NmRhOTg2ZTFjIiwiaXNzIjoiaHR0cDovLzE3Mi4yMC4zLjEyNDo4MDgwL2F1dGgvcmVhbG1zL2FzdHJhcGF5LWJ1c2luZXNzIiwiYXVkIjoiYWNjb3VudCIsInN1YiI6IjJlNjJmNzVhLTA2Y2UtNGQ5ZC04NTRkLTdiYWYxYjk0OWJiOSIsInR5cCI6IkJlYXJlciIsImF6cCI6IjYwMDY4YzlmLTkyMGMtNGVlMy05M2Q5LWQ0NWRlMzcxZjJlMSIsImFjciI6IjEiLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsiZGVmYXVsdC1yb2xlcy1hc3RyYXBheS1idXNpbmVzcyIsIm9mZmxpbmVfYWNjZXNzIiwidW1hX2F1dGhvcml6YXRpb24iXX0sInJlc291cmNlX2FjY2VzcyI6eyJhY2NvdW50Ijp7InJvbGVzIjpbIm1hbmFnZS1hY2NvdW50IiwibWFuYWdlLWFjY291bnQtbGlua3MiLCJ2aWV3LXByb2ZpbGUiXX19LCJzY29wZSI6InByb2ZpbGUgZW1haWwiLCJlbWFpbF92ZXJpZmllZCI6ZmFsc2UsImNsaWVudEhvc3QiOiIxNzIuMjAuMy4xMjMiLCJjbGllbnRJZCI6IjYwMDY4YzlmLTkyMGMtNGVlMy05M2Q5LWQ0NWRlMzcxZjJlMSIsInByZWZlcnJlZF91c2VybmFtZSI6InNlcnZpY2UtYWNjb3VudC02MDA2OGM5Zi05MjBjLTRlZTMtOTNkOS1kNDVkZTM3MWYyZTEiLCJjbGllbnRBZGRyZXNzIjoiMTcyLjIwLjMuMTIzIn0.THD7R67KhJu93x4pBzQUSbxb4riGTROdPCFiVTGhz9v1sYmo7Ku1rDNrRw2hZcnnIxrXMPlVsHeLSrjS_gpXFUTSibqGlpqKpQ-niHxWnzHns-IbUAZF0Us0pj_7Yx3g0Q7huGwyV-ZyMXYrgZFCul4IKloUgEkYASznGGM2dCuH9kp90tGwXfQwLsgmq570mtE9LpSS0lIg92uLd8H7nDTCAhQVgG-9r5RkuxJv7GZqcajD2G4hrZgkR8FrtY5gnMu-mA4GzWGfpVwFWqRY_i9y2_nP5attQ07IsbFaARR6SKnMUAVG11mtRopDn8b4MTLpcAJ_IpVYRaQ8KcrZ_Q' \
--header 'x-signature: fb0a2ae94f0148452459dd1f070d00194c607bb5636e149e5fc271d0a7da825b' \
--header 'x-timestamp: 2021-04-21T11:37:51.436Z' \
--header 'x-astrapay-key: eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJlVm9kSlYzeVN6aUlyLW9aZjZCQzJtUVVaTmJFLWFaQndETjFUUmxmZE1jIn0.eyJleHAiOjE2Mzk0NDY3NzksImlhdCI6MTYzOTQ0NjQ3OSwianRpIjoiMzUxYWVlYTAtNTE2Ny00OTVkLWJhNTYtYWY5NmRhOTg2ZTFjIiwiaXNzIjoiaHR0cDovLzE3Mi4yMC4zLjEyNDo4MDgwL2F1dGgvcmVhbG1zL2FzdHJhcGF5LWJ1c2luZXNzIiwiYXVkIjoiYWNjb3VudCIsInN1YiI6IjJlNjJmNzVhLTA2Y2UtNGQ5ZC04NTRkLTdiYWYxYjk0OWJiOSIsInR5cCI6IkJlYXJlciIsImF6cCI6IjYwMDY4YzlmLTkyMGMtNGVlMy05M2Q5LWQ0NWRlMzcxZjJlMSIsImFjciI6IjEiLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsiZGVmYXVsdC1yb2xlcy1hc3RyYXBheS1idXNpbmVzcyIsIm9mZmxpbmVfYWNjZXNzIiwidW1hX2F1dGhvcml6YXRpb24iXX0sInJlc291cmNlX2FjY2VzcyI6eyJhY2NvdW50Ijp7InJvbGVzIjpbIm1hbmFnZS1hY2NvdW50IiwibWFuYWdlLWFjY291bnQtbGlua3MiLCJ2aWV3LXByb2ZpbGUiXX19LCJzY29wZSI6InByb2ZpbGUgZW1haWwiLCJlbWFpbF92ZXJpZmllZCI6ZmFsc2UsImNsaWVudEhvc3QiOiIxNzIuMjAuMy4xMjMiLCJjbGllbnRJZCI6IjYwMDY4YzlmLTkyMGMtNGVlMy05M2Q5LWQ0NWRlMzcxZjJlMSIsInByZWZlcnJlZF91c2VybmFtZSI6InNlcnZpY2UtYWNjb3VudC02MDA2OGM5Zi05MjBjLTRlZTMtOTNkOS1kNDVkZTM3MWYyZTEiLCJjbGllbnRBZGRyZXNzIjoiMTcyLjIwLjMuMTIzIn0.THD7R67KhJu93x4pBzQUSbxb4riGTROdPCFiVTGhz9v1sYmo7Ku1rDNrRw2hZcnnIxrXMPlVsHeLSrjS_gpXFUTSibqGlpqKpQ-niHxWnzHns-IbUAZF0Us0pj_7Yx3g0Q7huGwyV-ZyMXYrgZFCul4IKloUgEkYASznGGM2dCuH9kp90tGwXfQwLsgmq570mtE9LpSS0lIg92uLd8H7nDTCAhQVgG-9r5RkuxJv7GZqcajD2G4hrZgkR8FrtY5gnMu-mA4GzWGfpVwFWqRY_i9y2_nP5attQ07IsbFaARR6SKnMUAVG11mtRopDn8b4MTLpcAJ_IpVYRaQ8KcrZ_Q' \
--header 'Content-Type: application/json'
Value | Deskripsi | Contoh |
---|---|---|
AstraPayValidationKey | ValidationKey yang dikirimkan kepada Host dan bersifat rahasia | String dengan panjang 44 karakter |
AstraPaySignature | Hasil generate signature dengan SHA-256 HMAC dengan komposisi dari StringToSign dan AstraPayValidationKey, dan dikirim melalui request header dengan field x-signature |
fb0a2ae94f0148452459dd1f070d00194c607bb5636e149e5fc271d0a7da825b |
Respon Error Signature Tidak Sesuai
400 - Bad Request
Invalid signature
Inquiry Disbursement
Tahap ini merupakan proses awal dari transaksi disbursement. Proses ini membutuhkan nomor handphone pengguna AstraPay dan juga jumlah saldo disbursement. Proses ini wajib dilakukan sebelum melakukan commit transaksi disbursement dan saldo AstraPay belum diterima oleh pengguna pada tahap ini.
Complete Code
curl --location --request POST 'https://sandbox.astrapay.com/disbursement-service/h2h/inquiries' \
--header 'Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJiOThDaFhUWFVJQ3J4SjhadWt5OWNCUXpBLThqQnhxa0lndmpoM0h3SVpFIn0.eyJleHAiOjE2NDg2MjE2ODksImlhdCI6MTY0ODYyMTM4OSwianRpIjoiM2RlZmY3MzAtZTllZi00MWM5LTk4MWYtZDdlOTcyYjZiNjMzIiwiaXNzIjoiaHR0cDovLzE3Mi4yMC42Ljc5OjgwODAvYXV0aC9yZWFsbXMvYXN0cmFwYXktYnVzaW5lc3MiLCJhdWQiOiJhY2NvdW50Iiwic3ViIjoiMmQzMGUzYjAtNjk0Yi00NjkyLWE4YmUtYmJhNTA5ZjBjNjQ5IiwidHlwIjoiQmVhcmVyIiwiYXpwIjoiODE5Njk2MTItYWZmMS0xMWVjLWI5MDktMDI0MmFjMTIwMDAyIiwiYWNyIjoiMSIsInJlYWxtX2FjY2VzcyI6eyJyb2xlcyI6WyJkZWZhdWx0LXJvbGVzLWFzdHJhcGF5LWJ1c2luZXNzIiwib2ZmbGluZV9hY2Nlc3MiLCJ1bWFfYXV0aG9yaXphdGlvbiJdfSwicmVzb3VyY2VfYWNjZXNzIjp7ImFjY291bnQiOnsicm9sZXMiOlsibWFuYWdlLWFjY291bnQiLCJtYW5hZ2UtYWNjb3VudC1saW5rcyIsInZpZXctcHJvZmlsZSJdfX0sInNjb3BlIjoicHJvZmlsZSBlbWFpbCIsImVtYWlsX3ZlcmlmaWVkIjpmYWxzZSwiY2xpZW50SG9zdCI6IjE3Mi4yMC42LjEwOSIsImNsaWVudElkIjoiODE5Njk2MTItYWZmMS0xMWVjLWI5MDktMDI0MmFjMTIwMDAyIiwicHJlZmVycmVkX3VzZXJuYW1lIjoic2VydmljZS1hY2NvdW50LTgxOTY5NjEyLWFmZjEtMTFlYy1iOTA5LTAyNDJhYzEyMDAwMiIsImNsaWVudEFkZHJlc3MiOiIxNzIuMjAuNi4xMDkifQ.dcVfUrHe53BXZU2abOvSxFkZy59BcEO6Zb3jLMlU9FL_XBxN09lPSgQ_MY2ejksz0oTHkyjlRz9apG6c3n5GY34hj6jjY_UFV6A97VVv53F0nLqdpTlFKQYuzIrZs4BJmUzvBGviTI9K9dNagQ6rop6LwsqzJxGT8laS5EtIDDqaP4kciADqv0xOaWZfqYE9nbz91w54qQ5vT2y64XeINoQXFzr7hvhmXY8sgbCWDgKdlxnWU_oN-76EJmT2Yfa66aEMF8vIL7NLk_6_MsVduIdvge5covOltsWnICOZUHThfDj-CLbzUL55d62h7PkMmOKlCdl9HCS8pa_CKK4Rtg' \
--header 'x-signature: fb0a2ae94f0148452459dd1f070d00194c607bb5636e149e5fc271d0a7da825b' \
--header 'x-timestamp: 2021-04-21T11:37:51.436Z' \
--header 'x-astrapay-key: eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJlVm9kSlYzeVN6aUlyLW9aZjZCQzJtUVVaTmJFLWFaQndETjFUUmxmZE1jIn0.eyJleHAiOjE2Mzk0NDY3NzksImlhdCI6MTYzOTQ0NjQ3OSwianRpIjoiMzUxYWVlYTAtNTE2Ny00OTVkLWJhNTYtYWY5NmRhOTg2ZTFjIiwiaXNzIjoiaHR0cDovLzE3Mi4yMC4zLjEyNDo4MDgwL2F1dGgvcmVhbG1zL2FzdHJhcGF5LWJ1c2luZXNzIiwiYXVkIjoiYWNjb3VudCIsInN1YiI6IjJlNjJmNzVhLTA2Y2UtNGQ5ZC04NTRkLTdiYWYxYjk0OWJiOSIsInR5cCI6IkJlYXJlciIsImF6cCI6IjYwMDY4YzlmLTkyMGMtNGVlMy05M2Q5LWQ0NWRlMzcxZjJlMSIsImFjciI6IjEiLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsiZGVmYXVsdC1yb2xlcy1hc3RyYXBheS1idXNpbmVzcyIsIm9mZmxpbmVfYWNjZXNzIiwidW1hX2F1dGhvcml6YXRpb24iXX0sInJlc291cmNlX2FjY2VzcyI6eyJhY2NvdW50Ijp7InJvbGVzIjpbIm1hbmFnZS1hY2NvdW50IiwibWFuYWdlLWFjY291bnQtbGlua3MiLCJ2aWV3LXByb2ZpbGUiXX19LCJzY29wZSI6InByb2ZpbGUgZW1haWwiLCJlbWFpbF92ZXJpZmllZCI6ZmFsc2UsImNsaWVudEhvc3QiOiIxNzIuMjAuMy4xMjMiLCJjbGllbnRJZCI6IjYwMDY4YzlmLTkyMGMtNGVlMy05M2Q5LWQ0NWRlMzcxZjJlMSIsInByZWZlcnJlZF91c2VybmFtZSI6InNlcnZpY2UtYWNjb3VudC02MDA2OGM5Zi05MjBjLTRlZTMtOTNkOS1kNDVkZTM3MWYyZTEiLCJjbGllbnRBZGRyZXNzIjoiMTcyLjIwLjMuMTIzIn0.THD7R67KhJu93x4pBzQUSbxb4riGTROdPCFiVTGhz9v1sYmo7Ku1rDNrRw2hZcnnIxrXMPlVsHeLSrjS_gpXFUTSibqGlpqKpQ-niHxWnzHns-IbUAZF0Us0pj_7Yx3g0Q7huGwyV-ZyMXYrgZFCul4IKloUgEkYASznGGM2dCuH9kp90tGwXfQwLsgmq570mtE9LpSS0lIg92uLd8H7nDTCAhQVgG-9r5RkuxJv7GZqcajD2G4hrZgkR8FrtY5gnMu-mA4GzWGfpVwFWqRY_i9y2_nP5attQ07IsbFaARR6SKnMUAVG11mtRopDn8b4MTLpcAJ_IpVYRaQ8KcrZ_Q' \
--header 'Content-Type: application/json' \
--data-raw '{
"userIdentification": "085939526552",
"amount": 15000
}'
Protocol: HTTPS
Method: POST
Sandbox URL: https://sandbox.astrapay.com/disbursement-service/h2h/inquiries
Request Header
Field | Value | Wajib | Deskripsi |
---|---|---|---|
Authorization | Bearer Token | Y | Token yang didapatkan dari API proses Pembuatan Token Akses. |
x-signature | String | Y | Hasil generate dari AstraPay signature. |
x-timestamp | String | Y | Timestamp dengan format ISO8601 dan dalam format waktu UTC, yyyy-MM-ddTHH:mm:ss.SSSZ . |
x-astrapay-key | Bearer Token | Y | Token yang didapatkan dari API proses Pembuatan Token Akses. |
{
"userIdentification": 08123456789,
"amount": 15000
}
Request Body
Field | Tipe Data | Wajib | Deskripsi |
---|---|---|---|
userIdentification | String | Y | Nomor tujuan yang merupakan pengguna AstraPay |
amount | Number | Y | Jumlah saldo yang akan ditransfer ke nomor tujuan |
Respons
Field | Tipe Data | Wajib | Deskripsi |
---|---|---|---|
inquiryCode | String | Y | 20 karakter alphanumeric yang merupakan kode inquiry dari transaksi disbursement. Yang didapatkan dari API Inquiry Disbursement. inquiryCode ini memiliki waktu selama 60 menit sebelum EXPIRED |
userIdentification | String | Y | Nomor tujuan yang merupakan pengguna AstraPay, diawali dengan 0 |
amount | Number | Y | Jumlah saldo yang akan ditransfer ke nomor tujuan |
serviceCharge | Number | Y | Jumlah biaya admin yang ada pada layanan disbursement |
total | Number | Y | Total = amount + serviceCharge |
Contoh Respon
201 - Created
{
"inquiryCode": "22021115093120333425",
"userIdentification": "085939526552",
"amount": 15000,
"serviceCharge": 0,
"total": 15000,
}
400 - Bad Request
{
"status": 400,
"message": "Validation failed for disbursementInquiryRequestDto(userIdentification,). Error count 2",
"error": "Bad Request",
"path": "/disbursement-service/h2h/inquiries",
"timestamp": "2022-03-01T15:14:20.323682200",
"details": [
{
"code": "userIdentificationIsExist",
"objectName": "disbursementInquiryRequestDto",
"defaultMessage": "User identification is not registered as AstraPay user.",
"field": "userIdentification",
"rejectedValue": "08007007077"
},
{
"code": "BalanceNotExceededLimitAfterInquiry",
"objectName": "disbursementInquiryRequestDto",
"defaultMessage": "Inquiry Amount exceeded account balance limit.",
"field": "",
"rejectedValue": {
"userIdentification": "08007007077",
"amount": 2000000
}
}
]
}
400 - Bad Request (Invalid signature)
Invalid signature
Kode Respons
Status Code | Details | Deskripsi |
---|---|---|
201 Created |
Inquiry transaksi disbursement berhasil terbuat. | |
400 Bad Request |
User identification is not registered as AstraPay user. | userIdentification tidak terdaftar sebagai pengguna AstraPay |
Phone number / email is invalid! | Format value userIdentification tidak sesuai dengan format nomor handphone / email |
|
Inquiry Amount exceeded account balance limit. | amount pada inquiry transaksi melebihi limit akun tujuan disbursement |
|
401 Unauthorized |
access_token tidak sesuai atau kedaluwarsa |
|
500 Internal Server Error |
Respons tidak valid dari Back-end atau Kesalahan Tidak Terdefinisi |
Payment Disbursement
Tahap ini merupakan tahap akhir dari disbursement, dengan menyertakan inquiryCode
yang didapat dari proses Inquiry Disbursement dan notes yang juga dapat disertakan, maka saldo AstraPay akan diterima oleh pengguna AstraPay sesuai dengan inquiry disbursement dan notes yang disertakan (jika ada).
Complete Code
curl --location --request POST 'https://sandbox.astrapay.com/disbursement-service/disbursements' \
--header 'Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJiOThDaFhUWFVJQ3J4SjhadWt5OWNCUXpBLThqQnhxa0lndmpoM0h3SVpFIn0.eyJleHAiOjE2NDg2MjI2MjAsImlhdCI6MTY0ODYyMjMyMCwianRpIjoiYzRlOTVjMmMtMzE0OS00ZTE2LWExOWEtMjgyYWZhMjUzOWY5IiwiaXNzIjoiaHR0cDovLzE3Mi4yMC42Ljc5OjgwODAvYXV0aC9yZWFsbXMvYXN0cmFwYXktYnVzaW5lc3MiLCJhdWQiOiJhY2NvdW50Iiwic3ViIjoiMmQzMGUzYjAtNjk0Yi00NjkyLWE4YmUtYmJhNTA5ZjBjNjQ5IiwidHlwIjoiQmVhcmVyIiwiYXpwIjoiODE5Njk2MTItYWZmMS0xMWVjLWI5MDktMDI0MmFjMTIwMDAyIiwiYWNyIjoiMSIsInJlYWxtX2FjY2VzcyI6eyJyb2xlcyI6WyJkZWZhdWx0LXJvbGVzLWFzdHJhcGF5LWJ1c2luZXNzIiwib2ZmbGluZV9hY2Nlc3MiLCJ1bWFfYXV0aG9yaXphdGlvbiJdfSwicmVzb3VyY2VfYWNjZXNzIjp7ImFjY291bnQiOnsicm9sZXMiOlsibWFuYWdlLWFjY291bnQiLCJtYW5hZ2UtYWNjb3VudC1saW5rcyIsInZpZXctcHJvZmlsZSJdfX0sInNjb3BlIjoicHJvZmlsZSBlbWFpbCIsImVtYWlsX3ZlcmlmaWVkIjpmYWxzZSwiY2xpZW50SG9zdCI6IjE3Mi4yMC42LjEwOSIsImNsaWVudElkIjoiODE5Njk2MTItYWZmMS0xMWVjLWI5MDktMDI0MmFjMTIwMDAyIiwicHJlZmVycmVkX3VzZXJuYW1lIjoic2VydmljZS1hY2NvdW50LTgxOTY5NjEyLWFmZjEtMTFlYy1iOTA5LTAyNDJhYzEyMDAwMiIsImNsaWVudEFkZHJlc3MiOiIxNzIuMjAuNi4xMDkifQ.l5TATpndqlC8ac5TiT2bSqKQV-1kI97t260DFzLXpTkWK-S0CjjbdVW4zM3qPIpEztzLwXfTfFZb8DdzBRWDaZZcT0nbOl4R6886-2UfXZoAdknF1xZhdQazf-U8kpCjcd9E6Wt4s3n2evabjuBGvcSpbQlnOlUKTelOUVtgegpn0GbvbGau_0cgSC2-oHhWJiFZV4YCuvLRTEukb4Gbo0yFHhlzX-Vibz1CcWa1Og_OLFMkOpOx9UGNXmGR55F4_E7vWgW126hGyKNhBek6wtvRKtPf_5NLfqgtDghr_19YukTztVhlvaknb818j3E8TcSR_b_pmdrGP10S-9vc5g' \
--header 'x-signature: 9c4ba8bf3e2b0e66f4e48884e08dccbf0cfd533a6d02d871fb7a8b4914e93b9c' \
--header 'x-timestamp: 2021-04-21T11:37:51.436Z' \
--header 'x-astrapay-key: eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJlVm9kSlYzeVN6aUlyLW9aZjZCQzJtUVVaTmJFLWFaQndETjFUUmxmZE1jIn0.eyJleHAiOjE2Mzk0NDY3NzksImlhdCI6MTYzOTQ0NjQ3OSwianRpIjoiMzUxYWVlYTAtNTE2Ny00OTVkLWJhNTYtYWY5NmRhOTg2ZTFjIiwiaXNzIjoiaHR0cDovLzE3Mi4yMC4zLjEyNDo4MDgwL2F1dGgvcmVhbG1zL2FzdHJhcGF5LWJ1c2luZXNzIiwiYXVkIjoiYWNjb3VudCIsInN1YiI6IjJlNjJmNzVhLTA2Y2UtNGQ5ZC04NTRkLTdiYWYxYjk0OWJiOSIsInR5cCI6IkJlYXJlciIsImF6cCI6IjYwMDY4YzlmLTkyMGMtNGVlMy05M2Q5LWQ0NWRlMzcxZjJlMSIsImFjciI6IjEiLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsiZGVmYXVsdC1yb2xlcy1hc3RyYXBheS1idXNpbmVzcyIsIm9mZmxpbmVfYWNjZXNzIiwidW1hX2F1dGhvcml6YXRpb24iXX0sInJlc291cmNlX2FjY2VzcyI6eyJhY2NvdW50Ijp7InJvbGVzIjpbIm1hbmFnZS1hY2NvdW50IiwibWFuYWdlLWFjY291bnQtbGlua3MiLCJ2aWV3LXByb2ZpbGUiXX19LCJzY29wZSI6InByb2ZpbGUgZW1haWwiLCJlbWFpbF92ZXJpZmllZCI6ZmFsc2UsImNsaWVudEhvc3QiOiIxNzIuMjAuMy4xMjMiLCJjbGllbnRJZCI6IjYwMDY4YzlmLTkyMGMtNGVlMy05M2Q5LWQ0NWRlMzcxZjJlMSIsInByZWZlcnJlZF91c2VybmFtZSI6InNlcnZpY2UtYWNjb3VudC02MDA2OGM5Zi05MjBjLTRlZTMtOTNkOS1kNDVkZTM3MWYyZTEiLCJjbGllbnRBZGRyZXNzIjoiMTcyLjIwLjMuMTIzIn0.THD7R67KhJu93x4pBzQUSbxb4riGTROdPCFiVTGhz9v1sYmo7Ku1rDNrRw2hZcnnIxrXMPlVsHeLSrjS_gpXFUTSibqGlpqKpQ-niHxWnzHns-IbUAZF0Us0pj_7Yx3g0Q7huGwyV-ZyMXYrgZFCul4IKloUgEkYASznGGM2dCuH9kp90tGwXfQwLsgmq570mtE9LpSS0lIg92uLd8H7nDTCAhQVgG-9r5RkuxJv7GZqcajD2G4hrZgkR8FrtY5gnMu-mA4GzWGfpVwFWqRY_i9y2_nP5attQ07IsbFaARR6SKnMUAVG11mtRopDn8b4MTLpcAJ_IpVYRaQ8KcrZ_Q' \
--header 'Content-Type: application/json' \
--data-raw '{
"inquiryCode": "22021115093120333425",
"notes": "Disbursement Saldo AstraPay"
}'
Protocol: HTTPS
Method: POST
Sandbox URL: https://sandbox.astrapay.com/disbursement-service/h2h/disbursements
Request Header
Field | Value | Wajib | Deskripsi |
---|---|---|---|
Authorization | Bearer Token | Y | Token yang didapatkan dari API proses Pembuatan Token Akses. |
x-signature | String | Y | Hasil generate dari AstraPay signature. |
x-timestamp | String | Y | Timestamp dengan format ISO8601 dan dalam format waktu UTC, yyyy-MM-ddTHH:mm:ss.SSSZ . |
x-astrapay-key | Bearer Token | Y | Token yang didapatkan dari API proses Pembuatan Token Akses. |
{
"inquiryCode": 22021115093120333425,
"notes" : "Disbursement Saldo AstraPay"
}
Request Body
Field | Tipe Data | Wajib | Deskripsi |
---|---|---|---|
inquiryCode | String | Y | 20 karakter alphanumeric yang merupakan kode inquiry dari transaksi disbursement.Yang didapatkan dari API Inquiry Disbursement. inquiryCode ini memiliki waktu selama 60 menit sebelum EXPIRED |
notes | String | N | Catatan yang akan disertakan dalam transaksi disbursement dan akan masuk ke aplikasi AstraPay. Tidak dapat menyertakan link ataupun HTML |
Berikut tampilan dalam aplikasi AstraPay sesuai dengan transaksi disbursement yang dilakukan :
Respons
Field | Tipe Data | Wajib | Deskripsi |
---|---|---|---|
disbursementNumber | String | Y | Kode transaksi disbursement yang sudah diproses |
userIdentification | String | Y | Nomor tujuan yang merupakan pengguna AstraPay |
amount | Number | Y | Jumlah saldo yang akan ditransfer ke nomor tujuan |
serviceCharge | Number | Y | Jumlah biaya admin yang ada pada layanan disbursement |
total | Number | Y | Total = amount + serviceCharge |
status | String | Y | Status transaksi disbursement |
Contoh Respon
201 - Created
{
"disbursementNumber": "INV/DIS/EXO/20220228/093744HQH",
"userIdentification": "08123456789",
"amount": 15000,
"serviceCharge": 0,
"total": 15000,
"status": "SUCCESS",
}
400 - Bad Request
{
"status": 400,
"message": "Validation failed for executeH2HDisbursementInquiryRequestDto(inquiryCode). Error count 1",
"error": "Bad Request",
"path": "/disbursement-service/disbursements",
"timestamp": "2022-03-01T15:11:58.814281600",
"details": [
{
"code": "H2HInquiryCodeIsNotExpired",
"objectName": "executeH2HDisbursementInquiryRequestDto",
"defaultMessage": "Inquiry code is expired.",
"field": "inquiryCode",
"rejectedValue": "22022307263351277906"
}
]
}
400 - Bad Request (Invalid Signature)
Invalid signature
Berikut penjelasan dari status
inquiryCode:
- "PENDING" : Transaksi disbursement belum terproses, saldo belum bertambah ke akun AstraPay.
- "PROCESSING" : Transaksi disbursement sedang diproses, saldo belum bertambah ke akun AstraPay.
- "SUCCESS" : Transaksi disbursement berhasil dilakukan, saldo telah bertambah ke akun AstraPay.
- "FAILED" : Transaksi disbursement gagal dilakukan, saldo tidak bertambah ke akun AstraPay.
- "EXPIRED" : Transaksi disbursement sudah melewati 1 jam setelah inquiry dibuat.
Kode Respons
Status Code | Details | Deskripsi |
---|---|---|
201 Created |
Transaksi disbursement berhasil dilaksanakan. Advice payment disbursement (jika request dengan inquiryCode yang sama) | |
400 Bad Request |
Inquiry code is expired. | inquiryCode telah expired (melebihi 1 jam dari pembuatan inquiryCode). |
401 Unauthorized |
access_token tidak sesuai atau kedaluwarsa |
|
500 Internal Server Error |
Respons tidak valid dari Back-end atau Kesalahan Tidak Terdefinisi |
Check Disbursement Status
API ini digunakan untuk mendapatkan detail transasksi disbursement sesuai dengan inquiryCode yang disertakan. Sehingga, API akan memberikan respons data dari transaksi disbursement yang sudah dilaksanakan.
Complete Code
curl --location --request GET 'https://sandbox.astrapay.com/disbursement-service/h2h/22092709523273159544' \
--header 'x-signature: 1e6d0d03132f20b774b93258720b00bc6a767d45c8bfd3418fc2c5fc5c395e41' \
--header 'x-timestamp: 2021-04-21T11:37:51.436Z' \
--header 'x-astrapay-key: eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJlVm9kSlYzeVN6aUlyLW9aZjZCQzJtUVVaTmJFLWFaQndETjFUUmxmZE1jIn0.eyJleHAiOjE2Mzk0NDY3NzksImlhdCI6MTYzOTQ0NjQ3OSwianRpIjoiMzUxYWVlYTAtNTE2Ny00OTVkLWJhNTYtYWY5NmRhOTg2ZTFjIiwiaXNzIjoiaHR0cDovLzE3Mi4yMC4zLjEyNDo4MDgwL2F1dGgvcmVhbG1zL2FzdHJhcGF5LWJ1c2luZXNzIiwiYXVkIjoiYWNjb3VudCIsInN1YiI6IjJlNjJmNzVhLTA2Y2UtNGQ5ZC04NTRkLTdiYWYxYjk0OWJiOSIsInR5cCI6IkJlYXJlciIsImF6cCI6IjYwMDY4YzlmLTkyMGMtNGVlMy05M2Q5LWQ0NWRlMzcxZjJlMSIsImFjciI6IjEiLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsiZGVmYXVsdC1yb2xlcy1hc3RyYXBheS1idXNpbmVzcyIsIm9mZmxpbmVfYWNjZXNzIiwidW1hX2F1dGhvcml6YXRpb24iXX0sInJlc291cmNlX2FjY2VzcyI6eyJhY2NvdW50Ijp7InJvbGVzIjpbIm1hbmFnZS1hY2NvdW50IiwibWFuYWdlLWFjY291bnQtbGlua3MiLCJ2aWV3LXByb2ZpbGUiXX19LCJzY29wZSI6InByb2ZpbGUgZW1haWwiLCJlbWFpbF92ZXJpZmllZCI6ZmFsc2UsImNsaWVudEhvc3QiOiIxNzIuMjAuMy4xMjMiLCJjbGllbnRJZCI6IjYwMDY4YzlmLTkyMGMtNGVlMy05M2Q5LWQ0NWRlMzcxZjJlMSIsInByZWZlcnJlZF91c2VybmFtZSI6InNlcnZpY2UtYWNjb3VudC02MDA2OGM5Zi05MjBjLTRlZTMtOTNkOS1kNDVkZTM3MWYyZTEiLCJjbGllbnRBZGRyZXNzIjoiMTcyLjIwLjMuMTIzIn0.THD7R67KhJu93x4pBzQUSbxb4riGTROdPCFiVTGhz9v1sYmo7Ku1rDNrRw2hZcnnIxrXMPlVsHeLSrjS_gpXFUTSibqGlpqKpQ-niHxWnzHns-IbUAZF0Us0pj_7Yx3g0Q7huGwyV-ZyMXYrgZFCul4IKloUgEkYASznGGM2dCuH9kp90tGwXfQwLsgmq570mtE9LpSS0lIg92uLd8H7nDTCAhQVgG-9r5RkuxJv7GZqcajD2G4hrZgkR8FrtY5gnMu-mA4GzWGfpVwFWqRY_i9y2_nP5attQ07IsbFaARR6SKnMUAVG11mtRopDn8b4MTLpcAJ_IpVYRaQ8KcrZ_Q' \
--header 'Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICI1QjhXRGtYSzVBMWpyeFVrckMyWnB4NFN4XzVBRUlhMVpjM1NsOVZobUtJIn0.eyJleHAiOjE2NjQyNjgxNjcsImlhdCI6MTY2NDI0NjU2NywianRpIjoiNTg2OTJiZjgtMWJiMS00ZTYxLWE3ODUtNWM0NmUxNzc1ZGE0IiwiaXNzIjoiaHR0cDovLzEwLjIwLjcuNjo4NDQzL2F1dGgvcmVhbG1zL2FzdHJhcGF5LWJ1c2luZXNzIiwiYXVkIjoiYWNjb3VudCIsInN1YiI6IjNkMDYwMjEyLWE5ODYtNDk5NC04MWFhLTE3NWM5NzRlYzJiZiIsInR5cCI6IkJlYXJlciIsImF6cCI6ImE5NjUyOTczLTRhNDMtNDM0Zi05MjRmLWY1ODRmNTBmZWVkNiIsImFjciI6IjEiLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsiZGVmYXVsdC1yb2xlcy1hc3RyYXBheS1idXNpbmVzcyIsIm9mZmxpbmVfYWNjZXNzIiwidW1hX2F1dGhvcml6YXRpb24iXX0sInJlc291cmNlX2FjY2VzcyI6eyJhY2NvdW50Ijp7InJvbGVzIjpbIm1hbmFnZS1hY2NvdW50IiwibWFuYWdlLWFjY291bnQtbGlua3MiLCJ2aWV3LXByb2ZpbGUiXX19LCJzY29wZSI6InByb2ZpbGUgZW1haWwiLCJjbGllbnRIb3N0IjoiMDowOjA6MDowOjA6MDoxIiwiZW1haWxfdmVyaWZpZWQiOmZhbHNlLCJjbGllbnRJZCI6ImE5NjUyOTczLTRhNDMtNDM0Zi05MjRmLWY1ODRmNTBmZWVkNiIsInByZWZlcnJlZF91c2VybmFtZSI6InNlcnZpY2UtYWNjb3VudC1hOTY1Mjk3My00YTQzLTQzNGYtOTI0Zi1mNTg0ZjUwZmVlZDYiLCJjbGllbnRBZGRyZXNzIjoiMDowOjA6MDowOjA6MDoxIn0.bCxML3cttzp8sIza_T0YaSsn_rM5EknvNLh8xocgwWePRBd8rqTlMvvWbfdu-jktGZqAVXcy7z8tdkI4o4g5gbAZov86T_JS4rtYABIMD0GzGlyUV2MDI5_0gmRLh0Pvr5Qx_6yNlJl_3rne6bnjruWeWqRAlYAsKbrlGj56Nzjii3FeGO9qrKECx3S1oZl2MJzSD0tbDjSwEIfgHTtZgVdWUSsX9lB2F8hPJC4TpVMKEIHgveGBxqir1qwDZzfEMqqtYEABeep0AfpB_GE9QHVBn0DSwZoxc8gva0DV-ttrNZknkLSi-AyT_5zPrXwM8l0CzFLpvsHKZCksV2VDhQ' \
Protocol: HTTPS
Method: GET
Sandbox URL: https://sandbox.astrapay.com/disbursement-service/h2h/{inquiryCode}
Request Header
Field | Value | Wajib | Deskripsi |
---|---|---|---|
Authorization | Bearer Token | Y | Token yang didapatkan dari API proses Pembuatan Token Akses. |
x-signature | String | Y | Hasil generate dari AstraPay signature. Dengan value request body berupa "{}" |
x-timestamp | String | Y | Timestamp dengan format ISO8601 dan dalam format waktu UTC, yyyy-MM-ddTHH:mm:ss.SSSZ . |
x-astrapay-key | Bearer Token | Y | Token yang didapatkan dari API proses Pembuatan Token Akses. |
Respons
Field | Tipe Data | Wajib | Deskripsi |
---|---|---|---|
disbursementNumber | String | Y | Kode transaksi disbursement yang sudah diproses |
userIdentification | String | Y | Nomor tujuan yang merupakan pengguna AstraPay |
amount | Number | Y | Jumlah saldo yang akan ditransfer ke nomor tujuan |
serviceCharge | Number | Y | Jumlah biaya admin yang ada pada layanan disbursement |
total | Number | Y | Total = amount + serviceCharge |
status | String | Y | Status transaksi disbursement |
Contoh Respon
201 - Created
{
"disbursementNumber": "INV/DIS/EXO/20220228/093744HQH",
"userIdentification": "08123456789",
"amount": 15000,
"serviceCharge": 0,
"total": 15000,
"status": "SUCCESS",
}
400 - Bad Request
{
"status": 400,
"message": "Disbursement transaction has not been committed.",
"error": "Bad Request",
"path": "/disbursement-service/h2h/1234512121",
"timestamp": "2022-09-09T08:37:57.912921800",
"details": []
}
400 - Bad Request (Invalid Signature)
Invalid signature
Berikut penjelasan dari status
inquiryCode:
- "PENDING" : Transaksi disbursement belum terproses, saldo belum bertambah ke akun AstraPay.
- "PROCESSING" : Transaksi disbursement sedang diproses, saldo belum bertambah ke akun AstraPay.
- "SUCCESS" : Transaksi disbursement berhasil dilakukan, saldo telah bertambah ke akun AstraPay.
- "FAILED" : Transaksi disbursement gagal dilakukan, saldo tidak bertambah ke akun AstraPay.
- "EXPIRED" : Transaksi disbursement sudah melewati 1 jam setelah inquiry dibuat.
Kode Respons
Status Code | message | Deskripsi |
---|---|---|
200 OK |
InquiryCode yang disertakan terdaftar. | |
400 Bad Request |
Disbursement transaction has not been committed. | inquiryCode belum melaksanakan tahapan payment disbursement |
400 Bad Request |
The inquiry code does not belong to the merchant. | Host merchant melakukan request dengan inquiryCode dari merchant yang berbeda. |
401 Unauthorized |
access_token tidak sesuai atau kedaluwarsa |
|
500 Internal Server Error |
Respons tidak valid dari Back-end atau Kesalahan Tidak Terdefinisi |
Quick Response Dynamic
Overview
This document describes the notification and acceptance procedure for the implementation of this, from both the merchant and issuer perspective. It also describes the payment API that is implemented at the gateway.
General MPM Payment Flow
In this method, the merchant receives payment by having the consumer application scan the merchant details within a QR code that the merchant presents. To ensure interoperability with other payment gateways and issuers, the information encoded in the merchant’s QR code may conform to the EMVCo standard merchant-presented format. This is following a flow where the payment is collected as a credit transfer to the merchant acquirer account from the issuer partner.
MPM payment flow with dynamic QR code and open bill
This diagram shows an MPM payment flow in which keeping tracking of an open bill allows AstraPay to maintain control over the payment received for it.
MPM payment flow with dynamic QR code
Another simplified flow involves the consumer scanning the merchant’s dynamic MPM QR Code which is obtained from the AstraPay back-end via an API call. Notifying the merchant of payment relies on the existence of a payment notification forwarded from the AstraPay host to the merchant host.
QR Code Payment
Merchant presented barcode format
Although the merchant-presented barcode format can be of any type, for interoperability purposes it usually follows the EMVCo standard, with further clarifications as dictated by the national regulatory bodies.
Protocol & Service Address
Item | Value |
---|---|
Protocol | HTTPS |
Verb | POST |
URL | https://axway-dev.astrapay.com:8065/api/v1/merchant-processing/qrcodepayment |
Request Body
Example Request Body
curl --location --request POST 'https://axway-dev.astrapay.com:8065/api/v1/merchant-processing/qrcodepayment' \
--data-raw '{
"merchant": "6281299000168",
"terminal": "APTERMINAL01",
"trx_id": "FIF-291058329", "merchant_bill_ref": "PULSA.MERCHANTFIF12904", "amount": 10000
}'
Field | Type | Requirement | Max. Length | Description |
---|---|---|---|---|
merchant | String | M | Max. 25 | The MID of the merchant. This must be registered in the AstraPay merchant system. |
terminal | String | M | Max. 25 | The TID of the terminal performing the transaction. This must be registered in the AstraPay merchant system. |
trx_id | String | M | Max. 99 | Request Identifier (merchant generated). |
merchant_bill_ref | String | M | Max. 99 | The bill reference as generated by the merchant. |
amount | Number | M | Max. 13 | The transaction amount in the smallest currency unit (ISO 4217). For example: IDR 1000000 is equivalent to Rp 10,000.00 |
Response Body
Response for object in value
Example Response
{
"code": "200",
"status_code": true,
"message": null,
"value": {
"trx_id": "MP-1",
"merchant_bill_ref": "PULSA.MERCHANTFIF12904",
"status": "00",
"description": "Success",
"amount": 1000000,
"currency_code": "IDR",
"bill_status": "PENDING",
"merchant_qr_code": "00020101021226660016COM.ASTRAPAY.WWW0118936008223299000168021362812990001680303UBE51420012ID.GPNQR.WWW0215ID10190057081270303UBE520311153033605405100005802ID5917Toko Sepeda Ditto6003ntt610611223362680122PULSA.MERCHANTFIF129040712APTERMINAL01982202136281299000168030116304CE16",
"open_bill_id": "2381",
"created_at": "2021-02-16T00:14:00.919Z",
"expires_at": "2021-02-16T00:15:00.919Z"
}
}
Field | Type | Requirement | Max. Length | Description |
---|---|---|---|---|
trx_id | String | M | Max. 99 | The request identifier (merchant generated). |
merchant_bill_reff | String | M | Max. 99 | The bill reference as generated by the merchant. |
status | String | M | Max. 25 | A response code indicating the outcome of the request. For example: 00 (SUCCESS) |
description | String | M | Max. 99 | A description of the status code. |
amount | Number | M | Max. 13 | The transaction amount in the smallest currency unit (ISO 4217). For example: IDR 1000000 is equivalent to Rp 10,000.00 |
currency_code | String | M | Max. 3 | ISO 4217 currency identifier. For example: IDR |
bill_status | String | M | Max. 25 | A textual description of the status for the open bill |
merchant_qr_code | String | M | Max. 1000 | The MPM EMV QR code string generated by AstraPay |
open_bill_id | String | M | Max. 99 | The open bill id that the merchant can use to query for payments. |
created_at | String | M | Max. 99 | The timestamp of open bill creation |
expires_at | String | M | Max. 99 | The timestamp of open bill expiry |
QR Code Payment Check
Protocol & Service Address
Item | Value |
---|---|
Protocol | HTTPS |
Verb | POST |
URL | https://axway-dev.astrapay.com:8065/api/v1/merchant-processing/qrcodepaymentcheck |
Request Body
Example Request Body
curl --location --request POST 'https://axway-dev.astrapay.com:8065/api/v1/merchant-processing/api/qrcodepaymentcheck' \
--data-raw '{
"merchant": "6281299000168",
"terminal": "APTERMINAL01",
"open_bill_id" : "2224",
"merchant_bill_ref": "PULSA.MERCHANTFIF12904",
"trx_id": "FIF-291058329"
}'
Field | Type | Requirement | Max. Length | Description |
---|---|---|---|---|
merchant | String | M | Max. 25 | The MID of the merchant. This must be registered in the AstraPay merchant system. |
terminal | String | M | Max. 25 | The TID of the terminal performing the transaction. This must be registered in the AstraPay merchant system. |
open_bill_id | String | M | Max. 99 | The id of the open bill generated by AstraPay. |
merchant_bill_ref | String | M | Max. 99 | The bill reference as generated by the merchant. |
trx_id | String | M | Max. 99 | Request Identifier (merchant generated). |
Response Body
Example Response Pending
{
"code": "200",
"status_code": true,
"message": null,
"value": {
"trx_id": "MP-12345",
"merchant_bill_ref": "PULSA.MERCHANTFIF12904",
"status": "00",
"description": "Success",
"amount": 1000000,
"currency_code": "IDR",
"bill_status": "PENDING",
"merchant_qr_code": "00020101021226660016COM.ASTRAPAY.WWW0118936008223299000168021362812990001680303UBE51420012ID.GPNQR.WWW0215ID10190057081270303UBE520311153033605405100005802ID5917Toko Sepeda Ditto6003ntt610611223362680122PULSA.MERCHANTFIF129040712APTERMINAL01982202136281299000168030116304CE16",
"open_bill_id": "2386",
"created_at": "2021-02-16T00:39:40.247Z",
"expires_at": "2021-02-16T00:40:40.247Z"
}
}
Example Response paid
{
"code": "200",
"status_code": true,
"message": null,
"value": {
"trx_id": "101",
"merchant_bill_ref": "TRANSACTION",
"status": "00",
"description": "Success",
"amount": 2000000,
"currency_code": "IDR",
"bill_status": "PAID",
"merchant_qr_code": "00020101021226620016COM.ASTRAPAY.WWW011893600822321000001802092100000180303UBE5204504553033605405200005802ID5914Yokke Merchant6015Jakarta Selatan61051244062560111TRANSACTION0715ASTRAPAY000010098180209210000018030116304D530",
"open_bill_id": "2865",
"created_at": "2021-03-09T07:26:39.803Z",
"expires_at": "2021-03-09T07:27:39.803Z",
"payments": [
{
"yt_trx_id": "505623",
"external_trx_id": "x51t05",
"merchant_bill_ref": "TRANSACTION",
"currency_code": "IDR",
"amount": 2000000
}
]
}
}
Field | Type | Requirement | Max. Length | Description |
---|---|---|---|---|
trx_id | String | M | Max. 99 | The request identifier (merchant generated). |
merchant_bill_reff | String | M | Max. 99 | The bill reference as generated by the merchant. |
status | String | M | Max. 25 | A response code indicating the outcome of the request. For example: 00 (SUCCESS) |
description | String | M | Max. 99 | A description of the status code. |
amount | Number | M | Max. 13 | The transaction amount in the smallest currency unit (ISO 4217). For example: IDR 1000000 is equivalent to Rp 10,000.00 |
currency_code | String | M | Max. 3 | ISO 4217 currency identifier. For example: IDR |
bill_status | String | M | Max. 25 | A textual description of the status for the open bill |
merchant_qr_code | String | M | Max. 1000 | The MPM EMV QR code string generated by AstraPay |
open_bill_id | String | M | Max. 99 | The open bill id that the merchant can use to query for payments. |
created_at | String | M | Max. 99 | The timestamp of open bill creation |
expires_at | String | M | Max. 99 | The timestamp of open bill expiry |
payments | List of payment trx | Payments received for open bill. Please refer to Payment below |
Payments
Field | Type | Requirement | Max. Length | Description |
---|---|---|---|---|
yt_trx_id | String | M | Max. 99 | The transaction identifier generated by Youtap for the payment received on the open bill. |
external_trx_id | String | M | Max. 99 | The transaction identifier generated by the external system and recorded by Youtap when the payment was received. |
merchant_bill_reff | String | M | Max. 25 | The merchant bill reference recorded against the transaction. |
currency_code | String | M | Max. 3 | ISO 4217 currency identifier. For example: IDR |
amount | Number | M | Max. 13 | The transaction amount in the smallest currency unit (ISO 4217). For example: IDR 1000000 is equivalent to Rp 10,000.00 |
Bill Status
bill_status | description |
---|---|
PENDING | Open bill has not been paid and is still active. |
EXPIRED | Validity for the open bill has expired. |
PAID | Open bill had received payments. |
Status Code Response
Below status code is worth for status inside the value
Status | Description | Notes |
---|---|---|
00 | Success | The payment succeeded |
01 | System Malfunction | The payment succeeded |
03 | Empty Required Parameter | An error that does not qualify as something else has occurred. |
04 | Invalid Request | The request is not valid due to some malformed syntax. |
05 | Invalid Transaction Type | Transaction type is not supported. |
06 | Issuer Transaction Failed | The transaction failed at the issuer. Issuer status and description may provide further information |
07 | Unknown Issuer | The issuer could not be identified from the token. |
08 | Issuer Reverse Failed | The reversal operation failed at the issuer. |
09 | Issuer Reverse Success | The reversal operation succeeded at the issuer |
10 | Original Payment Not Found | The payment to be queried or reversed could not be found. |
11 | Hub Reverse Failed | The transaction failed to be reversed at the payment hub. |
12 | Reversal conditions not met | The conditions to reverse a transaction could not be met. |
13 | Duplicate Request | This is a duplicate request for payment (same merchant and reference). |
14 | Invalid Transaction Amount | The transaction amount is invalid. |
15 | Refund Conditions Not Met | Business rules for refund broken. For example, there is no recorded original transaction. |
16 | Issuer Refund Failed | The payment hub failed to do the refund on the issuer system. |
17 | Hub Refund Failed | The payment hub failed to record the refund transaction. |
18 | Original Payment Already Refinded | The original payment indicated has already been refunded. |
19 | Security Exception | A security exception was encountered when connection to an external provider. |
20 | Account Not Found | The merchant account has not been found. |
21 | Invalid token | The supplied CPM token is invalid. |
22 | Invalid Member | The supplied memberId is invalid. |
23 | Loyalty and Promotion Error | The description is supplied by the Loyalty and Promotion server. |
24 | QR Code Payment Generation Error | An error was encountered when creating a payment request with an open bill. |
25 | QR Code Payment Check Error | An error was encountered when checking for an open bill for payments. |
26 | No route for transaction | No route was found for a CPM Payment. |
27 | Acquirer Transaction Failed | The payment hub failed to process the transaction with acquirer. |
55 | No Open Bill | The payment notification required an open bill to be present, but none was found. |
56 | Open Bill Already Paid | The payment notification required an open bill that has already been paid. |
QRIS Dynamic V2
Overview V2
Selamat datang di dokumentasi AstraPay QRIS Dynamic.
Dokumentasi ini menjelaskan procedure acceptance untuk implementasi QRIS Dynamic dari perspektif merchant.
Berikut ini adalah flow transaksi QRIS Dynamic secara umum.
Pada dokumentasi ini juga menjelaskan tentang API QRIS Dynamic yang diimplementasi pada Gateway.
Berikut adalah beberapa API yang kami sediakan untuk Merchant, yaitu:
- Authorization
- Create Bill
- Check Status Bill
Dari proses di atas, akan dijelaskan apa saja yang perlu disiapkan dan bagaimana langkah-langkah implementasinya.
Environment V2
Item | Value |
---|---|
Development | https://sandbox.astrapay.com |
Production | URL production akan dikirimkan melalui email setelah UAT selesai dilakukan |
Authorization
Semua API memerlukan header Authorization dengan token untuk memastikan Anda diautentikasi dengan benar. Berikut adalah credential yang digunakan untuk proses autentikasi, yaitu:
- Client ID: adalah Client Identifier yang bersifat unik yang diterbitkan oleh AstraPay untuk akun Anda
- Client Secret: adalah Secret Key yang digunakan untuk mengamankan enkripsi setiap request yang dikirim.
Catatan : Client Secret bersifat rahasia, dilarang membagikan Client Secret kepada siapapun.
Protocol dan Service Address
Item | Value |
---|---|
Protocol | HTTPS |
Verb | POST |
URL | [host]:[port]/api/oauth/token |
Request Body
Contoh cURL Authorization
curl --location --request POST '[host]:[port]/api/oauth/token' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'grant_type=client_credentials' \
--data-urlencode 'client_id=c03f67ec-e253-11ec-8fea-0242acxxxxx' \
--data-urlencode 'client_secret=IEUwKzP0YMQkTOhhyvgqef4xxxxxx'
Field | Type | Requirement | Description |
---|---|---|---|
grant_type | String | Mandatory | Validasi jenis akses dengan format client_credentials |
client_id | String | Mandatory | String unik sebagai ID untuk menandakan Merchant yang mengirim request |
client_secret | String | Mandatory | String unik rahasia untuk menandakan Merchant yang mengirim request |
Response Body
Contoh Response Body Authorization
{
"access_token": "eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJUZk50bGRXTzhvRGhibU95STd1R0g0dV9ZMzBmeTc4b1I1T2V6S3JIdVpzIn0.eyJleHAiOjE2NTU3MTgzNTUsImlhdCI6MTY1NTcxODA1NSwianRpIjoiZDYyYjBlZmMtYjA5Yy00YTJhLWE3NzktMDFiOWI1MzBmOGE4IiwiaXNzIjoiaHR0cDovLzEwLjIwLjYuOTo4NDQzL2F1dGgvcmVhbG1zL2FzdHJhcGF5LWJ1c2luZXNzIiwic3ViIjoiYTFhMzMyNDQtMjVkNS00ZjVhLWJhZWEtOWZkOGVkZGY3MjNhIiwidHlwIjoiQmVhcmVyIiwiYXpwIjoiYzAzZjY3ZWMtZTI1My0xMWVjLThmZWEtMDI0MmFjMTIwMDAyIiwiYWNyIjoiMSIsInJlYWxtX2FjY2VzcyI6eyJyb2xlcyI6WyJkZWZhdWx0LXJvbGVzLWFzdHJhcGF5Il19LCJzY29wZSI6InByb2ZpbGUgZW1haWwiLCJjbGllbnRIb3N0IjoiMTcyLjIwLjUuMjEiLCJlbWFpbF92ZXJpZmllZCI6ZmFsc2UsImNsaWVudElkIjoiYzAzZjY3ZWMtZTI1My0xMWVjLThmZWEtMDI0MmFjMTIwMDAyIiwicHJlZmVycmVkX3VzZXJuYW1lIjoic2VydmljZS1hY2NvdW50LWMwM2Y2N2VjLWUyNTMtMTFlYy04ZmVhLTAyNDJhYzEyMDAwMiIsImNsaWVudEFkZHJlc3MiOiIxNzIuMjAuNS4yMSJ9.OCIql0se8uKuVISblbVHHr4Qx5AC-DsR6hqrGGoX_YwtToFr3Ye36NRRR6pkr_6Rc92TEdEXxWOsehRJPPTwAqKwEjFU39Q_m6nCYTCilFecv2QC48fnSqy7LR33yH1elkNswQ37l21gxQnXjyEBvPZTfJoVRBg9jl0394ZFcNptMXzxG5GNigkZw5DoGqS_w_5rdlcWHRiY1Egc84eZudHBhBflhuC7p9p5VF2mUgETAj7TwYnwLfmXNDLuCvRyVbX_x1fFHiuxo1JYx6kaZM8A5GDw9fcNRoVDfSmF4eoSvl1GcDnASZg6vecdUORo0c9Zpavg-sPuiqIdpPKcYw",
"expires_in": 300,
"refresh_expires_in": 0,
"token_type": "Bearer",
"not-before-policy": 0,
"scope": "profile email"
}
Field | Type | Requirement | Description |
---|---|---|---|
access_token | String | Mandatory | Token Authorization yang akan digunakan Merchant untuk hit API QRIS Dynamic AstraPay |
expires_in | Integer | Mandatory | Waktu habisnya masa berlaku token dalam satuan detik |
refresh_expires_in | Integer | Mandatory | Waktu refresh kadaluarsa Token dengan nilai Default: 0 |
token_type | String | Mandatory | Jenis token yang diberikan ke merchant dengan tipe Bearer |
not-before-policy | Integer | Mandatory | Default: 0 |
scope | String | Mandatory | Application scope yang diizinkan. Default: "profile email" |
Error Code
Status Code | Message | Description |
---|---|---|
200 OK | Client berhasil teridentifikasi dan akses token diberikan. | |
400 Bad Request | Invalid client credentials | Otentikasi klien gagal client_id atau client_secret tidak dikenal. |
Unsupported grant_type | value grant_type yang tidak sesuai. | |
Client secret not provided in request | client_secret tidak disertakan dalam request. | |
Missing form parameter: grant_type | value grant_type tidak disertakan dalam request. | |
500 Internal Server Error | Respons tidak valid dari Back-end atau Kesalahan Tidak Terdefinisi |
Create Bill
API ini berfungsi untuk membuat bill QRIS Dynamic, QRIS Dynamic memiliki waktu expired 4 jam sejak pertama kali dibuat.
Protocol & Service Address
Item | Value |
---|---|
Protocol | HTTPS |
Verb | POST |
URL | [host]:[port]/qris-service/bills |
Request Header
Item | Value |
---|---|
Authorization | Bearer "Token” |
Content-Type | Application/json |
Request Body
Contoh cURL Create Bill
curl --location --request POST '[host]:[port]/qris-service/bills' \
--header 'Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJUZk50bGRXTzhvRGhibU95STd1R0g0dV9ZMzBmeTc4b1I1T2V6S3JIdVpzIn0.eyJleHAiOjE2NTUwODk4OTgsImlhdCI6MTY1NTA4OTU5OCwianRpIjoiODZmZTczYTYtOGViMi00ZmFiLTliYzYtYWNjYjdmM2E1YzY5IiwiaXNzIjoiaHR0cDovLzEwLjIwLjYuOTo4NDQzL2F1dGgvcmVhbG1zL2FzdHJhcGF5LWJ1c2luZXNzIiwic3ViIjoiYTFhMzMyNDQtMjVkNS00ZjVhLWJhZWEtOWZkOGVkZGY3MjNhIiwidHlwIjoiQmVhcmVyIiwiYXpwIjoiYzAzZjY3ZWMtZTI1My0xMWVjLThmZWEtMDI0MmFjMTIwMDAyIiwiYWNyIjoiMSIsInJlYWxtX2FjY2VzcyI6eyJyb2xlcyI6WyJkZWZhdWx0LXJvbGVzLWFzdHJhcGF5Il19LCJzY29wZSI6InByb2ZpbGUgZW1haWwiLCJjbGllbnRIb3N0IjoiMTcyLjIwLjUuMjEiLCJlbWFpbF92ZXJpZmllZCI6ZmFsc2UsImNsaWVudElkIjoiYzAzZjY3ZWMtZTI1My0xMWVjLThmZWEtMDI0MmFjMTIwMDAyIiwicHJlZmVycmVkX3VzZXJuYW1lIjoic2VydmljZS1hY2NvdW50LWMwM2Y2N2VjLWUyNTMtMTFlYy04ZmVhLTAyNDJhYzEyMDAwMiIsImNsaWVudEFkZHJlc3MiOiIxNzIuMjAuNS4yMSJ9.X8jj2N2ZJHdJtzuYNgMlFp_WrDbYKH_1IlE_O2MVIj_e7n2T7dBlsWI-UlXUbLlkxfgVrFiE51fKrQFNomkWM-biQzDiRLvsk7f_1AFBLSBVgd_E2UP7sjzyET4r8mA_ITaiF_OyeJmIa5gXSr0Nxr6APQLrqgEKyzGKz2Q6_BBFcpfzlrlTMKdS-2NwFE1e_CB6b4XZ0-H4DeOlZ-ICWl9oUi1smluKGSxsMdVTVlbNfpRWxoyouXkEZlpmux5pMywLD2wnQUCfuSHfG_wIKNx0WOqwMvUbjZHLzxR1pRG-gqUPvZ2iGSiyWN0es5tyl-piI1uxs-bWgyYYrovqGQ' \
--header 'Content-Type: application/json' \
--data-raw '{
"mid": "210000240",
"tid": "A002",
"referenceNumber": "TEST0000342000001613",
"amount": 2000.00,
"tip" : 2000.00
}'
Field | Type | Requirement | Length | Description |
---|---|---|---|---|
mid | String | Mandatory | 25 | Id untuk merchant dan harus terdaftar pada sistem merchant Astrapay |
tid | String | Mandatory | 25 | Id untuk terminal dan harus terdaftar pada sistem merchant Astrapay |
referenceNumber | String | Mandatory | 255 | Nomor referensi yang dibuat oleh merchant |
amount | Number | Mandatory | 10 | Jumlah rupiah dari transaksi yang akan dimasukan oleh kasir dan tidak boleh lebih dari Rp10.000.000 |
tip | Number | Mandatory | 10 | Jumlah tip yang ingin diberikan oleh pembeli dan dimasukan oleh kasir dengan nilai default 0 |
Response Body
Contoh Response Create Bill
{
"id": 724,
"qrText": "00020101021226640018ID.CO.ASTRAPAY.WWW011893600822321000024002092100002400303UBE51440014ID.CO.QRIS.WWW0215ID20210662463920303UBE52045812530336054042000550202560420005802ID5915AHASS TDM Natar6007Jakarta61054433562220110MORE9YG0T20704A0026304AD6B",
"billNumber": "MORE9YG0T2",
"referenceNumber": "TEST0000342000001613",
"amount": 2000.00,
"tip": 2000.00,
"status": "PENDING",
"expiresAt": "2022-06-17T10:00:31.742Z",
"createdAt": "2022-06-13T10:00:31.742Z"
}
Field | Type | Requirement | Length | Description |
---|---|---|---|---|
id | Integer | Mandatory | - | Id milik bill untuk mengidentifikasi bill QRIS dynamic |
qrText | Text | Mandatory | - | Kumpulan text yang berisi informasi yang akan dijadikan Qr code untuk pembayaran |
billNumber | String | Mandatory | 24 | Berisi huruf dan angka acak yang dibuat oleh Astrapay |
referenceNumber | String | Mandatory | 255 | Nomor referensi yang dibuat oleh merchant |
amount | Number | Mandatory | 10 | Jumlah rupiah dari transaksi yang akan dimasukan oleh kasir dan tidak boleh lebih dari Rp10.000.000 |
tip | Number | Mandatory | 10 | Jumlah tip yang ingin diberikan oleh pembeli dan dimasukan oleh kasir dengan nilai default 0 |
status | String | Mandatory | 25 | Text berisi status pembayaran dari bill. Untuk mengetahui macam status pembayaran, mohon mengacu pada bagian table Bill Status |
expiresAt | Timestamp | Mandatory | - | Waktu untuk bill menjadi expired dengan format yyyy-MM-dd'T'HH:mm:ss.SSS'Z' |
createdAt | Timestamp | Mandatory | - | Waktu saat bill dibuat pertama kali dengan format yyyy-MM-dd'T'HH:mm:ss.SSS'Z' |
Check Bill Status
API ini berfungsi untuk mengetahui apakah bill sudah terbayar atau belum dan apakah bill sudah kedaluwarsa (expired) atau belum.
- Ketika pembayaran telah berhasil oleh customer, merchant dapat mengkonfirmasi Status Transaksi menggunakan API Check Status Bill atau menunggu Callback
- Pengecekan Status Transaksi pada Sistem Merchant perlu dibuat oleh setiap Merchant untuk membantu kasir mengetahui status transaksi jika Sistem Merchant belum menerima Callback dari AstraPay
Bill Status
Bill Status | Description |
---|---|
PENDING | Bill menunggu pembayaran dan masih bisa dibayar selama 4 jam |
EXPIRED | Bill kedaluwarsa setelah 4 jam dan sudah tidak bisa dibayar |
PAID | Bill sudah terbayar dan tidak bisa dibayar kembali |
Protocol & Service Address
Item | Value |
---|---|
Protocol | HTTPS |
Verb | GET |
URL | [host]:[port]/qris-service/bills/{id}/status |
Request Header
Contoh cURL Check Bill Status
curl --location --request GET '[host]:[port]/qris-service/bills/724/status' \
--header 'Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJUZk50bGRXTzhvRGhibU95STd1R0g0dV9ZMzBmeTc4b1I1T2V6S3JIdVpzIn0.eyJleHAiOjE2NTUwODk4OTgsImlhdCI6MTY1NTA4OTU5OCwianRpIjoiODZmZTczYTYtOGViMi00ZmFiLTliYzYtYWNjYjdmM2E1YzY5IiwiaXNzIjoiaHR0cDovLzEwLjIwLjYuOTo4NDQzL2F1dGgvcmVhbG1zL2FzdHJhcGF5LWJ1c2luZXNzIiwic3ViIjoiYTFhMzMyNDQtMjVkNS00ZjVhLWJhZWEtOWZkOGVkZGY3MjNhIiwidHlwIjoiQmVhcmVyIiwiYXpwIjoiYzAzZjY3ZWMtZTI1My0xMWVjLThmZWEtMDI0MmFjMTIwMDAyIiwiYWNyIjoiMSIsInJlYWxtX2FjY2VzcyI6eyJyb2xlcyI6WyJkZWZhdWx0LXJvbGVzLWFzdHJhcGF5Il19LCJzY29wZSI6InByb2ZpbGUgZW1haWwiLCJjbGllbnRIb3N0IjoiMTcyLjIwLjUuMjEiLCJlbWFpbF92ZXJpZmllZCI6ZmFsc2UsImNsaWVudElkIjoiYzAzZjY3ZWMtZTI1My0xMWVjLThmZWEtMDI0MmFjMTIwMDAyIiwicHJlZmVycmVkX3VzZXJuYW1lIjoic2VydmljZS1hY2NvdW50LWMwM2Y2N2VjLWUyNTMtMTFlYy04ZmVhLTAyNDJhYzEyMDAwMiIsImNsaWVudEFkZHJlc3MiOiIxNzIuMjAuNS4yMSJ9.X8jj2N2ZJHdJtzuYNgMlFp_WrDbYKH_1IlE_O2MVIj_e7n2T7dBlsWI-UlXUbLlkxfgVrFiE51fKrQFNomkWM-biQzDiRLvsk7f_1AFBLSBVgd_E2UP7sjzyET4r8mA_ITaiF_OyeJmIa5gXSr0Nxr6APQLrqgEKyzGKz2Q6_BBFcpfzlrlTMKdS-2NwFE1e_CB6b4XZ0-H4DeOlZ-ICWl9oUi1smluKGSxsMdVTVlbNfpRWxoyouXkEZlpmux5pMywLD2wnQUCfuSHfG_wIKNx0WOqwMvUbjZHLzxR1pRG-gqUPvZ2iGSiyWN0es5tyl-piI1uxs-bWgyYYrovqGQ'
Item | Value |
---|---|
Authorization | Bearer "Token” |
Content-Type | Application/json |
Request Path Variable
Item | Description |
---|---|
id | Id milik bill untuk mengidentifikasi bill QRIS dynamic |
Response Body
Example Response
{
"id": 724,
"billNumber": "MORE9YG0T2",
"referenceNumber": "TEST0000342000001613",
"amount": 2000.00,
"tip": 2000.00,
"status": "PAID",
"expiresAt": "2022-06-13T10:10:31.742Z",
"createdAt": "2022-06-13T10:05:31.755Z"
}
Field | Type | Requirement | Length | Description |
---|---|---|---|---|
id | Integer | Mandatory | - | Id milik bill untuk mengidentifikasi bill QRIS dynamic |
billNumber | String | Mandatory | 24 | Berisi huruf dan angka acak yang di generate oleh Astrapay |
referenceNumber | String | Mandatory | 255 | Nomor referensi yang dibuat oleh merchant |
amount | Number | Mandatory | 10 | Jumlah rupiah dari transaksi yang akan dimasukan oleh kasir dan tidak boleh lebih dari Rp10.000.000 |
tip | Number | Mandatory | 10 | Jumlah tip yang ingin diberikan oleh pembeli dan dimasukan oleh kasir dengan nilai default 0 |
status | String | Mandatory | 25 | Text berisi status pembayaran dari bill. Untuk mengetahui macam status pembayaran, mohon mengacu pada bagian table Bill Status |
expiresAt | Timestamp | Mandatory | - | Waktu untuk bill menjadi expired dengan format yyyy-MM-dd'T'HH:mm:ss.SSS'Z' |
createdAt | Timestamp | Mandatory | - | Waktu saat bill dibuat pertama kali dengan format yyyy-MM-dd'T'HH:mm:ss.SSS'Z' |
Callback
Catatan : Merchant diharapkan membuat API callback sesuai dengan Spesifikasi AstraPay (terlampir)
Parameter callback pada request akan digunakan oleh AstraPay untuk konfirmasi pembayaran yang telah dilakukan oleh customer Anda. Pada saat customer berhasil melakukan pembayaran, AstraPay akan mengirimkan HTTP POST yang menyertakan hasil pembayaran suatu tagihan dari customer. Anda perlu menyediakan halaman untuk menerima request callback tersebut. Agar dapat memproses hasil transaksi yang telah dilakukan oleh customer.
Request Header
Item | Value |
---|---|
Content-Type | Application/json |
Protocol dan Service Address
Item | Value |
---|---|
Protocol | HTTPS |
Verb | POST |
URL | [host]:[port]/bills/callback |
Request Body
Contoh cURL Callback
curl --location -g --request POST '[host]:[port]/bills/callback' \
--header 'Content-Type: application/json' \
--data-raw '{
"id": "724"
"billNumber": "67L0IUL9S3",
"referenceNumber": "TEST00003420000090",
"amount": 2000.00,
"tip": 1000.00,
"status": "PAID",
"createdAt": "2022-06-13T10:05:31.755Z"
}'
Field | Type | Requirement | Length | Description |
---|---|---|---|---|
id | Integer | Mandatory | - | Id milik bill untuk mengidentifikasi bill QRIS dynamic |
billNumber | String | Mandatory | 24 | Berisi huruf dan angka acak yang di generate oleh Astrapay |
referenceNumber | String | Mandatory | 255 | Nomor referensi yang dibuat oleh merchant |
amount | Number | Mandatory | 10 | Jumlah rupiah dari transaksi yang akan dimasukan oleh kasir dan tidak boleh lebih dari Rp10.000.000 |
tip | Number | Mandatory | 10 | Jumlah tip yang ingin diberikan oleh pembeli dan dimasukan oleh kasir dengan nilai default 0 |
status | String | Mandatory | 25 | Text berisi status pembayaran dari bill. Untuk mengetahui macam status pembayaran, mohon mengacu pada bagian table Bill Status |
createdAt | Timestamp | Mandatory | - | waktu saat bill dibuat pertama kali dengan format yyyy-MM-dd'T'HH:mm:ss.SSS'Z' |
Response Body
Field | Type | Requirement | Length | Description |
---|---|---|---|---|
id | Integer | Mandatory | - | Id milik bill untuk mengidentifikasi bill QRIS dynamic |
billNumber | String | Mandatory | 24 | Berisi huruf dan angka acak yang di generate oleh Astrapay |
referenceNumber | String | Mandatory | 255 | Nomor referensi yang dibuat oleh merchant |
amount | Number | Mandatory | 10 | Jumlah rupiah dari transaksi yang akan dimasukan oleh kasir dan tidak boleh lebih dari Rp10.000.000 |
tip | Number | Mandatory | 10 | Jumlah tip yang ingin diberikan oleh pembeli dan dimasukan oleh kasir dengan nilai default 0 |
status | String | Mandatory | 25 | Text berisi status pembayaran dari bill. Untuk mengetahui macam status pembayaran, mohon mengacu pada bagian table Bill Status |
createdAt | Timestamp | Mandatory | - | waktu saat bill dibuat pertama kali dengan format yyyy-MM-dd'T'HH:mm:ss.SSS'Z' |
QRIS Dynamic SNAP BI V1.0
Overview SNAP BI
Selamat datang di dokumentasi AstraPay QRIS Dynamic dengan standar SNAP BI.
Dokumentasi ini menjelaskan procedure acceptance untuk implementasi QRIS Dynamic dari perspektif merchant.
Saat ini, AstraPay QRIS Dynamic menyediakan metode integrasi melalui SNAP AstraPay API. Dimana SNAP (Standar Nasional Open API Pembayaran) adalah standar Open API yang ditetapkan Bank Indonesia agar menciptakan industri sistem pembayaran yang lebih maju di Indonesia.
Glosarium
Sebelum melakukan integrasi, mari kita bahas terlebih dahulu beberapa definisi dari istilah yang akan muncul pada dokumentasi ini. Penjelasan dari istilah tersebut adalah sebagai berikut:
Istilah | Deskripsi |
---|---|
QRIS | QRIS (Quick Response Code Indonesian Standard) adalah standar kode QR yang dikembangkan di Indonesia untuk memfasilitasi transaksi pembayaran elektronik. QRIS memungkinkan pengguna untuk melakukan pembayaran menggunakan kode QR yang dapat dibaca oleh aplikasi pembayaran. |
QRIS Dynamic | Varian dari QRIS yang memungkinkan pembayaran tagihan yang spesifik menggunakan kode QR yang unik. Dalam QRIS Dynamic, QR code yang dihasilkan berisi informasi tagihan yang spesifik, seperti jumlah pembayaran, nomor referensi, dan detail transaksi lainnya. |
Switcher | Pihak yang berperan sebagai perantara atau penghubung antara Penyedia Jasa Pembayaran (PJP) dengan institusi keuangan penerima atau pedagang (merchant) dan bertugas untuk memfasilitasi transaksi pembayaran yang menggunakan QRIS antara berbagai PJP. |
Issuer | Lembaga keuangan yang mengeluarkan atau menerbitkan alat pembayaran elektronik kepada pengguna yang nantinya dapat digunakan untuk melakukan transaksi pembayaran menggunakan QRIS. |
Acquirer | Entitas atau sistem yang bekerja sama dengan pedagang (merchant) untuk menerima pembayaran melalui QRIS. Acquirer bertugas untuk menyediakan teknologi dan infrastruktur yang dibutuhkan untuk menerima pembayaran melalui QRIS, seperti menyediakan perangkat pembaca QR, mengelola sistem pembayaran, dan menghubungkan pedagang dengan penyedia layanan pembayaran elektronik. |
Rekonsiliasi | Proses membandingkan data transaksi yang dicatat oleh pedagang (merchant) dengan data transaksi yang diterima oleh PJP. Hal ini bertujuan untuk memastikan bahwa semua transaksi yang terjadi telah tercatat dengan benar, tidak ada kesalahan, dan tidak ada perbedaan data antara pihak-pihak yang terlibat. |
Settlement | Proses transfer dana dari rekening yang melakukan pembayaran ke rekening pedagang (merchant) yang menerima pembayaran. Proses settlement ini biasanya melibatkan peran Switcher dan Acquirer, di mana mereka memfasilitasi transfer dana secara elektronik antara rekening-rekening yang terlibat. |
Bill | Tagihan atau invoice yang dapat dibayarkan menggunakan QRIS. Dalam QRIS Dynamic, QR code yang dihasilkan berisi informasi tagihan yang spesifik, seperti jumlah yang harus dibayarkan, nomor referensi, dan detail transaksi lainnya. |
MPM | Merchant Presented Mode, merchant menyajikan QR code QRIS kepada pelanggan untuk dipindai menggunakan aplikasi pembayaran yang kompatibel dengan QRIS. |
Berikut ini adalah flow transaksi QRIS Dynamic secara umum.
Pada dokumentasi ini juga menjelaskan tentang API QRIS Dynamic yang diimplementasi pada Gateway.
Berikut adalah beberapa API yang kami sediakan untuk Merchant, yaitu:
- SNAP Keamanan (Authorization)
- Generate QR MPM (Create Bill)
- QR Payment Query (Check Status Bill)
Dari proses di atas, akan dijelaskan apa saja yang perlu disiapkan dan bagaimana langkah-langkah implementasinya.
Environment SNAP BI V1.0
Item | Value |
---|---|
Development | https://sandbox.astrapay.com |
Production | URL production akan dikirimkan melalui email setelah UAT selesai dilakukan |
SNAP Keamanan
Klik disini untuk detail informasi SNAP Keamanan AstraPay.
Generate QR MPM (Create Bill)
API ini berfungsi untuk membuat bill QRIS Dynamic, QRIS Dynamic memiliki waktu expired sesuai dengan validityPeriod yang diberikan dengan maksimal 24 jam dari saat QRIS dibuat.
Protocol & Service Address
Item | Value |
---|---|
Protocol | HTTPS |
Service Code | 47 |
Channel ID | 00447 |
Verb | POST |
URL | [host]:[port]/qris-service/snap/v1.0/qr/qr-mpm-generate |
Request Header
Name | Type | Requirement | Description |
---|---|---|---|
Content-Type | String | Mandatory | Tipe konten, data yang dikirim harus selalu application/json |
Authorization | String | Mandatory | Bearer token dari hasil generate dari API Token B2B Access Token Request |
X-TIMESTAMP | String | Mandatory | Waktu lokal Merchant/Partner dalam format yyyy-MM-ddTHH:mm:ssTZD. Value yang digunakan harus sama dengan value pada signature-auth, token B2B Access Token Request, dan signature-service |
X-SIGNATURE | String | Mandatory | Signature untuk QR Query Payment hasil dari generate Signature Service. |
X-PARTNER-ID | String | Mandatory | Client ID Merchant/Partner yang didapat dari AstraPay |
X-EXTERNAL-ID | String | Mandatory | Numeric string unik yang hanya dapat digunakan satu kali dalam satu hari. Format yang digunakan adalah: 36 Random Numeric String |
CHANNEL-ID | String | Mandatory | ID dari service API Generate QR MPM |
Request Body
Contoh cURL generate QR MPM
curl --location --request POST '[host]:[port]/qris-service/snap/v1.0/qr/qr-mpm-generate' \
--header 'Authorization: Bearer xxxbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJUZk50bGRXTzhvRGhibUxxx' \
--header 'X-TIMESTAMP: 2022-10-17T20:00:00+07:00' \
--header 'X-SIGNATURE: xxxgt3kVLWyN41MEohgcJ1fTGXiiqWPflMncMr5gnLwblTqMeky1Yfxxx' \
--header 'CHANNEL-ID: 00447' \
--header 'X-PARTNER-ID: astrapay-testing' \
--header 'X-EXTERNAL-ID: 41807553358950093184162180797837' \
--header 'Content-Type: application/json' \
--data-raw '{
"partnerReferenceNo":"2020102900000000006802",
"amount":{
"value":"1.00",
"currency":"IDR"
},
"merchantId":"210000240",
"terminalId":"A01",
"validityPeriod":"2022-10-17T20:00:00",
"additionalInfo":{
"tip": "0.00"
}
}'
Field | Type | Requirement | Description |
---|---|---|---|
partnerReferenceNo | String | Mandatory | ID transaksi dari Merchant/Partner (Merchant/Partner Transaction Id). Unik setiap request. |
amount | Object | Mandatory | Jumlah Transaksi Net yang diberikan. Amount memiliki dua sub-field yang tertera di dua kolom di bawah. |
value | String | Mandatory | Jumlah Net dari transaksi. Contoh: total transaksi IDR10.000, menjadi 10000.00 (2 nol di belakang koma) |
currency | String | Mandatory | Kode mata uang berdasarkan ISO (IDR) |
merchantId | String | Mandatory | Kode unik setiap merchant |
terminalId | String | Mandatory | Kode terminal |
validityPeriod | String | Optional | Periode waktu kedaluwarsa dari satu tagihan. Ketika validityPeriod tidak diberikan maka secara default akan di set 4 jam setelah QR digenerate. Validity period tidak boleh lebih dari 24 jam (1 hari) dari waktu generate QR MPM. |
additionalInfo | Object | Optional | Informasi Tambahan. Terdapat subfield yang bisa dilihat di kolom di bawah. |
tip | String | Mandatory | (ISO4217) Jumlah Net dari tip. Contoh: jika total tip IDR10.000, maka harus ditulis 10000.00 (2 nol di belakang koma). Jika tip tidak ada maka cantumkan “0.00”. |
Response Body
Contoh Response
{
"responseCode": "2004700",
"responseMessage": "Successful",
"referenceNo": "BJI33Z8Z0H",
"partnerReferenceNo": "2020102900000000006718",
"qrContent": "00020101021226640018ID.CO.ASTRAPAY.WWW011893600822321989939702092198993200303UMI51400014ID.CO.QRIS.WWW0211ID2198993970303UMI5204549953033605404100055020256031005802ID5912Toko Asepso56007JAKARTA61051015062210110BJI33Z8Z0H0703A016304E8D4",
"merchantName": "Toko Asepso5",
"terminalId": "A001",
"additionalInfo": {
"tip": "100.00"
}
}
Field | Type | Requirement | Description |
---|---|---|---|
responseCode | String | Mandatory | Lihat response list |
responseMessage | String | Mandatory | Lihat response list |
referenceNo | String | Mandatory | Id transaksi dari AstraPay Ketika generate qr mpm berhasil (AstraPay Bill Number) |
partnerReferenceNo | String | Mandatory | Id transaksi dari Merchant/Partner Ketika generate qr mpm berhasil (Merchant/Partner Bill Number) |
qrContent | String | Mandatory | QR String MPM |
merchantName | String | Mandatory | Nama dari Merchant/Partner |
terminalId | String | Mandatory | Code terminal |
additionalInfo | Object | Mandatory | Informasi Tambahan. Terdapat subfield yang bisa dilihat di kolom di bawah. |
tip | String | Mandatory | (ISO4217) Jumlah Net dari tip. Contoh: jika total tip IDR10.000, maka harus ditulis 10000.00 (2 nol di belakang koma). Jika tip tidak ada maka cantumkan “0.00”. |
QR Payment Query (Check Status Bill)
API ini berfungsi untuk mengetahui apakah bill sudah terbayar atau belum dan apakah bill sudah kedaluwarsa (expired) atau belum.
- Ketika pembayaran telah berhasil oleh customer, merchant dapat mengkonfirmasi Status Transaksi menggunakan API QR Payment Query atau menunggu Callback
- Pengecekan Status Transaksi pada Sistem Merchant perlu dibuat oleh setiap Merchant untuk membantu kasir mengetahui status transaksi jika Sistem Merchant belum menerima Callback dari AstraPay
QR Payment Status
Berikut adalah list Bill Status dalam QR Dynamic AstraPay:
Bill Status | Description |
---|---|
PENDING | Bill menunggu pembayaran dan masih bisa dibayar selama jangka waktu validityPeriod yang diberikan |
CANCELED | Bill kedaluwarsa setelah melewati validityPeriod yang diberikan dan sudah tidak bisa dibayar |
SUCCESS | Bill sudah terbayar dan tidak bisa dibayar kembali |
INITIATED | Bill sedang dalam proses pembuatan |
PAYING | Proses transaksi pembayaran Bill sedang berlangsung |
FAILED | Bill gagal dibayar |
REFUND | Bill berhasil di refund (untuk pengerjaan berikutnya) |
Protocol & Service Address
Item | Value |
---|---|
Protocol | HTTPS |
Service Code | 51 |
Channel ID | 00551 |
Verb | GET |
URL | [host]:[port]/qris-service/snap/v1.0/qr/qr-mpm-query |
Contoh cURL QR Payment Query
curl --location --request POST '[host]:[port]/qris-service/snap/v1.0/qr/qr-mpm-query' \
--header 'Authorization: Bearer xxxiwia2lkIiA6ICJUZk50bGRXTzhvRGhibU9xxx' \
--header 'X-TIMESTAMP: 2022-10-17T20:00:00+07:00' \
--header 'X-SIGNATURE: xxxcJ1fTGXiiqWPflMncMr5gnLwblTqMeky1YfspeFo5fJfagvrHKq1FKHxxx' \
--header 'CHANNEL-ID: 00551' \
--header 'X-PARTNER-ID: astrapay-testing' \
--header 'X-EXTERNAL-ID: 41807553358950093184162180797837' \
--header 'Content-Type: application/json' \
--data-raw '{
"originalReferenceNo":"ZSE44L79LN",
"originalPartnerReferenceNo":"2020102900000000000001",
"originalExternalId":"30443786930722726463280097920912",
"serviceCode" : "47",
"merchantId":"A01",
"additionalInfo":{
"tip": "0.00"
}
}'
Request Header
Name | Type | Requirement | Description |
---|---|---|---|
Content-Type | String | Mandatory | Tipe konten, data yang dikirim harus selalu application/json |
Authorization | String | Mandatory | Bearer token dari hasil generate dari API Token B2B Access Token Request |
X-TIMESTAMP | String | Mandatory | Waktu lokal Merchant/Partner dalam format yyyy-MM-ddTHH:mm:ssTZD. Value yang digunakan harus sama dengan value pada signature-auth, token B2B Access Token Request, dan signature-service |
X-SIGNATURE | String | Mandatory | Signature untuk QR Query Payment hasil dari generate Signature Service. |
X-PARTNER-ID | String | Mandatory | Client ID Merchant/Partner yang didapat dari AstraPay |
X-EXTERNAL-ID | String | Mandatory | Numeric string unik yang hanya dapat digunakan satu kali dalam satu hari. Format yang digunakan adalah: 36 Random Numeric String |
CHANNEL-ID | String | Mandatory | ID dari service QR Query Payment (00551) |
Request Body
Name | Type | Requirement | Description |
---|---|---|---|
originalReferenceNo | String | Mandatory | Id transaksi dari AstraPay Ketika generate qr mpm berhasil (AstraPay Bill Number) |
originalPartnerReferenceNo | String | Mandatory | Id transaksi dari Merchant/Partner Ketika generate qr mpm berhasil (Merchant/Partner Bill Number) |
originalExternalId | String | Optional | External- ID pada header message |
serviceCode | String | Mandatory | Indikasi tipe transaksi (service code dari original transaction request) |
merchantId | String | Mandatory | ID Merchant |
additionalInfo | Object | Optional | Informasi Tambahan. Terdapat subfield yang bisa dilihat di kolom di bawah. |
tip | String | Mandatory | (ISO4217) Jumlah Net dari tip. Contoh: jika total tip IDR10.000, maka harus ditulis 10000.00 (2 nol di belakang koma). Jika tip tidak ada maka cantumkan “0.00”. |
Response Body
Contoh Response
{
"responseCode": "2005100",
"responseMessage": "Successful",
"originalReferenceNo": "ZSE44L79LN",
"originalPartnerReferenceNo": "2020102900000000006695",
"originalExternalId": null,
"serviceCode": "47",
"latestTransactionStatus": "00",
"transactionStatusDesc": "SUCCESS",
"paidTime": "2022-10-12T11:09:10.912333",
"amount": {
"value": "1.00",
"currency": "IDR"
},
"terminalId": "5142",
"additionalInfo": {
"tip": "0.00"
"customerPan": "9360082230001999476"
"customerReferenceNumber": "497217068001"
"issuerName": "ASTRAPAY"
}
}
Field | Type | Requirement | Description |
---|---|---|---|
responseCode | String | Mandatory | Lihat response list |
responseMessage | String | Mandatory | Lihat response list |
originalReferenceNo | String | Mandatory | Id transaksi dari AstraPay Ketika generate qr mpm berhasil (AstraPay Bill Number) |
originalPartnerReferenceNo | String | Mandatory | Id transaksi dari Merchant/Partner Ketika generate qr mpm berhasil (Merchant/Partner Bill Number) |
originalExternalId | String | Optional | External- ID pada header message |
serviceCode | String | Mandatory | Indikasi tipe transaksi (service code dari original transaction request) |
latestTransactionStatus | String | Mandatory | 00 - Success 01 - Initiated 02 - Paying 03 - Pending 04 - Refunded 05 - Canceled 06 - Failed 07 - Not found |
transactionStatusDesc | String | Optional | Description status transaction |
paidTime | String | Conditional | Tanggal transaksi |
amount | Object | Optional | Jumlah Transaksi Net yang diberikan. Amount memiliki dua sub-field yang tertera di dua kolom di bawah. |
value | String | Mandatory | Jumlah Net dari transaksi. Contoh: total transaksi IDR10.000, menjadi 10000.00 (2 nol di belakang koma) |
currency | String | Mandatory | Kode mata uang berdasarkan ISO (IDR) |
terminalId | String | Optional | Terminal ID dari merchant |
additionalInfo | Object | Optional | Informasi Tambahan. Terdapat subfield yang bisa dilihat di kolom di bawah. |
tip | String | Mandatory | (ISO4217) Jumlah Net dari tip. Contoh: jika total tip IDR10.000, maka harus ditulis 10000.00 (2 nol di belakang koma). Jika tip tidak ada maka cantumkan “0.00”. |
customerPan | String | Mandatory | Identifikasi nomor pelanggan yang melakukan pembayaran melalui QRIS |
customerReferenceNumber | String | Mandatory | Nomor transaksi yang di-generate oleh pihak Issuer |
issuerName | String | Mandatory | Informasi nama issuer. |
Payment Notification (Callback)
Parameter callback pada request akan digunakan oleh AstraPay untuk konfirmasi pembayaran yang telah dilakukan oleh customer Anda. Pada saat customer berhasil melakukan pembayaran, AstraPay akan mengirimkan HTTP POST yang menyertakan hasil pembayaran suatu tagihan dari customer. Anda perlu menyediakan halaman untuk menerima request callback tersebut. Agar dapat memproses hasil transaksi yang telah dilakukan oleh customer.
Request Header
Name | Type | Requirement | Description |
---|---|---|---|
Content-Type | String | Mandatory | Tipe konten, data yang dikirim harus selalu application/json |
Authorization | String | Mandatory | Bearer token dari hasil generate dari API Token B2B Access Token Request |
X-TIMESTAMP | String | Mandatory | Waktu lokal Merchant/Partner dalam format yyyy-MM-ddTHH:mm:ssTZD. Value yang digunakan harus sama dengan value pada signature-auth, token B2B Access Token Request, dan signature-service |
X-SIGNATURE | String | Mandatory | Signature untuk QR Query Payment hasil dari generate Signature Service. |
X-PARTNER-ID | String | Mandatory | Client ID Merchant/Partner yang didapat dari Partner/Merchant |
X-EXTERNAL-ID | String | Mandatory | Numeric string unik yang hanya dapat digunakan satu kali dalam satu hari. Format yang digunakan adalah: 36 Random Numeric String |
CHANNEL-ID | String | Mandatory | ID dari service QR Query Payment (00752) |
Protocol dan Service Address
Item | Value |
---|---|
Service Code | 52 |
Channel ID | 00752 |
Protocol | HTTPS |
Verb | POST |
URL | [host]:[port]/snap/v1.0/qr/qr-mpm-notify |
Request Body
Contoh cURL Callback
POST …/snap/v1.0/qr/qr-mpm-notify HTTP/1.2
Content-type: application/json
Authorization: Bearer gp9HjjEj813Y9JGoqwOeOPWbnt4CUpvIJbU1mMU4a11MNDZ7Sg5u9a"
X-TIMESTAMP: 2020-12-23T08:46:11+07:00
X-SIGNATURE:
85be817c55b2c135157c7e89f52499bf0c25ad6eeebe04a986e8c8625
61b19a5
X-PARTNER-ID: 82150823919040624621823174737537
X-EXTERNAL-ID: 41807553358950093184162180797837
CHANNEL-ID: 00752
{
"originalReferenceNo":"2020102977770000000009",
"originalPartnerReferenceNo":"2020102900000000000001",
"latestTransactionStatus":"00",
"transactionStatusDesc":"SUCCESS",
"amount":{
"value":"12345678.00",
"currency":"IDR"
},
"additionalInfo":{
"tip": "100.00"
}
}
Field | Type | Requirement | Description |
---|---|---|---|
originalPartnerReferenceNo | String | Mandatory | Id transaksi dari Merchant/Partner (Merchant/Partner Transaction Id) |
originalReferenceNo | String | Mandatory | AstraPay Transaction ID |
latestTransactionStatus | String | Mandatory | 00 - Success 01 - Initiated 02 - Paying 03 - Pending 04 - Refunded 05 - Canceled 06 - Failed 07 - Not found |
transactionStatusDesc | String | Optional | Deskripsi status transaksi |
amount | Object | Optional | Jumlah Transaksi Net yang diberikan. Amount memiliki dua sub-field yang tertera di dua kolom di bawah. |
value | String | Mandatory | Jumlah Net dari transaksi. Contoh: total transaksi IDR10.000, menjadi 10000.00 (2 nol di belakang koma) |
currency | String | Mandatory | Kode mata uang berdasarkan ISO (IDR) |
additionalInfo | Object | Optional | Informasi Tambahan. Terdapat subfield yang tertera di kolom di bawah. |
tip | String | Mandatory | (ISO4217) Jumlah Net dari tip. Contoh: jika total tip IDR10.000, maka harus di tulis 10000.00 (2 nol di belakang koma). Jika tip tidak ada maka cantumkan “0.00”. |
Response Body
Contoh Response
{
"responseCode":"2005200",
"responseMessage":"Request has been processed successfully",
"additionalInfo":{
"tip":"10.00",
}
}
Field | Type | Requirement | Description |
---|---|---|---|
responseCode | String | Mandatory | Lihat response list |
responseMessage | String | Mandatory | Lihat response list |
additionalInfo | Object | Optional | Informasi Tambahan. Terdapat subfield yang bisa dilihat di kolom di bawah. |
tip | String | Mandatory | (ISO4217) Jumlah Net dari tip. Contoh: jika total tip IDR10.000, maka harus ditulis 10000.00 (2 nol di belakang koma). Jika tip tidak ada maka cantumkan “0.00”. |
Response List
Response Code | Service Code | Case Code | Response Message | Description |
---|---|---|---|---|
200 OK | any | 00 | Successful | Sukses melakukan request. |
400 Bad Request | any | 01 | Invalid Field Format | Format field tidak benar. |
400 Bad Request | any | 02 | Invalid mandatory field {fieldName} | Data yang dibutuhkan tidak ada atau tidak lengkap. |
409 Duplicate | 47 | 01 | Duplicate partnerReferenceNo | partnerReferenceNo sudah ada pada sistem. |
404 Not Found | 47 | 17 | Invalid Terminal | Terminal code tidak ada di sistem. |
404 Not Found | 51 | 08 | Invalid Merchant | Merchant id tidak ada di sistem atau status merchant abnormal. |
500 Internal Server Error | Respons tidak valid dari Back-end atau Kesalahan Tidak Terdefinisi |
Paylater
Selamat datang di dokumentasi Astrapay Paylater
Auto-Preferred User Classic
Flow Diagram Auto-Preferred
Berikut adalah alur gambaran proses auto-preferred customer Astrapay
Authorization
Credential yang dibutuhkan yaitu :
- Client ID : Client Identifier yang bersifat unik yang diterbitkan oleh Astrapay untuk Maucash
- IP Whitelist : IP yang dimiliki oleh Maucash yang di whitelist
API Paylater Registration
API yang digunakan untuk melakukan update status registrasi paylater di Astrapay
URL for Request
Contoh cURL Registration Paylater
curl --location 'https://paylatersvc.astrapay.com/paylater-service/partners/links' \
--header 'x-client-id: xxx14f325-x5x5-xx7x-bxxb-8xxxf6x1x12a' \
--header 'Content-Type: application/json' \
--data '{
"phoneNumber" : "081234567890",
"status" : "ACTIVE",
"rejectReason" : "Data telah sesuai",
"reapplyDate" : "2022-10-17"
}'
Method | Environment | Value |
---|---|---|
POST | Testing | https://paylatersvc-uat.astrapay.com/paylater-service/partners/links |
Production | https://paylatersvc.astrapay.com/paylater-service/partners/links |
Header for Request
Key | Description | Environment |
---|---|---|
x-client-id | Testing | Identifier yang diberikan oleh Astrapay |
Production |
JSON Body
Sample Response 200 OK
{
"phoneNumber" : "081234567890",
"status" : "ACTIVE",
"rejectReason" : "Data telah sesuai",
"reapplyDate" : "2022-10-17"
}
Sample Response 400 FAILED
{
"phoneNumber" : "081234567890",
"message" : "User status is unknown",
"error" : null
}
Body for request *field required
No | Field | Type | Length | Description |
---|---|---|---|---|
1 | phoneNumber* | String | 13 | No telepon yang digunakan oleh customer untuk registrasi |
2 | status | String | 255 | Status paylater customer (ACTIVE/REJECTED/BLOCKED) |
3 | rejectReason | String | 255 | Alasan registrasi customer ditolak/diblock |
4 | reapplyDate | Date | Tanggal customer dapat melakukan registrasi kembali |
Keterangan value field 'message' di Response 400
No | Message | Description |
---|---|---|
1 | User status is unknown | Request status yang dikirim tidak sesuai |
API Callback Registrasion
API ini digunakan untuk mengirimkan NIK dan status registrasi user ke Astrapay
(will be updated soon)
API Share Data Customer ke Astrapay Auto-Preferred
API untuk mengirimkan data KYC customer yang pengajuan paylaternya telah di approved oleh Maucash
URL for Request
Method | Environment | Value |
---|---|---|
POST | Testing | https://kyc-uat-api.astrapay.com/kyc-service/kycs-partner |
Production | https://kyc-api.astrapay.com/kyc-service/kycs-partner |
Header for Request
Key | Environment | Description |
---|---|---|
x-client-id | Testing | Identifier yang diberikan oleh Astrapay |
Production |
JSON Body
Body for request *field required
Contoh cURL Share Data
curl --location --request POST 'https://kyc-uat-api.astrapay.com/kyc-service/kycs-partner' \
--header 'x-client-id: 8174f325-2565-4b7b-be1b-888df662367c' \
--header 'Content-Type: application/json' \
--data-raw '{
"phoneNumber" : "082112344321",
"name" : "BERN RIANTOSE",
"identificationDocumentType" : "KTP",
"identificationDocumentNumber" : "321423912332",
"placeOfBirth" : "Jakarta",
"dateOfBirth" : "1991-10-28",
"nationality" : "WNI",
"gender" : "LAKI-LAKI",
"profession" : "Wiraswasta",
"country" : "Indonesia",
"province" : "Jawa Tengah",
"city" : "Jepara",
"district" : "Kalinyamatan",
"village" : "Kriyan",
"address" : "Jalan Makmur Raya",
"rtNumber" : "04",
"rwNumber" : "05",
"postalCode" : "59462",
"regionId" : "1102",
"kycPhoto" : [
{
"type" : "KTP",
"file" : base64
},
{
"type" : "KTP",
"file" : base64
}
]
}'
No | Field | Type | Length | Description |
---|---|---|---|---|
1 | phoneNumber* | String | 13 | No Telepon yang digunakan customer untuk registrasi |
2 | name* | String | 225 | Nama customer sesuai KTP |
3 | identificationDocumentType* | String | 225 | Tipe dokumen (diisi: KTP) |
4 | identificationDocumentNumber* | String | 225 | Nomor KTP customer |
5 | placeOfBirth* | String | 255 | Tempat lahir sesuai KTP |
6 | dateOfBirth* | 255 | String | Tanggal lahir sesuai KTP |
7 | nationality* | String | 255 | Kewarganegaraan (diisi: WNI) |
8 | gender* | String | 225 | Jenis kelamin customer sesuai KTP (PEREMPUAN/LAKI-LAKI) |
9 | profession* | String | 255 | Pekerjaan/profesi customer |
10 | country* | String | 255 | Negara sesuai KTP |
11 | province* | String | 255 | Provinsi sesuai KTP |
12 | city | String | 255 | Kota sesuai KTP |
13 | district* | String | 255 | Kecamatan sesuai KTP |
14 | village* | String | 255 | Provinsi sesuai KTP |
15 | address* | String | 255 | Kelurahan/Desa sesuai KTP |
16 | rtNumber* | String | 255 | Alamat sesuai KTP |
17 | rwNumber* | String | 255 | Nomor RT sesuai KTP |
18 | postalCode* | String | 255 | Nomor RT sesuai KTP |
19 | regionId* | String | 255 | Kode Pos customer sesuai alamat KTP |
20 | kycPhoto* | ArrayObject | File KTP dan SELFIE customer | |
21 | file* | Base64 | Tipe foto/dokumen yang dikirim (KTP/SELFIE) | |
22 | type* | String | 255 | Foto yang sudah di convert menjadi base64 |
Response (JSON String)
Response ini berupa informasi tentang berhasil tidaknya auto-preferred customer yang bersangkutan di Astrapay
Sample Response 200 OK
{
"phoneNumber" : "082112344321",
"status" : "SUCCESS",
"note" : "",
"upgradeMethod" : "MAUCASH"
}
Sample Response 400 FAILED
{
"phoneNumber" : "082112344321",
"status" : "FAILED",
"note" : "NIK already exist",
"upgradeMethod" : "MAUCASH"
}
No | Field | Type | Description |
---|---|---|---|
1 | phoneNumber* | String | No Telepon yang digunakan customer untuk registrasi |
2 | status* | String | Status auto-preferred (SUCCESS/FAILED) |
3 | note | String | Informasi alasan gagalnya auto-preferred di Astrapay (*field ini hanya akan berisi jika autopreferred gagal) |
4 | upgradeMethod* | String | Informasi tentang partner yang telah mengirimkan data KYC (MAUCASH) |
Keterangan value field 'note' di Response 400
No | Note | Description |
---|---|---|
1 | NIK already exist | Nomor KTP yang dikirimkan sudah digunakan oleh customer lain di Astrapay |
2 | Region Not Found | Data region yang dikirimkan tidak ditemukan di Astrapay |
3 | Profession Not Found | Data profession yang dikirimkan tidak ditemukan di Astrapay |
4 | User Not Found | Nomor telepon customer yang dikirimkan tidak ditemukan di Astrapay |
5 | Mandatory field must be filled | Salah satu field mandatory tidak diisi atau kosong |
API Reminder Repayment
API yang digunakan untuk mengirimkan notifikasi reminder pembayaran tagihan MauPaylater
URL for request
Method | Environment | Value |
---|---|---|
POST | Testing | https://paylatersvc-uat.astrapay.com/paylater-service/notification |
Production | https://paylatersvc.astrapay.com/paylater-service/notification |
Header for request
Key | Description | Environment |
---|---|---|
x-client-id | Testing | Identifier yang diberikan oleh Astrapay |
Production |
JSON Body
Sample Body Request
{
"action" : "REPAYMENT_REMINDER",
"phoneNumber" : "087888784321",
"data" : [
{
"key": "status",
"value": "LATE" }
]
}
Sample Response Body
{
"phoneNumber" : "087888784321",
"action" : "REPAYMENT_REMINDER"
}
Body for request *field required
No | Field | Type | Length | Description |
---|---|---|---|---|
1 | action | String | 255 | Keterangan untuk tipe notifikasi (*permanent : REPAYMENT_REMINDER ) |
2 | phoneNumber | String | 13 | No telepon yang digunakan oleh customer untuk registrasi |
3 | data | ArrayObject | ||
key | String | 255 | Kategory dari value (*permanent : status ) |
|
value | String | 255 | Status reminder tagihan user; 1. TODAY, 2. ONE_DAY, 3. TWO_DAYS, 4. LATE |
Customer Top Up
SNAP Introduction
Selamat datang di dokumentasi AstraPay Customer Top Up yang sesuai SNAP BI.
Dokumentasi ini menjelaskan procedure acceptance untuk implementasi API Customer Top Up dari perspektif Merchant.
Saat ini, AstraPay Customer Top Up menyediakan metode integrasi melalui SNAP AstraPay API. Dimana SNAP (Standar Nasional Open API Pembayaran) adalah standar Open API yang ditetapkan Bank Indonesia agar menciptakan industri sistem pembayaran yang lebih maju di Indonesia. Dokumen integrasi API Customer Top Up yang digunakan AstraPay merujuk pada bagian Transfer Kredit dalam dokumentasi SNAP BI.
Berikut adalah beberapa API yang disediakan, yaitu:
- SNAP Keamanan (Authorization)
- API Account Inquiry - Customer Top Up (Inquiry)
- API Customer Top Up (Payment)
- API Customer Top Up Inquiry Status (Check Status)
Update terakhir : 30 Mei 2024
Quick Start
Pada bagian ini dijelaskan mengenai tahapan integrasi dengan Merchant mulai dari Merchant mengajukan kerjasama hingga produk sudah bisa live di production.
Keterangan:
1. Merchant yang ingin terintegrasi dengan AstraPay perlu melakukan pengajuan terlebih dahulu dengan partnership AstraPay untuk dapat mengetahui apa saja yang diperlukan untuk dapat memenuhi requirements yang dibutuhkan.
2. Merchant menyiapkan dokumen yang diminta oleh partnership AstraPay dan mengirimkannya untuk dapat didaftarkan.
3. Dokumen yang dikirim oleh Merchant perlu di verifikasi oleh partnership AstraPay agar dapat memenuhi requirements pendaftaran.
4. Tim partnership AstraPay akan berkoordinasi dengan tim developer AstraPay untuk dapat memberi panduan integrasi.
5. Merchant melakukan development untuk integrasi sesuai dengan panduan yang diberikan AstraPay.
6. Merchant perlu menginfokan pihak AstraPay apabila telah menyelesaikan proses development untuk integrasi.
7. Pihak AstraPay akan mengirimkan dokumen terkait proses integrasi yang perlu dilengkapi oleh Merchant sebagai alat dokumentasi.
8. Dokumen yang telah dilengkapi oleh Merchant akan dilakukan pengecekan oleh tim AstraPay untuk memastikan proses integrasi telah dilakukan oleh tim Merchant sesuai dengan panduan yang telah dibuat.
9. Tim AstraPay akan menginfokan terkait kelanjutan proses integrasi untuk environment production & akses dashboard yang akan diberikan kepada Merchant.
10. Setelah menyelesaikan proses integrasi, Merchant perlu menentukan bersama pihak AstraPay terkait jadwal live production.
11. Aplikasi live production sesuai kesepakatan kedua pihak.
Environment
Item | Value |
---|---|
Development | https://sandbox.astrapay.com |
Production | URL production akan diinfokan setelah UAT selesai dilakukan |
Tahap Integrasi Development
Dibawah ini adalah hal yang perlu disiapkan dan diketahui sebelum melakukan development untuk melakukan integrasi. Berikut persiapan credential yang diperlukan untuk komunikasi antar penyedia (AstraPay) dan pengguna (Merchant/Partner):
- Client ID (X-Client-Key), dibuat oleh penyedia dan diberikan kepada pengguna. Dibutuhkan untuk menandakan Merchant yang mengirim request.
- Client Secret, dibuat oleh penyedia dan diberikan kepada pengguna. Dibutuhkan untuk menandakan Merchant yang mengirim request.
- Menghubungi pihak AstraPay.
- Merchant mendapatkan credential Client ID dan Client Secret melalui email yang tertera di formulir pendaftaran.
- Public Key, dibuat oleh pengguna dan diberikan kepada penyedia.
- Private Key, dibuat oleh pengguna dan disimpan oleh pengguna sendiri. Cara Generate Public Key dan Private Key
- API yang membutuhkan Signature Auth, Signature Service, Token B2B, dan Token B2B2C sesuai pada sequence diagram, implementasinya dapat dilihat disini.
Cara mendapatkan Client ID dan Client Secret:
SNAP Keamanan (Authorization)
Klik disini untuk detail informasi SNAP Keamanan AstraPay.
Penggunaan
Pada bagian ini menjelaskan mengenai penggunaan dari API Customer Top Up.
Use Case Diagram
Berikut adalah use case diagram untuk menggambarkan flow service Customer Top Up:
API Account Inquiry - Customer Top Up
Protocol & Service Address
Item | Value |
---|---|
Name | Account Inquiry - Customer Top Up |
Description | Request yang dikirim oleh Partner untuk memperoleh informasi customer |
URI | [hostname]/disbursement-service/snap/v1.0/emoney/account-inquiry |
Transport Protocol / HTTP Method | HTTPS / POST |
Message Format | JSON |
Service Code | 37 |
Account Inquiry - Customer Top Up Request Header
Authorization : Bearer gp9HjjEj813Y9JGoqwOeOPWbnt4CUpvIJbU1mMU4a11MNDZ7Sg5u9a
X-SIGNATURE : 010cb949c2d087859b1d5ce96cbcc2be599d38c98da227dce6385792868cbdcb
X-TIMESTAMP : 2023-09-20T17:00:00.939
X-PARTNER-ID : 19e51b86-c5ae-4994-8a68-5ad251e86bac
X-EXTERNAL-ID : 2023092000000001
CHANNEL-ID : 01437
Parameter | Requirement | Description |
---|---|---|
Authorization | Mandatory | Access token yang diberikan oleh AstraPay ketika partner melakukan generate token. |
X-SIGNATURE | Mandatory | Signature yang dibuat oleh partner. |
X-TIMESTAMP | Mandatory | Merupakan timestamp user melakukan topup dengan menggunakan format ISO8601. |
X-PARTNER-ID | Mandatory | Merupakan kode partner yang diberikan oleh AstraPay. |
X-EXTERNAL-ID | Mandatory | Kode transaksi partner yang bersifat unik setiap harinya. |
CHANNEL-ID | Mandatory | ID dari service yang mengakses API Account Inquiry - Customer Top Up (01437). |
X-LATITUDE | Optional | Kode latitude darimana request berasal. |
X-LONGITUDE | Optional | Kode longitude darimana request berasal. |
Account Inquiry - Customer Top Up Request Body
{
"partnerReferenceNo": "23092915000075679102",
"customerNumber": "087878878878",
"amount": {
"value": "11000.00",
"currency": "IDR"
},
"transactionDate": "2023-09-29T15:00:00+07:00",
"additionalInfo": {
"channelCode" : "APBANK"
}
}
Parameter | Type | Length | Requirement | Description |
---|---|---|---|---|
partnerReferenceNo | String | 64 | Mandatory | Kode Identifikasi yang dikirimkan oleh partner / pengguna API. Kode ini digunakan sebagai kode unik untuk melakukan payment. |
customerNumber | String | 32 | Mandatory | Nomor HP Customer |
amount | Object | Mandatory | Informasi terkait nominal yang akan dibayarkan ketika melakukan top up. | |
value | String | 16,2 | Mandatory | Value transaksi, jika currency dalam IDR maka tambahkan 2 digit desimal. ex : IDR10.000 → 10000.00 |
currency | String | 3 | Mandatory | ex : IDR |
transactionDate | String | 25 | Optional | Tanggal transaksi dilakukan dengan format ISO-8601. |
additionalInfo | Object | Optional | Informasi tambahan jika ada. | |
channelCode | String | Conditional | Kode Channel Partner yang didaftarkan oleh AstraPay. Diperlukan ketika partner ingin mengidentifikasi transaksi berdasarkan Channel/Bank yang tercatat di AstraPay. |
Account Inquiry - Customer Top Up Response Body
{
"responseCode":"2003700",
"responseMessage":"Successful",
"referenceNo":"24032813211419996331",
"partnerReferenceNo":"23092915000075679102",
"customerNumber":"087878878878",
"customerName":"ASTRAPAY CUSTOMER",
"amount":{
"value":"11000.00",
"currency":"IDR"
},
"feeAmount":{
"value":"1000.00",
"currency":"IDR"
},
"minAmount":{
"value":"10000.00",
"currency":"IDR"
},
"maxAmount":{
"value":"10000000.00",
"currency":"IDR"
},
"customerMonthlyInLimit": 40000000.00,
"feeType":"Admin Fee",
"additionalInfo":{
}
}
Parameter | Type | Length | Requirement | Description |
---|---|---|---|---|
responseCode | String | 7 | Mandatory | Response Code, untuk deskripsi dapat dilihat pada tabel response code di bawah. |
responseMessage | String | 150 | Mandatory | Merupakan deskripsi dari response code yang diberikan. |
referenceNo | String | 64 | Optional | Kode identifikasi transaksi yang akan diberikan Astrapay. |
partnerReferenceNo | String | 64 | Mandatory | Kode identifikasi yang dikirimkan oleh partner / pengguna, akan dikembalikan jika partner / pengguna mengirimkan valuenya ketika request. Kode ini digunakan sebagai kode unik untuk melakukan payment. |
sessionId | String | 25 | Optional | Session Id untuk transaksi tersebut |
customerNumber | Sting | 64 | Mandatory | Informasi Nomor HP Customer yang terdaftar. |
customerName | Sting | 255 | Mandatory | Informasi nama customer, untuk saat ini akan mengembalikan ASTRAPAY CUSTOMER. |
amount | Object | Optional | Informasi terkait nominal yang akan dibayarkan ketika melakukan top up. | |
value | String | 16,2 | Mandatory | Value transaksi, jika currency dalam IDR maka tambahkan 2 digit desimal. ex : IDR10.000 → 10000.00 |
currency | String | 3 | Mandatory | ex : IDR |
feeAmount | Object | Optional | Informasi terkait biaya administrasi yang akan dikenakan kepada customer untuk setiap transaksi top up yang dilakukannya. | |
value | String | 16,2 | Mandatory | Value transaksi, jika currency dalam IDR maka tambahkan 2 digit desimal. ex : IDR10.000 → 10000.00 |
currency | String | 3 | Mandatory | ex : IDR |
minAmount | Object | Optional | Informasi terkait limit minimal top up customer. | |
value | String | 16,2 | Mandatory | Value transaksi, jika currency dalam IDR maka tambahkan 2 digit desimal. ex : IDR10.000 → 10000.00 |
currency | String | 3 | Mandatory | ex : IDR |
maxAmount | Object | Optional | Informasi terkait limit maksimal top up yang dapat dilakukan terhadap seorang customer. | |
value | String | 16,2 | Mandatory | Value transaksi, jika currency dalam IDR maka tambahkan 2 digit desimal. ex : IDR10.000 → 10000.00 |
currency | String | 3 | Mandatory | ex : IDR |
customerMonthlyInLimit | Numeric | 17 | Optional | Informasi terkait limit maksimal customer melakukan top up setiap bulan. |
feeType | String | 25 | Optional | Tipe fee yang dikenakan |
additionalInfo | Object | Optional | Informasi Tambahan yang dibutuhkan partner / pengguna API |
API Customer Top Up
Protocol & Service Address
Item | Value |
---|---|
Name | Customer Top-Up |
Description | Request yang dikirim oleh Partner untuk melakukan top up saldo customer |
URI | [hostname]/disbursement-service/snap/v1.0/emoney/topup |
Transport Protocol / HTTP Method | HTTPS / POST |
Message Format | JSON |
Service Code | 38 |
Customer Top Up Request Header
Authorization : Bearer gp9HjjEj813Y9JGoqwOeOPWbnt4CUpvIJbU1mMU4a11MNDZ7Sg5u9a
X-SIGNATURE : 010cb949c2d087859b1d5ce96cbcc2be599d38c98da227dce6385792868cbdcb
X-TIMESTAMP : 2023-09-20T17:00:00.939
X-PARTNER-ID : 19e51b86-c5ae-4994-8a68-5ad251e86bac
X-EXTERNAL-ID : 2023092000000002
CHANNEL-ID : 01538
Parameter | Requirement | Description |
---|---|---|
Authorization | Mandatory | Access token yang diberikan oleh AstraPay ketika partner melakukan generate token. |
X-SIGNATURE | Mandatory | Signature yang dibuat oleh partner. |
X-TIMESTAMP | Mandatory | Merupakan timestamp user melakukan topup dengan menggunakan format ISO8601. |
X-PARTNER-ID | Mandatory | Merupakan kode partner yang diberikan oleh AstraPay. |
X-EXTERNAL-ID | Mandatory | Kode transaksi partner yang bersifat unik setiap harinya. |
CHANNEL-ID | Mandatory | ID dari service yang mengakses API Customer Top Up (01538). |
X-LATITUDE | Optional | Kode latitude darimana request berasal. |
X-LONGITUDE | Optional | Kode longitude darimana request berasal. |
Customer Top Up Request Body
{
"partnerReferenceNo":"23092915000075679102",
"customerNumber":"087878878878",
"customerName":"ASTRAPAY CUSTOMER",
"amount":{
"value":"11000.00",
"currency":"IDR"
},
"feeAmount":{
"value":"1000.00",
"currency":"IDR"
},
"transactionDate":"2023-09-29T15:00:59+07:00",
"notes":"notes test",
"additionalInfo":{
"channelCode": "APBANK"
}
}
Parameter | Type | Length | Requirement | Description |
---|---|---|---|---|
partnerReferenceNo | String | 64 | Mandatory | Kode Identifikasi yang dikirimkan oleh partner / pengguna API. Kode yang dikirimkan adalah kode unik yang didapatkan setelah partner berhasil melakukan inquiry. |
customerNumber | String | 32 | Mandatory | Infomasi Nomor HP Customer yang terdaftar. |
customerName | String | 255 | Optional | Informasi nama customer, untuk saat ini akan berisi ASTRAPAY CUSTOMER. |
amount | Object | Mandatory | Informasi terkait nominal yang akan dibayarkan ketika melakukan top up. Object harus sama dengan response amount yang diberikan saat inquiry. |
|
value | String | 16,2 | Mandatory | Value transaksi, jika currency dalam IDR maka tambahkan 2 digit desimal. ex : IDR10.000 → 10000.00 |
currency | String | 3 | Mandatory | ex : IDR |
feeAmount | Object | Mandatory | Informasi terkait biaya administrasi yang akan dikenakan kepada customer untuk setiap transaksi top up yang dilakukannya. Object harus sama dengan response feeAmount yang diberikan saat inquiry. |
|
value | String | 16,2 | Mandatory | Value transaksi, jika currency dalam IDR maka tambahkan 2 digit desimal. ex : IDR10.000 → 10000.00 |
currency | String | 3 | Mandatory | ex : IDR |
transactionDate | String | 25 | Optional | Tanggal transaksi dilakukan dengan format ISO-8601 |
sessionId | String | 25 | Optional | Session Id untuk transaksi tersebut |
categoryId | Numeric | 10 | Optional | - |
notes | String | 255 | Optional | Informasi terkait notes transaksi tersebut. |
additionalInfo | Object | Optional | Informasi tambahan jika ada. | |
channelCode | String | Conditional | Kode Channel Partner yang didaftarkan oleh AstraPay. Diperlukan ketika partner ingin mengidentifikasi transaksi berdasarkan Channel/Bank yang tercatat di AstraPay. |
Customer Top Up Response Body
{
"responseCode":"2003800",
"responseMessage":"Successful",
"referenceNo":"24032813211419996331",
"partnerReferenceNo":"23092915000075679102",
"customerNumber":"087878878878",
"amount":{
"value":"10000.00",
"currency":"IDR"
},
"additionalInfo":{
}
}
Parameter | Type | Length | Requirement | Description |
---|---|---|---|---|
responseCode | String | 7 | Mandatory | Response Code, untuk Deskripsi dapat dilihat pada tabel response code di bawah. |
responseMessage | String | 150 | Mandatory | Merupakan deskripsi dari response code yang diberikan. |
referenceNo | String | 64 | Optional | Kode identifikasi transaksi yang akan diberikan astrapay. |
partnerReferenceNo | String | 64 | Mandatory | Kode identifikasi yang dikirimkan oleh partner / pengguna, akan dikembalikan jika partner / pengguna mengirimkan valuenya ketika request. |
sessionId | String | 25 | Optional | Session Id untuk transaksi tersebut |
customerNumber | Sting | 64 | Mandatory | Informasi Nomor HP Customer yang terdaftar. |
amount | Object | Mandatory | Informasi terkait saldo yang akan diterima oleh customer ketika melakukan top up. | |
value | String | 16,2 | Mandatory | Value transaksi, jika currency dalam IDR maka tambahkan 2 digit desimal. ex : IDR10.000 → 10000.00 |
currency | String | 3 | Mandatory | ex : IDR |
additionalInfo | Object | Optional | Informasi tambahan yang dibutuhkan partner / pengguna API |
API Customer Top Up Inquiry Status
Protocol & Service Address
Item | Value |
---|---|
Name | Customer Top Up Inquiry Status |
Description | Request yang dikirim oleh Partner untuk melakukan check status top up saldo customer |
URI | [hostname]/disbursement-service/snap/v1.0/emoney/topup-status |
Transport Protocol / HTTP Method | HTTPS / POST |
Message Format | JSON |
Service Code | 39 |
Customer Top Up Inquiry Status Request Header
Authorization : Bearer gp9HjjEj813Y9JGoqwOeOPWbnt4CUpvIJbU1mMU4a11MNDZ7Sg5u9a
X-SIGNATURE : 010cb949c2d087859b1d5ce96cbcc2be599d38c98da227dce6385792868cbdcb
X-TIMESTAMP : 2023-09-20T17:00:00.939
X-PARTNER-ID : 19e51b86-c5ae-4994-8a68-5ad251e86bac
X-EXTERNAL-ID : 2023092000000003
CHANNEL-ID : 01639
Parameter | Requirement | Description |
---|---|---|
Authorization | Mandatory | Access token yang diberikan oleh AstraPay ketika partner melakukan generate token. |
X-SIGNATURE | Mandatory | Signature yang dibuat oleh partner. |
X-TIMESTAMP | Mandatory | Merupakan timestamp user melakukan topup dengan menggunakan format ISO8601. |
X-PARTNER-ID | Mandatory | Merupakan kode partner yang diberikan oleh AstraPay. |
X-EXTERNAL-ID | Mandatory | Kode transaksi partner yang bersifat unik setiap harinya. |
CHANNEL-ID | Mandatory | ID dari service yang mengakses API Customer Top Up Inquiry Status (01639). |
X-LATITUDE | Optional | Kode latitude darimana request berasal. |
X-LONGITUDE | Optional | Kode longitude darimana request berasal. |
Customer Top Up Inquiry Status Request Body
{
"originalPartnerReferenceNo":"23092915000075679102",
"serviceCode":"38",
"additionalInfo":{
}
}
Parameter | Type | Length | Requirement | Description |
---|---|---|---|---|
originalPartnerReferenceNo | String | 64 | Mandatory | Kode Identifikasi yang dikirimkan oleh partner / pengguna API pada request inquiry atau payment. |
originalReferenceNo | String | 64 | Optional | Kode Identifikasi yang diterima oleh partner / pengguna API pada saat melakukan inquiry atau payment. |
originalExternalId | String | 64 | Optional | Header X-EXTERNAL-ID yang dikirim oleh partner / pengguna API ketika melakukan inquiry atau payment. |
serviceCode | String | 2 | Mandatory | Service code yang ingin dilakukan pengecekan, dalam kasus ini maka: 38 → Pengecekan request payment |
additionalInfo | Object | Optional | Informasi Tambahan dari Partner / Pengguna API |
Customer Top Up Inquiry Status Response Body
{
"responseCode":"2003900",
"responseMessage":"Successful",
"originalPartnerReferenceNo":"23092915000075679102",
"originalReferenceNo":"24032813211419996331",
"serviceCode":"38",
"amount":{
"value":"10000.00",
"currency":"IDR"
},
"latestTransactionStatus":"00",
"additionalInfo":{
}
}
Parameter | Type | Length | Requirement | Description |
---|---|---|---|---|
responseCode | String | 7 | Mandatory | Response Code, untuk Deskripsi dapat dilihat pada tabel response code dibawah. |
responseMessage | String | 150 | Mandatory | Merupakan deskripsi dari response code yang diberikan. |
originalPartnerReferenceNo | String | 64 | Mandatory | Kode Identifikasi yang dikirimkan oleh partner / pengguna API pada request inquiry atau payment. |
originalReferenceNo | String | 64 | Optional | Kode Identifikasi yang diterima oleh partner / pengguna API pada saat melakukan inquiry atau payment. |
originalExternalId | String | 64 | Optional | Header X-EXTERNAL-ID yang dikirim oleh partner / pengguna API ketika melakukan inquiry atau payment. |
serviceCode | String | 2 | Mandatory | Service code yang ingin dilakukan pengecekan, dalam kasus ini maka : 38 → Pengecekan request payment |
amount | Object | Optional | Infromasi terkait saldo yang akan diterima oleh customer ketika melakukan topup. | |
value | String | 16,2 | Optional | Value transaksi, jika currency dalam IDR maka tambahkan 2 digit desimal. ex : IDR10.000 → 10000.00 |
currency | String | 3 | Optional | ex : IDR |
latestTransactionStatus | String | 2 | Mandatory | Adapun code transaction status yang akan dikembalikan oleh Astrapay adalah sebagai berikut: 00 → Success 01 → Initiated 03 → Pending 05 → Cancelled 06 → Failed 07 → Not Found |
transactionStatusDesc | String | 50 | Optional | Deskripsi atau notes terkait status transaksi. |
additionalInfo | Object | Optional | Informasi tambahan jika ada |
Response Code
Response status terdiri dari 2 komponen, yaitu kode (response code) dan deskripsinya (response message).
Daftar Response Code
HTTP Code | Service Code | Case Code | Response Message | Description |
---|---|---|---|---|
200 | any | 00 | Successful | Successful request. |
202 | any | 00 | Request In Progress | Transaction still on process |
400 | any | 00 | Bad Request | General request failed error, including message parsing failed. |
400 | any | 01 | Invalid Field Format {field name} | Invalid format. |
400 | any | 02 | Invalid Mandatory Field {field name} | Missing or invalid format on mandatory field. |
401 | any | 00 | Unauthorized. [reason] | General unauthorized error (No Interface Def, API is Invalid, Oauth Failed, Verify Client Secret Fail, Client Forbidden Access API, Unknown Client, Key not Found). |
401 | any | 01 | Invalid Token (B2B) | Token found in request is invalid (Access Token Not Exist, Access Token Expiry). |
403 | any | 15 | Transaction Not Permitted.[reason] | Transaction Not Permitted. |
403 | any | 18 | Inactive Card/Account/Customer | Indicates inactive account. |
404 | any | 01 | Transaction Not Found | Transaction Not Found |
404 | any | 08 | Invalid Merchant | Merchant does not exist or status abnormal. |
404 | any | 11 | Invalid Card/Account/Customer [info]/Virtual Account | Card information may be invalid, or the card account may be blacklisted, or Virtual Account number maybe invalid. |
404 | any | 12 | Invalid Bill/Virtual Account [Reason] | The bill is blocked/ suspended/not found. |
404 | any | 13 | Invalid Amount | The amount doesn't match with what supposed to. |
404 | any | 14 | Paid Bill | The bill has been paid |
404 | any | 16 | Partner Not Found | Partner number can't be found. |
404 | any | 19 | Invalid Bill/Virtual Account | The bill is expired. |
409 | any | 00 | Conflict | Cannot use same X-EXTERNAL-ID in same day. |
409 | any | 01 | Duplicate partnerReferenceNo | Transaction has previously been processed indicates the same partnerReferenceNo already success. |
500 | any | 00 | General Error | General Error. |
500 | any | 01 | Internal Server Error | Unknown Internal Server Failure, Please retry the process again. |
504 | any | 00 | Timeout | Timeout from the issuer. |
Biller
1. Introduction Biller
Selamat datang di dokumentasi AstraPay Biller.
Dokumentasi ini menjelaskan procedur acceptance untuk implementasi API produk Biller dari perspektif Merchant.
Berikut adalah alur gambaran proses keseluruhan API secara umum:
1.1 Glosarium
Sebelum melakukan integrasi, mari kita bahas terlebih dahulu beberapa definisi dari istilah yang akan muncul pada dokumentasi ini. Penjelasan dari istilah tersebut adalah sebagai berikut:
Istilah | Deskripsi |
---|---|
Merchant | Pihak Ketiga yang ingin melakukan integrasi dengan AstraPay |
API | Application Programming Interface |
Database | Kumpulan data yang telah terorganisasi dan terstruktur |
User | Pengguna atau Customer Jasa Merchant |
2. Inquiry
API pada bagian ini digunakan untuk melakukan inquiry.
2.1 Protocol & Service Address
Item | Value |
---|---|
Protocol | HTTPS |
Method | POST |
URL Sandbox | /v1/mitra-service/inquiries |
2.2 Request Header
Name | Type | Requirement | Description |
---|---|---|---|
X-PARTNER-ID | String | Mandatory | Client ID Merchant/Partner yang didapat dari AstraPay |
X-TIMESTAMP | String | Mandatory | Waktu lokal Merchant/Partner dalam format yyyy-MM-ddTHH:mm:ssTZD |
X-SIGNATURE | String | Mandatory | Signature untuk mengakses API AstraPay hasil dari generate Signature Service |
X-EXTERNAL-ID | String | Mandatory | Numeric string unik yang hanya dapat digunakan satu kali dalam satu hari. Format yang digunakan adalah: 36 Random Numeric String |
Authorization | String | Mandatory | Bearer token hasil generate dari API Access Token B2B |
Content-Type | String | Mandatory | Tipe konten, data yang dikirim harus selalu application/json |
2.3 Request Body
contoh cURL request body pada produk biller BPJS Kesehatan
curl --location 'https://sandbox.astrapay.com/v1/mitra-service/inquiries' \
--header 'x-partner-id: f37e5edf-8d99-40ab-b8f0-f0f0f12f41b5' \
--header 'x-timestamp: 2011-12-03T10:15:30' \
--header 'x-signature: 1111111' \
--header 'x-external-id: 111111' \
--header 'Authorization: Bearer DlHTC8U5urS6VDsWkNMv3ealeldgjR8H5CvYYfD8n5xxx' \
--header 'Content-Type: application/json' \
--data '{
"beneficiaryNumber": "8888802883963273",
"productCode": "ASPOBPJ0000",
"periodStart": "2024-03-07",
"periodEnd": "2024-03-07"
}'
Field | Type | Requirement | Description |
---|---|---|---|
beneficiaryNumber | String | Mandatory | Data yang diinput di form field (Contoh: Nomor telepon, Token listrik, dst.) |
productCode | String | Mandatory | Kode unik pada tiap produk |
periodStart | String | Mandatory pada produk BPJS dan PBB | BPJS: Rentang waktu batasan awal yang dimulai pada saat melakukan inquiry/tanggal melakukan inquiry; PBB: Rentang tahun dalam melakukan inquiry |
periodEnd | String | Mandatory pada produk BPJS | Rentang waktu batasan akhir dalam melakukan inquiry untuk mendapatkan jumlah bulan yang ingin dibayar |
2.4 Response Body
Contoh Response pada produk BPJS Kesehatan
{
"id": 1422,
"type": "BPJS_KESEHATAN",
"productCode": "ASPOBPJ0000",
"serviceCharge": 0,
"totalPrice": 72500,
"margin": 0,
"grandTotal": 72500,
"message": null,
"status": "SUCCESS",
"paymentType": "STATIC",
"detailAdditionalData": [
{
"key": "transactionType",
"value": "BPJS Kesehatan",
"label": "Jenis Pembayaran"
},
{
"key": "beneficiaryNumber",
"value": "8888802883963273",
"label": "No. BPJS Kesehatan"
},
{
"key": "beneficiaryName",
"value": "Jarister Edwins Silalahi",
"label": "Nama Pemilik"
},
{
"key": "totalMembers",
"value": "2 orang",
"label": "Anggota Keluarga"
},
{
"key": "totalPeriods",
"value": "1 bulan",
"label": "Periode Bayar"
},
{
"key": "basicPrice",
"value": "Rp70",
"label": "Jumlah Tagihan"
}
]
}
Field | Type | Requirement | Description |
---|---|---|---|
id | Int | Mandatory | Kode unik hasil inquiry |
type | String | Mandatory | Kode untuk kategori produk (Contoh: PULSA) |
productCode | String | Mandatory | Kode untuk produk (Contoh: PUPRTEL011K) |
serviceCharge | Int | Mandatory | Biaya layanan yang dikenakan kepada Merchant |
totalPrice | Int | Mandatory | Nominal harga jual dari AstraPay |
margin | Int | Mandatory | Keuntungan yang didapatkan Merchant |
grandTotal | Int | Mandatory | Nominal harga jual yang ditambahkan margin (Rumus: totalPrice + margin) |
message | String | Optional | Pesan yang dimunculkan ketika terjadi error |
status | String | Mandatory | Status Transaksi (SUCCESS / PENDING / VOID ) |
paymentType | String | Mandatory | Pembayaran dengan nominal yang sesuai (STATIC) dan pembayaran yang dapat ditentukan jumlah nominal yang ingin dibayar (DYNAMIC) |
detailAdditionalData | Object | Mandatory | Data tambahan dari inquiry |
detailAdditionalData.key | String | Optional | Kata kunci untuk penunjuk data |
detailAdditionalData.value | String | Optional | Response data |
detailAdditionalData.label | String | Optional | Label keterangan data |
3. Transaksi
API pada bagian ini digunakan untuk melakukan transaksi.
3.1 Protocol & Service Address
Item | Value |
---|---|
Protocol | HTTPS |
Method | POST |
URL Sandbox | /v1/mitra-service/transactions |
3.2 Request Header
Name | Type | Requirement | Description |
---|---|---|---|
X-PARTNER-ID | String | Mandatory | Client ID Merchant/Partner yang didapat dari AstraPay |
X-TIMESTAMP | String | Mandatory | Waktu lokal Merchant/Partner dalam format yyyy-MM-ddTHH:mm:ssTZD |
X-SIGNATURE | String | Mandatory | Signature untuk mengakses API AstraPay hasil dari generate Signature Service |
X-EXTERNAL-ID | String | Mandatory | Numeric string unik yang hanya dapat digunakan satu kali dalam satu hari. Format yang digunakan adalah: 36 Random Numeric String |
Authorization | String | Mandatory | Bearer token hasil generate dari API Access Token B2B |
Content-Type | String | Mandatory | Tipe konten, data yang dikirim harus selalu application/json |
3.3 Request Body
contoh cURL request body pada produk biller BPJS Kesehatan
curl --location 'https://sandbox.astrapay.com/v1/mitra-service/transactions' \
--header 'x-partner-id: f37e5edf-8d99-40ab-b8f0-f0f0f12f41b5' \
--header 'x-timestamp: 2020-01-01T00:00:00' \
--header 'x-signature: aa' \
--header 'x-external-id: aa' \
--header 'Authorization: Bearer DlHTC8U5urS6VDsWkNMv3ealeldgjR8H5CvYYfD8n5xxx' \
--header 'Content-Type: application/json' \
--data '{
"inquiryId": "1422",
"partnerRefenceNo": "1A23F45"
}'
Field | Type | Requirement | Description |
---|---|---|---|
inquiryId | String | Mandatory | Kode unik hasil inquiry untuk transaksi |
partnerReferenceNo | String | Mandatory | ID transaksi pada Merchant/Partner |
3.4 Response Body
Contoh Response pada produk BPJS Kesehatan
{
"id": 1762,
"transactionNumber": "INV/BIL/ASU/240314/008OORD2ATP",
"type": "BPJS_KESEHATAN",
"productCode": "ASPOBPJ0000",
"beneficiaryNumber": "8888802883963273",
"serviceCharge": 2000,
"totalPrice": 72500,
"margin": 0,
"grandTotal": 72500,
"message": null,
"status": "PENDING",
"inquiryId": 1422,
"partnerReferenceNo": "1A23F45",
"detailAdditionalData": [
{
"key": "transactionNumber",
"value": "INV/BIL/ASU/240314/008OORD2ATP",
"label": "No. Transaksi"
},
{
"key": "referenceNumberProvider",
"value": "8BC3CC22FE669563",
"label": "No. Referensi"
},
{
"key": "transactionType",
"value": "BPJS Kesehatan",
"label": "Jenis Pembayaran"
},
{
"key": "beneficiaryNumber",
"value": "8888802883963273",
"label": "No. BPJS Kesehatan"
},
{
"key": "beneficiaryName",
"value": "Jarister Edwins Silalahi",
"label": "Nama Pemilik"
},
{
"key": "totalMembers",
"value": "2 orang",
"label": "Anggota Keluarga"
},
{
"key": "totalPeriods",
"value": "1 bulan",
"label": "Periode Bayar"
},
{
"key": "basicPrice",
"value": "Rp70",
"label": "Jumlah Tagihan"
}
]
}
Field | Type | Requirement | Description |
---|---|---|---|
id | Int | Mandatory | Kode unik hasil transaksi |
transactionNumber | Int | Mandatory | Kode unik transaksi yang di generate oleh AstraPay |
type | String | Mandatory | Kode untuk kategori produk (Contoh: PULSA) |
productCode | String | Mandatory | Kode untuk produk (Contoh: PUPRTEL011K) |
serviceCharge | Int | Mandatory | Biaya layanan yang dikenakan kepada Merchant |
totalPrice | Int | Mandatory | Nominal harga jual dari AstraPay |
margin | Int | Mandatory | Keuntungan yang didapatkan Merchant |
grandTotal | Int | Mandatory | Nominal harga jual yang ditambahkan margin (Rumus: totalPrice + margin) |
message | String | Optional | Pesan yang dimunculkan ketika terjadi error |
status | String | Mandatory | Status Transaksi (SUCCESS / PENDING / VOID ) |
inquiryId | String | Mandatory | Kode unik hasil inquiry untuk transaksi |
partnerReferenceNo | String | Mandatory | ID transaksi pada Merchant/Partner |
detailAdditionalData | Object | Mandatory | Data tambahan dari inquiry |
detailAdditionalData.key | String | Optional | Kata kunci untuk penunjuk data |
detailAdditionalData.value | String | Optional | Response data |
detailAdditionalData.label | String | Optional | Label keterangan data |
4. Mendapatkan Status
API pada bagian ini digunakan untuk mendapatkan status transaksi.
4.1 Protocol & Service Address
Item | Value |
---|---|
Protocol | HTTPS |
Method | GET |
URL Sandbox | /v1/mitra-service/transactions/{id} |
4.2 Request Path Variable
Item | Description |
---|---|
id | Kode unik hasil transaksi |
4.3 Request Header
Name | Type | Requirement | Description |
---|---|---|---|
X-PARTNER-ID | String | Mandatory | Client ID Merchant/Partner yang didapat dari AstraPay |
X-TIMESTAMP | String | Mandatory | Waktu lokal Merchant/Partner dalam format yyyy-MM-ddTHH:mm:ssTZD |
X-SIGNATURE | String | Mandatory | Signature untuk mengakses API AstraPay hasil dari generate Signature Service |
X-EXTERNAL-ID | String | Mandatory | Numeric string unik yang hanya dapat digunakan satu kali dalam satu hari. Format yang digunakan adalah: 36 Random Numeric String |
Authorization | String | Mandatory | Bearer token hasil generate dari API Access Token B2B |
Content-Type | String | Mandatory | Tipe konten, data yang dikirim harus selalu application/json |
contoh cURL request body pada produk biller BPJS Kesehatan
curl --location 'https://sandbox.astrapay.com/v1/mitra-service/transactions/1762' \
--header 'x-partner-id: f37e5edf-8d99-40ab-b8f0-f0f0f12f41b5' \
--header 'x-timestamp: 2024-02-22T10:39:30' \
--header 'x-signature: ede31' \
--header 'x-external-id: 12d' \
--header 'Authorization: Bearer DlHTC8U5urS6VDsWkNMv3ealeldgjR8H5CvYYfD8n5xxx' \
--header 'Content-Type: application/json'
4.4 Response Body
Contoh Response pada produk BPJS Kesehatan
{
"id": 1762,
"transactionNumber": "INV/BIL/ASU/240314/008OORD2ATP",
"type": "BPJS_KESEHATAN",
"productCode": "ASPOBPJ0000",
"beneficiaryNumber": "8888802883963273",
"serviceCharge": 2000,
"totalPrice": 72500,
"margin": 0,
"grandTotal": 72500,
"message": null,
"status": "SUCCESS",
"inquiryId": 1422,
"partnerReferenceNo": "1A23F45",
"detailAdditionalData": [
{
"key": "transactionNumber",
"value": "INV/BIL/ASU/240314/008OORD2ATP",
"label": "No. Transaksi"
},
{
"key": "referenceNumberProvider",
"value": "8BC3CC22FE669563",
"label": "No. Referensi"
},
{
"key": "transactionType",
"value": "BPJS Kesehatan",
"label": "Jenis Pembayaran"
},
{
"key": "beneficiaryNumber",
"value": "8888802883963273",
"label": "No. BPJS Kesehatan"
},
{
"key": "beneficiaryName",
"value": "Jarister Edwins Silalahi",
"label": "Nama Pemilik"
},
{
"key": "totalMembers",
"value": "2 orang",
"label": "Anggota Keluarga"
},
{
"key": "totalPeriods",
"value": "1 bulan",
"label": "Periode Bayar"
},
{
"key": "basicPrice",
"value": "Rp70",
"label": "Jumlah Tagihan"
}
]
}
Field | Type | Requirement | Description |
---|---|---|---|
id | Int | Mandatory | Kode unik hasil transaksi |
transactionNumber | Int | Mandatory | Kode unik transaksi yang di generate oleh AstraPay |
type | String | Mandatory | Kode untuk kategori produk (Contoh: PULSA) |
serviceCharge | Int | Mandatory | Biaya layanan yang dikenakan kepada Merchant |
productCode | String | Mandatory | Kode untuk produk (Contoh: PUPRTEL011K) |
beneficiaryNumber | String | Mandatory | Data yang diinput di form field (Contoh: Nomor telepon, Token listrik, dst.) |
totalPrice | Int | Mandatory | Nominal harga jual dari AstraPay |
margin | Int | Mandatory | Keuntungan yang didapatkan Merchant |
grandTotal | Int | Mandatory | Nominal harga jual yang ditambahkan margin (Rumus: totalPrice + margin) |
message | String | Optional | Pesan yang dimunculkan ketika terjadi error |
status | String | Mandatory | Status Transaksi (SUCCESS / PENDING / VOID ) |
partnerReferenceNo | String | Mandatory | ID transaksi pada Merchant/Partner |
detailAdditionalData | Object | Mandatory | Data tambahan dari inquiry |
detailAdditionalData.key | String | Optional | Kata kunci untuk penunjuk data |
detailAdditionalData.value | String | Optional | Response data |
detailAdditionalData.label | String | Optional | Label keterangan data |
5. List Response untuk Semua Produk
5.1 Angsuran
Request Inquiry Angsuran ACC
{
"beneficiaryNumber": "0230030600184090",
"productCode": "ACC"
}
Response Inquiry Angsuran ACC
{
"id": 1334,
"type": "ANGSURAN",
"productCode": "ACC",
"beneficiaryNumber": "0740040700159877",
"minimumPayment": 2932000.0000,
"serviceCharge": 2000.0000,
"totalPrice": 2932000.0000,
"margin": 0,
"grandTotal": 2932000.0000,
"message": null,
"createdAt": "2024-08-20T13:49:36.615552",
"detailAdditionalData": [
{
"key": "itemName",
"value": "ACC",
"label": "Nama Layanan"
},
{
"key": "beneficiaryName",
"value": "NANANG FAUZI KURNIAWAN",
"label": "Nama"
},
{
"key": "beneficiaryNumber",
"value": "0740040700159877",
"label": "No. Perjanjian"
},
{
"key": "installmentNumber",
"value": "6 / null bulan",
"label": "Angsuran Ke"
},
{
"key": "basicPrice",
"value": "Rp2.930.000",
"label": "Jumlah Angsuran"
},
{
"key": "fine",
"value": "Rp0",
"label": "Denda"
},
{
"key": "includedServiceChargeCollection",
"value": "Rp0",
"label": "Late Charge"
}
],
"status": "SUCCESS",
"paymentType": "STATIC"
}
Request Transaksi Angsuran ACC
{
"inquiryId": "1334",
"partnerReferenceNo": "1A23F45"
}
Response Transaksi Angsuran ACC
{
"id": 5038,
"type": "ANGSURAN",
"productCode": "ACC",
"transactionNumber": "INV/BIL/ANG/240820/004OAJL78N7",
"partnerReferenceNo": "1A23F45",
"beneficiaryNumber": "0740040700159877",
"serviceCharge": 2000.0000,
"totalPrice": 2932000.00,
"margin": 0.00,
"grandTotal": 2932000.00,
"message": null,
"status": "SUCCESS",
"inquiryId": 1334,
"detailAdditionalData": [
{
"key": "transactionNumber",
"value": "INV/BIL/ANG/240820/004OAJL78N7",
"label": "No. Transaksi"
},
{
"key": "itemName",
"value": "ACC",
"label": "Nama Layanan"
},
{
"key": "beneficiaryName",
"value": "NANANG FAUZI KURNIAWAN",
"label": "Nama"
},
{
"key": "beneficiaryNumber",
"value": "0740040700159877",
"label": "No. Perjanjian"
},
{
"key": "installmentNumber",
"value": "6 / 48 bulan",
"label": "Angsuran Ke"
},
{
"key": "basicPrice",
"value": "Rp2.930.000",
"label": "Jumlah Angsuran"
},
{
"key": "fine",
"value": "Rp0",
"label": "Denda"
},
{
"key": "includedServiceChargeCollection",
"value": "Rp0",
"label": "Late Charge"
}
]
}
Response Mendapatkan Status Angsuran ACC
{
"id": 5038,
"type": "ANGSURAN",
"productCode": "ACC",
"transactionNumber": "INV/BIL/ANG/240820/004OAJL78N7",
"partnerReferenceNo": "1A23F45",
"beneficiaryNumber": "0740040700159877",
"serviceCharge": 2000.0000,
"totalPrice": 2932000.00,
"margin": 0.00,
"grandTotal": 2932000.00,
"message": null,
"status": "SUCCESS",
"inquiryId": 1334,
"detailAdditionalData": [
{
"key": "transactionNumber",
"value": "INV/BIL/ANG/240820/004OAJL78N7",
"label": "No. Transaksi"
},
{
"key": "itemName",
"value": "ACC",
"label": "Nama Layanan"
},
{
"key": "beneficiaryName",
"value": "NANANG FAUZI KURNIAWAN",
"label": "Nama"
},
{
"key": "beneficiaryNumber",
"value": "0740040700159877",
"label": "No. Perjanjian"
},
{
"key": "installmentNumber",
"value": "6 / 48 bulan",
"label": "Angsuran Ke"
},
{
"key": "basicPrice",
"value": "Rp2.930.000",
"label": "Jumlah Angsuran"
},
{
"key": "fine",
"value": "Rp0",
"label": "Denda"
},
{
"key": "includedServiceChargeCollection",
"value": "Rp0",
"label": "Late Charge"
}
]
}
Request Inquiry Angsuran TAF
{
"beneficiaryNumber": "0230030600184090",
"productCode": "TAF"
}
Response Inquiry Angsuran TAF
{
"id": 1336,
"type": "ANGSURAN",
"productCode": "TAF",
"beneficiaryNumber": "2111755774",
"minimumPayment": 19975712.0000,
"serviceCharge": 2000,
"totalPrice": 19975712.0000,
"margin": 0,
"grandTotal": 19975712.0000,
"message": null,
"createdAt": "2024-08-20T14:08:58.056024",
"detailAdditionalData": [
{
"key": "itemName",
"value": "TAF",
"label": "Nama Layanan"
},
{
"key": "beneficiaryName",
"value": "VICTOR YOHANES TUMANGGOR SH",
"label": "Nama"
},
{
"key": "beneficiaryNumber",
"value": "2111755774",
"label": "No. Virtual Account"
},
{
"key": "installmentNumber",
"value": "29 / 60 bulan",
"label": "Angsuran Ke"
},
{
"key": "farePrice",
"value": "Rp19.973.712",
"label": "Jumlah Angsuran"
}
],
"status": "SUCCESS",
"paymentType": "STATIC"
}
Request Transaksi Angsuran TAF
{
"inquiryId": "1336",
"partnerReferenceNo": "1A23F45"
}
Response Transaksi Angsuran TAF
{
"id": 5039,
"type": "ANGSURAN",
"productCode": "TAF",
"transactionNumber": "INV/BIL/ANG/240820/003W44DEDS7",
"partnerReferenceNo": "1A23F45",
"beneficiaryNumber": "2111755774",
"serviceCharge": 2000.0000,
"totalPrice": 19975712.00,
"margin": 0.00,
"grandTotal": 19975712.00,
"message": null,
"status": "SUCCESS",
"inquiryId": 1336,
"detailAdditionalData": [
{
"key": "transactionNumber",
"value": "INV/BIL/ANG/240820/003W44DEDS7",
"label": "No. Transaksi"
},
{
"key": "itemName",
"value": "TAF",
"label": "Nama Layanan"
},
{
"key": "beneficiaryName",
"value": "VICTOR YOHANES TUMANGGOR SH",
"label": "Nama"
},
{
"key": "beneficiaryNumber",
"value": "2111755774",
"label": "No. Virtual Account"
},
{
"key": "installmentNumber",
"value": "29 / 60 bulan",
"label": "Angsuran Ke"
},
{
"key": "farePrice",
"value": "Rp19.973.712",
"label": "Jumlah Angsuran"
}
]
}
Response Mendapatkan Status Angsuran TAF
{
"id": 5039,
"type": "ANGSURAN",
"productCode": "TAF",
"transactionNumber": "INV/BIL/ANG/240820/003W44DEDS7",
"partnerReferenceNo": "1A23F45",
"beneficiaryNumber": "2111755774",
"serviceCharge": 2000.0000,
"totalPrice": 19975712.00,
"margin": 0.00,
"grandTotal": 19975712.00,
"message": null,
"status": "SUCCESS",
"inquiryId": 1336,
"detailAdditionalData": [
{
"key": "transactionNumber",
"value": "INV/BIL/ANG/240820/003W44DEDS7",
"label": "No. Transaksi"
},
{
"key": "itemName",
"value": "TAF",
"label": "Nama Layanan"
},
{
"key": "beneficiaryName",
"value": "VICTOR YOHANES TUMANGGOR SH",
"label": "Nama"
},
{
"key": "beneficiaryNumber",
"value": "2111755774",
"label": "No. Virtual Account"
},
{
"key": "installmentNumber",
"value": "29 / 60 bulan",
"label": "Angsuran Ke"
},
{
"key": "farePrice",
"value": "Rp19.973.712",
"label": "Jumlah Angsuran"
}
]
}
Produk angsuran adalah produk pembayaran tagihan dengan nominal yang fix. Beberapa produk angsuran yang tersedia:
Produk Angsuran | Description |
---|---|
Angsuran ACC | Angsuran Otomotif dari perusahaan Astra Credit Company (ACC) |
Angsuran TAF | Angsuran Otomotif dari perusahaan Toyota Astra Finance (TAF) |
Angsuran Maucash | Angsuran Paylater dari perusahaan Maucash |
5.2 Angsuran Dinamis
Request Inquiry Angsuran Dinamis
request
{
"beneficiaryNumber": "846000494119",
"productCode": "FIF"
}
Response Inquiry Angsuran Dinamis
{
"id": 1342,
"type": "ANGSURAN",
"productCode": "FIF",
"beneficiaryNumber": "846000494119",
"minimumPayment": 410000.0,
"serviceCharge": 2000.0000,
"totalPrice": 3611700.0000,
"margin": 0,
"grandTotal": 3611700.0000,
"message": null,
"createdAt": "2024-08-20T14:31:45.220085",
"detailAdditionalData": [
{
"key": "itemName",
"value": "Biller FIF",
"label": "Nama Layanan"
},
{
"key": "beneficiaryName",
"value": "YUSNIAR HEKSA SEOMADI",
"label": "Nama"
},
{
"key": "beneficiaryNumber",
"value": "846000494119",
"label": "No. Kontrak"
},
{
"key": "dueDate",
"value": "26 Mar 2021",
"label": "Jatuh Tempo"
},
{
"key": "installmentNumber",
"value": "22 / 24 bulan",
"label": "Angsuran Ke"
},
{
"key": "platform",
"value": "K",
"label": "Platform"
},
{
"key": "installmentAmount",
"value": "Rp400.000",
"label": "Tagihan Angsuran"
},
{
"key": "outstandingPenalty",
"value": "Rp3.148.900",
"label": "Outstanding Denda"
},
{
"key": "outstandingCollectionFee",
"value": "Rp62.800",
"label": "Outstanding Coll Fee"
},
{
"key": "fine",
"value": "0",
"label": "Denda Terbayar"
},
{
"key": "includedServiceChargeCollection",
"value": "0",
"label": "Coll Fee Terbayar"
},
{
"key": "totalPrice",
"value": "Rp3.611.700",
"label": "Total Kewajiban"
},
{
"key": "minimumPayment",
"value": "Rp410.000",
"label": "Minimal Pembayaran"
}
],
"status": "SUCCESS",
"paymentType": "DYNAMIC"
}
Request Transaksi Angsuran Dinamis
{
"inquiryId": "1342",
"amount": "411000",
"partnerReferenceNo": "1A23F45"
}
Response Transaksi Angsuran Dinamis
{
"id": 5040,
"type": "ANGSURAN",
"productCode": "FIF",
"transactionNumber": "INV/BIL/ANG/240820/002STSYT5QL",
"partnerReferenceNo": "1A23F45",
"beneficiaryNumber": "846000494119",
"serviceCharge": 2000.0000,
"totalPrice": 411000.00,
"margin": 0.00,
"grandTotal": 411000.00,
"message": null,
"status": "SUCCESS",
"inquiryId": 1342,
"detailAdditionalData": [
{
"key": "transactionNumber",
"value": "INV/BIL/ANG/240820/002STSYT5QL",
"label": "No. Transaksi"
},
{
"key": "itemName",
"value": "Biller FIF",
"label": "Nama Layanan"
},
{
"key": "beneficiaryName",
"value": "YUSNIAR HEKSA SEOMADI",
"label": "Nama"
},
{
"key": "beneficiaryNumber",
"value": "846000494119",
"label": "No. Kontrak"
},
{
"key": "dueDate",
"value": "26 Mar 2021",
"label": "Jatuh Tempo"
},
{
"key": "installmentNumber",
"value": "22 / 24 bulan",
"label": "Angsuran Ke"
},
{
"key": "platform",
"value": "K",
"label": "Platform"
},
{
"key": "installmentAmount",
"value": "Rp400.000",
"label": "Tagihan Angsuran"
},
{
"key": "fine",
"value": "Rp10.000",
"label": "Denda Terbayar"
},
{
"key": "includedServiceChargeCollection",
"value": "Rp1.000",
"label": "Coll Fee Terbayar"
}
]
}
Response Mendapatkan Status Angsuran Dinamis
{
"id": 5040,
"type": "ANGSURAN",
"productCode": "FIF",
"transactionNumber": "INV/BIL/ANG/240820/002STSYT5QL",
"partnerReferenceNo": "1A23F45",
"beneficiaryNumber": "846000494119",
"serviceCharge": 2000.0000,
"totalPrice": 411000.00,
"margin": 0.00,
"grandTotal": 411000.00,
"message": null,
"status": "SUCCESS",
"inquiryId": 1342,
"detailAdditionalData": [
{
"key": "transactionNumber",
"value": "INV/BIL/ANG/240820/002STSYT5QL",
"label": "No. Transaksi"
},
{
"key": "itemName",
"value": "Biller FIF",
"label": "Nama Layanan"
},
{
"key": "beneficiaryName",
"value": "YUSNIAR HEKSA SEOMADI",
"label": "Nama"
},
{
"key": "beneficiaryNumber",
"value": "846000494119",
"label": "No. Kontrak"
},
{
"key": "dueDate",
"value": "26 Mar 2021",
"label": "Jatuh Tempo"
},
{
"key": "installmentNumber",
"value": "22 / 24 bulan",
"label": "Angsuran Ke"
},
{
"key": "platform",
"value": "K",
"label": "Platform"
},
{
"key": "installmentAmount",
"value": "Rp400.000",
"label": "Tagihan Angsuran"
},
{
"key": "fine",
"value": "Rp10.000",
"label": "Denda Terbayar"
},
{
"key": "includedServiceChargeCollection",
"value": "Rp1.000",
"label": "Coll Fee Terbayar"
}
]
}
Produk angsuran dinamis adalah produk pembayaran tagihan dengan nominal yang dapat ditentukan oleh User dengan minimum tertentu. Produk angsuran dinamis tersedia pada Angsuran FIF (Federal International Finance) untuk angsuran otomotif.
5.3 Pulsa
Request Inquiry Pulsa
{
"beneficiaryNumber": "081259920998",
"productCode": "PUPRTEL011K"
}
Response Inquiry Pulsa
{
"id": 1349,
"type": "PULSA",
"productCode": "PUPRTEL025K",
"beneficiaryNumber": "082100001111",
"minimumPayment": 25600.0000,
"serviceCharge": 100,
"totalPrice": 25600.0000,
"margin": 600,
"grandTotal": 26200.0000,
"message": null,
"createdAt": "2024-08-20T14:53:41.576966",
"detailAdditionalData": [
{
"key": "itemName",
"value": "Telkomsel 25rb",
"label": "Nominal Pulsa"
},
{
"key": "beneficiaryNumber",
"value": "082100001111",
"label": "No. Telepon"
},
{
"key": "provider",
"value": "Telkomsel",
"label": "Provider"
},
{
"key": "farePrice",
"value": "Rp25.500",
"label": "Harga"
}
],
"status": "SUCCESS",
"paymentType": "STATIC"
}
Request Transaksi Pulsa
{
"inquiryId": "1349",
"partnerReferenceNo": "1A23F45"
}
Response Transaksi Pulsa
{
"id": 5042,
"type": "PULSA",
"productCode": "PUPRTEL025K",
"transactionNumber": "INV/BIL/PUL/240820/006089BGONY",
"partnerReferenceNo": "1A23F45",
"beneficiaryNumber": "082100001111",
"serviceCharge": 100.0000,
"totalPrice": 25600.00,
"margin": 600.00,
"grandTotal": 26200.00,
"message": null,
"status": "PENDING",
"inquiryId": 1349,
"detailAdditionalData": [
{
"key": "transactionNumber",
"value": "INV/BIL/PUL/240820/006089BGONY",
"label": "No. Transaksi"
},
{
"key": "itemName",
"value": "Telkomsel 25rb",
"label": "Nominal Pulsa"
},
{
"key": "beneficiaryNumber",
"value": "082100001111",
"label": "No. Telepon"
},
{
"key": "provider",
"value": "Telkomsel",
"label": "Provider"
},
{
"key": "farePrice",
"value": "Rp25.500",
"label": "Harga"
}
]
}
Response Mendapatkan Status Pulsa
{
"id": 5042,
"type": "PULSA",
"productCode": "PUPRTEL025K",
"transactionNumber": "INV/BIL/PUL/240820/006089BGONY",
"partnerReferenceNo": "1A23F45",
"beneficiaryNumber": "082100001111",
"serviceCharge": 100.0000,
"totalPrice": 25600.00,
"margin": 600.00,
"grandTotal": 26200.00,
"message": null,
"status": "PENDING",
"inquiryId": 1349,
"detailAdditionalData": [
{
"key": "transactionNumber",
"value": "INV/BIL/PUL/240820/006089BGONY",
"label": "No. Transaksi"
},
{
"key": "itemName",
"value": "Telkomsel 25rb",
"label": "Nominal Pulsa"
},
{
"key": "beneficiaryNumber",
"value": "082100001111",
"label": "No. Telepon"
},
{
"key": "provider",
"value": "Telkomsel",
"label": "Provider"
},
{
"key": "farePrice",
"value": "Rp25.500",
"label": "Harga"
}
]
}
Produk pulsa yang tersedia adalah Axis, Indosat, Smartfren, Telkomsel, Tri, dan XL.
5.4 Pulsa Pascabayar
Request Inquiry Pulsa Pascabayar
{
"beneficiaryNumber": "082295095786",
"productCode": "PUPPTELHALO"
}
Response Inquiry Pulsa Pascabayar
{
"id": 2218,
"type": "PASCABAYAR",
"productCode": "PUPPTELHALO",
"beneficiaryNumber": "082295095786",
"minimumPayment": 104000.0000,
"serviceCharge": 4000.0000,
"totalPrice": 104000.0000,
"margin": 0,
"grandTotal": 104000.0000,
"message": null,
"createdAt": "2024-08-20T15:59:44.824619",
"detailAdditionalData": [
{
"key": "itemName",
"value": "Telkomsel Halo",
"label": "Nama Layanan"
},
{
"key": "beneficiaryNumber",
"value": "082295095786",
"label": "No. Telepon"
},
{
"key": "beneficiaryName",
"value": "DUMMY HALO-01",
"label": "Nama"
},
{
"key": "basicPrice",
"value": "Rp100.000",
"label": "Jumlah Tagihan"
}
],
"status": "SUCCESS",
"paymentType": null
}
Request Transaksi Pulsa Pascabayar
{
"inquiryId": "1408",
"partnerReferenceNo": "1A23F45"
}
Response Transaksi Pulsa Pascabayar
{
"id": 2066,
"type": "PASCABAYAR",
"productCode": "PUPPTELHALO",
"transactionNumber": "INV/BIL/PUL/240820/0055HT7P61N",
"partnerReferenceNo": "1A23F45",
"beneficiaryNumber": "082295095786",
"serviceCharge": 4000.0000,
"totalPrice": 104000.00,
"margin": 0.00,
"grandTotal": 104000.00,
"message": null,
"status": "PENDING",
"inquiryId": 2218,
"detailAdditionalData": [
{
"key": "transactionNumber",
"value": "INV/BIL/PUL/240820/0055HT7P61N",
"label": "No. Transaksi"
},
{
"key": "itemName",
"value": "Telkomsel Halo",
"label": "Nama Layanan"
},
{
"key": "beneficiaryNumber",
"value": "082295095786",
"label": "No. Telepon"
},
{
"key": "beneficiaryName",
"value": "DUMMY HALO-01",
"label": "Nama"
},
{
"key": "basicPrice",
"value": "Rp100.000",
"label": "Jumlah Tagihan"
}
]
}
Response Mendapatkan Status Pulsa Pascabayar
{
"id": 2066,
"type": "PASCABAYAR",
"productCode": "PUPPTELHALO",
"transactionNumber": "INV/BIL/PUL/240820/0055HT7P61N",
"partnerReferenceNo": "1A23F45",
"beneficiaryNumber": "082295095786",
"serviceCharge": 4000.0000,
"totalPrice": 104000.00,
"margin": 0.00,
"grandTotal": 104000.00,
"message": null,
"status": "PENDING",
"inquiryId": 2218,
"detailAdditionalData": [
{
"key": "transactionNumber",
"value": "INV/BIL/PUL/240820/0055HT7P61N",
"label": "No. Transaksi"
},
{
"key": "itemName",
"value": "Telkomsel Halo",
"label": "Nama Layanan"
},
{
"key": "beneficiaryNumber",
"value": "082295095786",
"label": "No. Telepon"
},
{
"key": "beneficiaryName",
"value": "DUMMY HALO-01",
"label": "Nama"
},
{
"key": "basicPrice",
"value": "Rp100.000",
"label": "Jumlah Tagihan"
}
]
}
Produk paket data yang tersedia adalah Axis, Indosat, Smartfren, Telkomsel, Tri, dan XL.
5.5 Paket Data
Request Inquiry Paket Data
{
"beneficiaryNumber": "08129550246",
"productCode": "TD100"
}
Response Inquiry Paket Data
{
"id": 1369,
"type": "PAKET_DATA",
"productCode": "TD100",
"beneficiaryNumber": "08129550246",
"minimumPayment": 100000.0000,
"serviceCharge": 0,
"totalPrice": 100000.0000,
"margin": 0,
"grandTotal": 100000.0000,
"message": null,
"createdAt": "2024-08-20T16:17:36.161625",
"detailAdditionalData": [
{
"key": "itemName",
"value": "12 GB Kuota Utama + 2 GB OMG Masa Aktif 30 Hari",
"label": "Nama Paket"
},
{
"key": "beneficiaryNumber",
"value": "08129550246",
"label": "No. Telepon"
},
{
"key": "provider",
"value": "Telkomsel",
"label": "Provider"
},
{
"key": "farePrice",
"value": "Rp100.000",
"label": "Harga"
}
],
"status": "SUCCESS",
"paymentType": "STATIC"
}
Request Transaksi Paket Data
{
"inquiryId": "1369",
"partnerReferenceNo": "1A23F45"
}
Response Transaksi Paket Data
{
"id": 5044,
"type": "PAKET_DATA",
"productCode": "TD100",
"transactionNumber": "INV/BIL/PAD/240820/006QTMRTTYZ",
"partnerReferenceNo": "1A23F45",
"beneficiaryNumber": "08129550246",
"serviceCharge": 0.0000,
"totalPrice": 100000.00,
"margin": 0.00,
"grandTotal": 100000.00,
"message": null,
"status": "PENDING",
"inquiryId": 1369,
"detailAdditionalData": [
{
"key": "transactionNumber",
"value": "INV/BIL/PAD/240820/006QTMRTTYZ",
"label": "No. Transaksi"
},
{
"key": "itemName",
"value": "12 GB Kuota Utama + 2 GB OMG Masa Aktif 30 Hari",
"label": "Nama Paket"
},
{
"key": "beneficiaryNumber",
"value": "08129550246",
"label": "No. Telepon"
},
{
"key": "provider",
"value": "Telkomsel",
"label": "Provider"
},
{
"key": "farePrice",
"value": "Rp100.000",
"label": "Harga"
}
]
}
Response Mendapatkan Status Paket Data
{
"id": 5044,
"type": "PAKET_DATA",
"productCode": "TD100",
"transactionNumber": "INV/BIL/PAD/240820/006QTMRTTYZ",
"partnerReferenceNo": "1A23F45",
"beneficiaryNumber": "08129550246",
"serviceCharge": 0.0000,
"totalPrice": 100000.00,
"margin": 0.00,
"grandTotal": 100000.00,
"message": null,
"status": "PENDING",
"inquiryId": 1369,
"detailAdditionalData": [
{
"key": "transactionNumber",
"value": "INV/BIL/PAD/240820/006QTMRTTYZ",
"label": "No. Transaksi"
},
{
"key": "itemName",
"value": "12 GB Kuota Utama + 2 GB OMG Masa Aktif 30 Hari",
"label": "Nama Paket"
},
{
"key": "beneficiaryNumber",
"value": "08129550246",
"label": "No. Telepon"
},
{
"key": "provider",
"value": "Telkomsel",
"label": "Provider"
},
{
"key": "farePrice",
"value": "Rp100.000",
"label": "Harga"
}
]
}
Produk pulsa yang tersedia adalah Axis, Indosat, Smartfren, Telkomsel, Tri, dan XL.
5.6 Token Listrik
Request Inquiry Token Listrik
{
"beneficiaryNumber": "45017031068",
"productCode": "PLPRPLN020K"
}
Response Inquiry Token Listrik
{
"id": 2226,
"type": "TOKEN_LISTRIK",
"productCode": "PLPRPLN020K",
"beneficiaryNumber": "45017031068",
"minimumPayment": 20150.0000,
"serviceCharge": 150.0000,
"totalPrice": 20150.0000,
"margin": 500,
"grandTotal": 20650.0000,
"message": null,
"createdAt": "2024-08-20T16:28:25.542082",
"detailAdditionalData": [
{
"key": "itemName",
"value": "Token 20.000",
"label": "Nominal"
},
{
"key": "beneficiaryNumber",
"value": "45017031068",
"label": "No. Meter"
},
{
"key": "beneficiaryName",
"value": "BENI INDRA",
"label": "Nama"
},
{
"key": "farePower",
"value": "R1/2200",
"label": "Tarif / Daya"
},
{
"key": "basicPrice",
"value": "Rp20.000",
"label": "Harga"
}
],
"status": "SUCCESS",
"paymentType": "STATIC"
}
Request Transaksi Token Listrik
{
"inquiryId": "2226",
"partnerReferenceNo": "1A23F45"
}
Response Transaksi Token Listrik
{
"id": 2067,
"type": "TOKEN_LISTRIK",
"productCode": "PLPRPLN020K",
"transactionNumber": "INV/BIL/PLN/240820/006VTWS6CNR",
"partnerReferenceNo": "1A23F45",
"beneficiaryNumber": "45017031068",
"serviceCharge": 150.0000,
"totalPrice": 20150.00,
"margin": 500.00,
"grandTotal": 20650.00,
"message": null,
"status": "PENDING",
"inquiryId": 2226,
"detailAdditionalData": [
{
"key": "transactionNumber",
"value": "INV/BIL/PLN/240820/006VTWS6CNR",
"label": "No. Transaksi"
},
{
"key": "itemName",
"value": "Token 20.000",
"label": "Nominal"
},
{
"key": "beneficiaryNumber",
"value": "45017031068",
"label": "No. Meter"
},
{
"key": "beneficiaryName",
"value": "BENI INDRA",
"label": "Nama"
},
{
"key": "farePower",
"value": "R1/2200",
"label": "Tarif / Daya"
},
{
"key": "basicPrice",
"value": "Rp20.000",
"label": "Harga"
}
]
}
Response Mendapatkan Status Token Listrik
{
"id": 2067,
"type": "TOKEN_LISTRIK",
"productCode": "PLPRPLN020K",
"transactionNumber": "INV/BIL/PLN/240820/006VTWS6CNR",
"partnerReferenceNo": "1A23F45",
"beneficiaryNumber": "45017031068",
"serviceCharge": 150.0000,
"totalPrice": 20150.00,
"margin": 500.00,
"grandTotal": 20650.00,
"message": null,
"status": "PENDING",
"inquiryId": 2226,
"detailAdditionalData": [
{
"key": "transactionNumber",
"value": "INV/BIL/PLN/240820/006VTWS6CNR",
"label": "No. Transaksi"
},
{
"key": "itemName",
"value": "Token 20.000",
"label": "Nominal"
},
{
"key": "beneficiaryNumber",
"value": "45017031068",
"label": "No. Meter"
},
{
"key": "beneficiaryName",
"value": "BENI INDRA",
"label": "Nama"
},
{
"key": "farePower",
"value": "R1/2200",
"label": "Tarif / Daya"
},
{
"key": "basicPrice",
"value": "Rp20.000",
"label": "Harga"
}
]
}
Token Listrik adalah produk prabayar listrik PLN.
5.7 Tagihan Listrik
Request Inquiry Tagihan Listrik
{
"beneficiaryNumber": "516070377775",
"productCode": "PLPOPLN0000"
}
Response Inquiry Tagihan Listrik
{
"id": 2228,
"type": "TAGIHAN_LISTRIK",
"productCode": "PLPOPLN0000",
"beneficiaryNumber": "516070377775",
"minimumPayment": 24720.0000,
"serviceCharge": 3500.0000,
"totalPrice": 24720.0000,
"margin": 500,
"grandTotal": 25220.0000,
"message": null,
"createdAt": "2024-08-20T16:37:55.857021",
"detailAdditionalData": [
{
"key": "itemName",
"value": "Tagihan Listrik PLN",
"label": "Layanan"
},
{
"key": "beneficiaryNumber",
"value": "516070377775",
"label": "ID Pelanggan"
},
{
"key": "beneficiaryName",
"value": "MAKIMA",
"label": "Nama"
},
{
"key": "farePower",
"value": "R1/000000450",
"label": "Tarif / Daya"
},
{
"key": "periode",
"value": "Februari 2016",
"label": "Periode Tagihan"
},
{
"key": "totalUsage",
"value": "5400 kWh",
"label": "Jumlah Pemakaian"
},
{
"key": "basicPrice",
"value": "Rp22.220",
"label": "Jumlah Tagihan"
}
],
"status": "SUCCESS",
"paymentType": "STATIC"
}
Request Transaksi Tagihan Listrik
{
"inquiryId": "2228",
"partnerReferenceNo": "1A23F45"
}
Response Transaksi Tagihan Listrik
{
"id": 2068,
"type": "TAGIHAN_LISTRIK",
"productCode": "PLPOPLN0000",
"transactionNumber": "INV/BIL/PLN/240820/005FUVIJOM1",
"partnerReferenceNo": "1A23F45",
"beneficiaryNumber": "516070377775",
"serviceCharge": 3500.0000,
"totalPrice": 24720.00,
"margin": 500.00,
"grandTotal": 25220.00,
"message": null,
"status": "PENDING",
"inquiryId": 2228,
"detailAdditionalData": [
{
"key": "transactionNumber",
"value": "INV/BIL/PLN/240820/005FUVIJOM1",
"label": "No. Transaksi"
},
{
"key": "itemName",
"value": "Tagihan Listrik PLN",
"label": "Layanan"
},
{
"key": "beneficiaryNumber",
"value": "516070377775",
"label": "ID Pelanggan"
},
{
"key": "beneficiaryName",
"value": "MAKIMA",
"label": "Nama"
},
{
"key": "farePower",
"value": "R1/000000450",
"label": "Tarif / Daya"
},
{
"key": "standMeter",
"value": "470300-475700",
"label": "Stand Meter"
},
{
"key": "periode",
"value": "Februari 2016",
"label": "Periode Tagihan"
},
{
"key": "totalUsage",
"value": "5400 kWh",
"label": "Jumlah Pemakaian"
},
{
"key": "basicPrice",
"value": "Rp22.220",
"label": "Jumlah Tagihan"
}
]
}
Response Mendapatkan Status Tagihan Listrik
{
"id": 2068,
"type": "TAGIHAN_LISTRIK",
"productCode": "PLPOPLN0000",
"transactionNumber": "INV/BIL/PLN/240820/005FUVIJOM1",
"partnerReferenceNo": "1A23F45",
"beneficiaryNumber": "516070377775",
"serviceCharge": 3500.0000,
"totalPrice": 24720.00,
"margin": 500.00,
"grandTotal": 25220.00,
"message": null,
"status": "PENDING",
"inquiryId": 2228,
"detailAdditionalData": [
{
"key": "transactionNumber",
"value": "INV/BIL/PLN/240820/005FUVIJOM1",
"label": "No. Transaksi"
},
{
"key": "itemName",
"value": "Tagihan Listrik PLN",
"label": "Layanan"
},
{
"key": "beneficiaryNumber",
"value": "516070377775",
"label": "ID Pelanggan"
},
{
"key": "beneficiaryName",
"value": "MAKIMA",
"label": "Nama"
},
{
"key": "farePower",
"value": "R1/000000450",
"label": "Tarif / Daya"
},
{
"key": "standMeter",
"value": "470300-475700",
"label": "Stand Meter"
},
{
"key": "periode",
"value": "Februari 2016",
"label": "Periode Tagihan"
},
{
"key": "totalUsage",
"value": "5400 kWh",
"label": "Jumlah Pemakaian"
},
{
"key": "basicPrice",
"value": "Rp22.220",
"label": "Jumlah Tagihan"
}
]
}
Tagihan listrik adalah produk pascabayar Listrik PLN.
5.8 Tagihan Air
Request Inquiry Tagihan Air
{
"beneficiaryNumber": "1234567890",
"productCode": "PDPOPDA0000"
}
Response Inquiry Tagihan Air
{
"id": 1473,
"type": "TAGIHAN_AIR",
"productCode": "PDPOPDA0000",
"serviceCharge": 0,
"totalPrice": 140979,
"margin": 0,
"grandTotal": 140979,
"message": null,
"status": "SUCCESS",
"paymentType": "STATIC",
"detailAdditionalData": [
{
"key": "productName",
"value": "PAM PALYJA",
"label": "Lokasi"
},
{
"key": "beneficiaryNumber",
"value": "1234567890",
"label": "No. Pelanggan"
},
{
"key": "beneficiaryName",
"value": "LIM SUI SIAN",
"label": "Nama"
},
{
"key": "periode",
"value": "SEP18",
"label": "Periode Tagihan"
},
{
"key": "basicPrice",
"value": "Rp138.479",
"label": "Jumlah Tagihan"
}
]
}
Request Transaksi Tagihan Air
{
"inquiryId": "1473",
"partnerReferenceNo": "1A23F45"
}
Response Transaksi Tagihan Air
{
"id": 1761,
"transactionNumber": "INV/BIL/PDA/240314/006BWC1T0KO",
"type": "TAGIHAN_AIR",
"productCode": "PDPOPDA0000",
"serviceCharge": 0,
"beneficiaryNumber": "1234567890",
"totalPrice": 140979,
"margin": 0,
"grandTotal": 140979,
"message": null,
"status": "PENDING",
"inquiryId": 1473,
"partnerReferenceNo": "1A23F45",
"detailAdditionalData": [
{
"key": "transactionNumber",
"value": "INV/BIL/PDA/240314/006BWC1T0KO",
"label": "No. Transaksi"
},
{
"key": "productName",
"value": "PAM PALYJA",
"label": "Lokasi"
},
{
"key": "beneficiaryNumber",
"value": "1234567890",
"label": "No. Pelanggan"
},
{
"key": "beneficiaryName",
"value": "LIM SUI SIAN",
"label": "Nama"
},
{
"key": "periode",
"value": "SEP18",
"label": "Periode Tagihan"
},
{
"key": "basicPrice",
"value": "Rp138.479",
"label": "Jumlah Tagihan"
}
]
}
Response Mendapatkan Status Tagihan Air
{
"id": 1761,
"transactionNumber": "INV/BIL/PDA/240314/006BWC1T0KO",
"type": "TAGIHAN_AIR",
"productCode": "PDPOPDA0000",
"serviceCharge": 0,
"beneficiaryNumber": "1234567890",
"totalPrice": 140979.00,
"margin": 0.00,
"grandTotal": 140979.00,
"message": null,
"status": "SUCCESS",
"inquiryId": 1473
"partnerRefNumber": "cropdrdevtest1",
"detailAdditionalData": [
{
"key": "transactionNumber",
"value": "INV/BIL/PDA/240308/006GN5Z03YC",
"label": "No. Transaksi"
},
{
"key": "productName",
"value": "PAM PALYJA",
"label": "Lokasi"
},
{
"key": "beneficiaryNumber",
"value": "1234567890",
"label": "No. Pelanggan"
},
{
"key": "beneficiaryName",
"value": "LIM SUI SIAN",
"label": "Nama"
},
{
"key": "periode",
"value": "SEP18",
"label": "Periode Tagihan"
},
{
"key": "basicPrice",
"value": "Rp138.479",
"label": "Jumlah Tagihan"
}
]
}
Tagihan air adalah produk pascabayar yang bisa disebut sebagai tagihan PDAM.
5.9 Internet dan TV Kabel
Request Inquiry Internet dan TV Kabel
{
"beneficiaryNumber": "1234567890",
"productCode": "INPOTEL0000"
}
Response Inquiry Internet dan TV Kabel
{
"id": 1472,
"type": "INTERNET_TV_KABEL",
"productCode": "INPOTEL0000",
"serviceCharge": 0,
"totalPrice": 293000,
"margin": 0,
"grandTotal": 293000,
"message": null,
"status": "SUCCESS",
"paymentType": "STATIC",
"detailAdditionalData": [
{
"key": "productName",
"value": "IndiHome",
"label": "Jenis Layanan"
},
{
"key": "beneficiaryNumber",
"value": "1234567890",
"label": "Nomor Pelanggan"
},
{
"key": "beneficiaryName",
"value": " KOMALA DWI HAPSARI ",
"label": "Nama Pelanggan"
},
{
"key": "period",
"value": "MARET",
"label": "Periode Bayar"
},
{
"key": "basicPrice",
"value": "Rp290.500",
"label": "Jumlah Tagihan"
}
]
}
Request Transaksi Internet dan TV Kabel
{
"inquiryId": "1472",
"partnerReferenceNo": "1A23F45"
}
Response Transaksi Internet dan TV Kabel
{
"id": 1764,
"transactionNumber": "INV/BIL/INT/240314/006O0P2156R",
"type": "INTERNET_TV_KABEL",
"productCode": "INPOTEL0000",
"beneficiaryNumber": "1234567890",
"serviceCharge": 0,
"totalPrice": 293000,
"margin": 0,
"grandTotal": 293000,
"message": null,
"status": "PENDING",
"inquiryId": 1472,
"partnerReferenceNo": "1A23F45",
"detailAdditionalData": [
{
"key": "transactionNumber",
"value": "INV/BIL/INT/240314/006O0P2156R",
"label": "No. Transaksi"
},
{
"key": "productName",
"value": "IndiHome",
"label": "Jenis Layanan"
},
{
"key": "beneficiaryNumber",
"value": "1234567890",
"label": "Nomor Pelanggan"
},
{
"key": "beneficiaryName",
"value": " KOMALA DWI HAPSARI ",
"label": "Nama Pelanggan"
},
{
"key": "period",
"value": "MARET",
"label": "Periode Bayar"
},
{
"key": "basicPrice",
"value": "Rp290.500",
"label": "Jumlah Tagihan"
}
]
}
Response Mendapatkan Status Internet dan TV Kabel
{
"id": 1764,
"transactionNumber": "INV/BIL/INT/240314/006O0P2156R",
"type": "INTERNET_TV_KABEL",
"productCode": "INPOTEL0000",
"beneficiaryNumber": "1234567890",
"serviceCharge": 0,
"totalPrice": 293000,
"margin": 0,
"grandTotal": 293000,
"message": null,
"status": "SUCCESS",
"inquiryId": 1472,
"partnerReferenceNo": "1A23F45",
"detailAdditionalData": [
{
"key": "transactionNumber",
"value": "INV/BIL/INT/240314/006O0P2156R",
"label": "No. Transaksi"
},
{
"key": "productName",
"value": "IndiHome",
"label": "Jenis Layanan"
},
{
"key": "beneficiaryNumber",
"value": "1234567890",
"label": "Nomor Pelanggan"
},
{
"key": "beneficiaryName",
"value": " KOMALA DWI HAPSARI ",
"label": "Nama Pelanggan"
},
{
"key": "period",
"value": "MARET",
"label": "Periode Bayar"
},
{
"key": "basicPrice",
"value": "Rp290.500",
"label": "Jumlah Tagihan"
}
]
}
Internet dan TV Kabel adalah produk yang berjenis pascabayar.
5.10 Telkom
Request Inquiry Telkom
{
"beneficiaryNumber": "2222222222",
"productCode": "TEPOTEL0000"
}
Response Inquiry Telkom
{
"id": 1471,
"type": "TELKOM",
"productCode": "TEPOTEL0000",
"serviceCharge": 0,
"totalPrice": 89280,
"margin": 0,
"grandTotal": 89280,
"message": null,
"status": "SUCCESS",
"paymentType": "STATIC",
"detailAdditionalData": [
{
"key": "productName",
"value": "TELKOM",
"label": "Jenis Layanan"
},
{
"key": "beneficiaryNumber",
"value": "2222222222",
"label": "No. Pelanggan"
},
{
"key": "beneficiaryName",
"value": " DIDIN MARZUKI",
"label": "Nama Pelanggan"
},
{
"key": "period",
"value": "MARET, APRIL",
"label": "Periode Bayar"
},
{
"key": "totalPeriod",
"value": "2 Bulan",
"label": "Jumlah Periode Bayar"
},
{
"key": "basicPriceFirst",
"value": "Rp50.920",
"label": "Tagihan Bulan 1"
},
{
"key": "basicPriceSecond",
"value": "Rp35.860",
"label": "Tagihan Bulan 2"
}
]
}
Request Transaksi Telkom
{
"inquiryId": "14721",
"partnerReferenceNo": "1A23F45"
}
Response Transaksi Telkom
{
"id": 1763,
"transactionNumber": "INV/BIL/TEL/240314/006QP7YH0BE",
"type": "TELKOM",
"productCode": "TEPOTEL0000",
"beneficiaryNumber": "2222222222",
"serviceCharge": 0,
"totalPrice": 89280,
"margin": 0,
"grandTotal": 89280,
"message": null,
"status": "PENDING",
"inquiryId": 1471,
"partnerReferenceNo": "1A23F45",
"detailAdditionalData": [
{
"key": "transactionNumber",
"value": "INV/BIL/TEL/240314/006QP7YH0BE",
"label": "No. Transaksi"
},
{
"key": "productName",
"value": "TELKOM",
"label": "Jenis Layanan"
},
{
"key": "beneficiaryNumber",
"value": "2222222222",
"label": "No. Pelanggan"
},
{
"key": "beneficiaryName",
"value": " DIDIN MARZUKI ",
"label": "Nama Pelanggan"
},
{
"key": "period",
"value": "MARET, APRIL",
"label": "Periode Bayar"
},
{
"key": "totalPeriod",
"value": "2 Bulan",
"label": "Jumlah Periode Bayar"
},
{
"key": "basicPriceFirst",
"value": "Rp50.920",
"label": "Tagihan Bulan 1"
},
{
"key": "basicPriceSecond",
"value": "Rp35.860",
"label": "Tagihan Bulan 2"
}
]
}
Response Mendapatkan Status Telkom
{
"id": 1763,
"transactionNumber": "INV/BIL/TEL/240314/006QP7YH0BE",
"type": "TELKOM",
"productCode": "TEPOTEL0000",
"beneficiaryNumber": "2222222222",
"serviceCharge": 0,
"totalPrice": 89280,
"margin": 0,
"grandTotal": 89280,
"message": null,
"status": "SUCCESS",
"inquiryId": 1471,
"partnerReferenceNo": "1A23F45",
"detailAdditionalData": [
{
"key": "transactionNumber",
"value": "INV/BIL/TEL/240314/006QP7YH0BE",
"label": "No. Transaksi"
},
{
"key": "productName",
"value": "TELKOM",
"label": "Jenis Layanan"
},
{
"key": "beneficiaryNumber",
"value": "2222222222",
"label": "No. Pelanggan"
},
{
"key": "beneficiaryName",
"value": "DIDIN MARZUKI",
"label": "Nama Pelanggan"
},
{
"key": "period",
"value": "MARET, APRIL",
"label": "Periode Bayar"
},
{
"key": "totalPeriod",
"value": "2 Bulan",
"label": "Jumlah Periode Bayar"
},
{
"key": "basicPriceFirst",
"value": "Rp50.920",
"label": "Tagihan Bulan 1"
},
{
"key": "basicPriceSecond",
"value": "Rp35.860",
"label": "Tagihan Bulan 2"
}
]
}
Tagihan telkom adalah produk pascabayar untuk pembayaran telkom dan/atau Indihome.
5.11 BPJS Kesehatan
Request Inquiry BPJS Kesehatan
{
"beneficiaryNumber": "8888802883963273",
"productCode": "ASPOBPJ0000",
"periodStart": "2024-03-07",
"periodEnd": "2024-03-07"
}
Response Inquiry BPJS Kesehatan
{
"id": 1422,
"type": "BPJS_KESEHATAN",
"productCode": "ASPOBPJ0000",
"serviceCharge": 0,
"totalPrice": 72500,
"margin": 0,
"grandTotal": 72500,
"message": null,
"status": "SUCCESS",
"paymentType": "STATIC",
"detailAdditionalData": [
{
"key": "transactionType",
"value": "BPJS Kesehatan",
"label": "Jenis Pembayaran"
},
{
"key": "beneficiaryNumber",
"value": "8888802883963273",
"label": "No. BPJS Kesehatan"
},
{
"key": "beneficiaryName",
"value": "Jarister Edwins Silalahi",
"label": "Nama Pemilik"
},
{
"key": "totalMembers",
"value": "2 orang",
"label": "Anggota Keluarga"
}, {
"key": "totalPeriods",
"value": "1 bulan",
"label": "Periode Bayar"
},
{
"key": "basicPrice",
"value": "Rp70.000",
"label": "Jumlah Tagihan"
}
]
}
Request Transaksi BPJS Kesehatan
{
"inquiryId": "1422",
"partnerReferenceNo": "1A23F45",
}
Response Transaksi BPJS Kesehatan
{
"id": 1762,
"transactionNumber": "INV/BIL/ASU/240314/008OORD2ATP",
"type": "BPJS_KESEHATAN",
"productCode": "ASPOBPJ0000",
"beneficiaryNumber": "8888802883963273",
"serviceCharge": 0,
"totalPrice": 72500,
"margin": 0,
"grandTotal": 72500,
"message": null,
"status": "PENDING",
"inquiryId": 1422,
"partnerReferenceNo": "1A23F45",
"detailAdditionalData": [
{
"key": "transactionNumber",
"value": "INV/BIL/ASU/240314/008OORD2ATP",
"label": "No. Transaksi"
},
{
"key": "referenceNumberProvider",
"value": "8BC3CC22FE669563",
"label": "No. Referensi"
},
{
"key": "transactionType",
"value": "BPJS Kesehatan",
"label": "Jenis Pembayaran"
},
{
"key": "beneficiaryNumber",
"value": "8888802883963273",
"label": "No. BPJS Kesehatan"
},
{
"key": "beneficiaryName",
"value": "Jarister Edwins Silalahi",
"label": "Nama Pemilik"
},
{
"key": "totalMembers",
"value": "2 orang",
"label": "Anggota Keluarga"
},
{
"key": "totalPeriods",
"value": "1 bulan",
"label": "Periode Bayar"
},
{
"key": "basicPrice",
"value": "Rp70.000",
"label": "Jumlah Tagihan"
}
]
}
Response Mendapatkan Status BPJS Kesehatan
{
"id": 1762,
"transactionNumber": "INV/BIL/ASU/240314/008OORD2ATP",
"type": "BPJS_KESEHATAN",
"productCode": "ASPOBPJ0000",
"beneficiaryNumber": "8888802883963273",
"serviceCharge": 0,
"totalPrice": 72500,
"margin": 0,
"grandTotal": 72500,
"message": null,
"status": "SUCCESS",
"inquiryId": 1422,
"partnerReferenceNo": "1A23F45",
"detailAdditionalData": [
{
"key": "transactionNumber",
"value": "INV/BIL/ASU/240314/008OORD2ATP",
"label": "No. Transaksi"
},
{
"key": "referenceNumberProvider",
"value": "8BC3CC22FE669563",
"label": "No. Referensi"
},
{
"key": "transactionType",
"value": "BPJS Kesehatan",
"label": "Jenis Pembayaran"
},
{
"key": "beneficiaryNumber",
"value": "8888802883963273",
"label": "No. BPJS Kesehatan"
},
{
"key": "beneficiaryName",
"value": "Jarister Edwins Silalahi",
"label": "Nama Pemilik"
},
{
"key": "totalMembers",
"value": "2 orang",
"label": "Anggota Keluarga"
},
{
"key": "totalPeriods",
"value": "1 bulan",
"label": "Periode Bayar"
},
{
"key": "basicPrice",
"value": "Rp70.000",
"label": "Jumlah Tagihan"
}
]
}
Produk BPJS Kesehatan adalah produk pascabayar pembayaran asuransi kesehatan pemerintah.
5.12 PBB
Request Inquiry PBB
{
"beneficiaryNumber": "357800000003101001",
"productCode": "PBBDKI"
}
Response Inquiry PBB
{
"id": 1491,
"type": "PAJAK_BUMI_BANGUNAN",
"productCode": "PBBDKI",
"serviceCharge": 0,
"totalPrice": 192500,
"margin": 0,
"grandTotal": 192500,
"message": null,
"status": "SUCCESS",
"paymentType": "STATIC",
"detailAdditionalData": [
{
"key": "beneficiaryNumber",
"value": "357800000003101001",
"label": "Nomor Objek Pajak"
},
{
"key": "beneficiaryName",
"value": "WISHNU EKA SIDHARTA",
"label": "Nama Wajib Pajak"
},
{
"key": "year",
"value": "2018",
"label": "Tahun Pajak"
},
{
"key": "productName",
"value": "PBB DKI Jakarta",
"label": "Daerah Pajak"
},
{
"key": "subDistrict",
"value": "Poncokusumo",
"label": "Kecamatan"
},
{
"key": "surfaceArea",
"value": "1519 m2",
"label": "Luas Tanah"
},
{
"key": "buildingArea",
"value": "119 m2",
"label": "Luas Bangunan"
},
{
"key": "dueDate",
"value": "31 Agt 2019",
"label": "Jatuh Tempo"
},
{
"key": "basicPrice",
"value": "Rp190.000",
"label": "Jumlah Tagihan"
}
]
}
Request Transaksi PBB
{
"inquiryId": "1422",
"partnerReferenceNo": "1A23F45",
}
Response Transaksi PBB
{
"id": 1765,
"transactionNumber": "INV/BIL/PAJ/240314/007ABADQ733",
"type": "PAJAK_BUMI_BANGUNAN",
"productCode": "PBBDKI",
"beneficiaryNumber": "357800000003101001",
"serviceCharge": 0,
"totalPrice": 192500,
"margin": 0,
"grandTotal": 192500,
"message": null,
"status": "SUCCESS",
"inquiryId": 1491,
"partnerReferenceNo": "1A23F45",
"detailAdditionalData": [
{
"key": "transactionNumber",
"value": "INV/BIL/PAJ/240314/007ABADQ733",
"label": "No. Transaksi"
},
{
"key": "beneficiaryNumber",
"value": "357800000003101001",
"label": "Nomor Objek Pajak"
},
{
"key": "beneficiaryName",
"value": "WISHNU EKA SIDHARTA",
"label": "Nama Wajib Pajak"
},
{
"key": "year",
"value": "2018",
"label": "Tahun Pajak"
},
{
"key": "productName",
"value": "PBB DKI Jakarta",
"label": "Daerah Pajak"
},
{
"key": "subDistrict",
"value": "Poncokusumo",
"label": "Kecamatan"
},
{
"key": "surfaceArea",
"value": "1519 m2",
"label": "Luas Tanah"
},
{
"key": "buildingArea",
"value": "119 m2",
"label": "Luas Bangunan"
},
{
"key": "dueDate",
"value": "31 Agt 2019",
"label": "Jatuh Tempo"
},
{
"key": "basicPrice",
"value": "Rp190.000",
"label": "Jumlah Tagihan"
}
]
}
Response Mendapatkan Status PBB
{
"id": 1765,
"transactionNumber": "INV/BIL/PAJ/240314/007ABADQ733",
"type": "PAJAK_BUMI_BANGUNAN",
"productCode": "PBBDKI",
"beneficiaryNumber": "357800000003101001",
"serviceCharge": 0,
"totalPrice": 192500,
"margin": 0,
"grandTotal": 192500,
"message": null,
"status": "SUCCESS",
"inquiryId": 1491,
"partnerReferenceNo": "1A23F45",
"detailAdditionalData": [
{
"key": "transactionNumber",
"value": "INV/BIL/PAJ/240314/007ABADQ733",
"label": "No. Transaksi"
},
{
"key": "beneficiaryNumber",
"value": "357800000003101001",
"label": "Nomor Objek Pajak"
},
{
"key": "beneficiaryName",
"value": "WISHNU EKA SIDHARTA",
"label": "Nama Wajib Pajak"
},
{
"key": "year",
"value": "2018",
"label": "Tahun Pajak"
},
{
"key": "productName",
"value": "PBB DKI Jakarta",
"label": "Daerah Pajak"
},
{
"key": "subDistrict",
"value": "Poncokusumo",
"label": "Kecamatan"
},
{
"key": "surfaceArea",
"value": "1519 m2",
"label": "Luas Tanah"
},
{
"key": "buildingArea",
"value": "119 m2",
"label": "Luas Bangunan"
},
{
"key": "dueDate",
"value": "31 Agt 2019",
"label": "Jatuh Tempo"
},
{
"key": "basicPrice",
"value": "Rp190.000",
"label": "Jumlah Tagihan"
}
]
}
Produk PBB adalah produk pascabayar pembayaran pajak bangunan.
6. Product List
Fitur ini digunakan untuk menampilkan list produk
6.1 Protocol & Service Address
contoh cURL request body pada product list partner
curl 'https://sandbox.astrapay.com/v1/mitra-service/products?size=25&page=0' \
-H 'accept: application/json, text/plain, /' \
-H 'accept-language: en-US,en;q=0.9,id;q=0.8' \
-H 'authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzUxMiJ9.eyJzdWIiOiIxMDAwMzY2MiIsImFjY291bnRJZCI6MTg5MCwiYWNjb3VudElkUG9pbnQiOjAsIm5iZiI6MTcxNzY1NjQ5NiwiaXNzIjoiQXN0cmFQYXktRGV2IiwiY2\
Item | Value |
---|---|
Protocol | HTTPS |
Method | POST |
6.2 Request Header
Name | Type | Requirement | Description |
---|---|---|---|
X-PARTNER-ID | String | Mandatory | Client ID Merchant/Partner yang didapat dari AstraPay |
X-TIMESTAMP | String | Mandatory | Waktu lokal Merchant/Partner dalam format yyyy-MM-ddTHH:mm:ssTZD |
X-SIGNATURE | String | Mandatory | Signature untuk mengakses API AstraPay hasil dari generate Signature Service |
X-EXTERNAL-ID | String | Mandatory | Numeric string unik yang hanya dapat digunakan satu kali dalam satu hari. Format yang digunakan adalah: 36 Random Numeric String |
Authorization | String | Mandatory | Bearer token hasil generate dari API Access Token B2B |
Content-Type | String | Mandatory | Tipe konten, data yang dikirim harus selalu application/json |
6.3 Request Body
Name | Type | Requirement | Description |
---|---|---|---|
id | Long | Mandatory | Kode unik produk |
productCode | String | Mandatory | Kode untuk produk (Contoh: PUPRTEL011K) |
provider | Object | Mandatory | Data provider dari sebuah produk |
provider.name | String | Mandatory | Nama provider dari sebuah produk |
provider.code | String | Mandatory | Kode unik provider dari sebuah produk |
provider.paymentType | String | Mandatory | Tipe pembayaran dari sebuah produk (DYNAMIC / STATIC) |
name | String | Mandatory | Nama dari sebuah produk |
status | String | Mandatory | Status dari sebuah produk (ACTIVE / INACTIVE) |
totalPrice | Int | Mandatory | Nominal harga jual dari AstraPay |
margin | Int | Mandatory | Keuntungan yang didapatkan Merchant |
grandTotal | Int | Mandatory | Nominal harga jual yang ditambahkan margin (Rumus: totalPrice + margin) |
transactionType | Object | Mandatory | Data tipe transaksi dari sebuah produk |
transactionType.type | String | Mandatory | Tipe transaksi yang ada pada AstraPay(ANGSURAN, PULSA, PAKET_DATA, PASCABAYAR, dan lain-lain) |
6.4 Response Status Code
contoh response product
{
"content": [
{
"id": 111,
"productCode": "PUPRPAKETDATA",
"provider": {
"name": "Telkomsel",
"code": "TELKOMSEL",
"paymentType": "STATIC"
},
"name": "PAKET DATA TELKOMSEL 20 MB",
"status": "ACTIVE",
"totalPrice": 25010,
"margin": 0,
"grandTotal": 25010,
"transactionType": {
"type": "PAKET_DATA",
"description": "Pulsa"
}
},
{
"id": 104,
"productCode": "PUPPTELHALO",
"provider": {
"name": "Telkomsel",
"code": "TELKOMSEL",
"paymentType": "STATIC"
},
"name": "Telkomsel HALO",
"status": "ACTIVE",
"totalPrice": 0,
"margin": 0,
"grandTotal": 0,
"transactionType": {
"type": "PASCABAYAR",
"description": "Pascabayar"
}
},
{
"id": 108,
"productCode": "PUPRTHR001K",
"provider": {
"name": "THREE",
"code": "THREE",
"paymentType": "STATIC"
},
"name": "Three 1K",
"status": "ACTIVE",
"totalPrice": 1700,
"margin": 0,
"grandTotal": 1700,
"transactionType": {
"type": "PULSA",
"description": "Pulsa"
}
},
{
"id": 103,
"productCode": "PUPRTEL025K",
"provider": {
"name": "Telkomsel",
"code": "TELKOMSEL",
"paymentType": "STATIC"
},
"name": "Telkomsel 25rb",
"status": "ACTIVE",
"totalPrice": 24550,
"margin": 250,
"grandTotal": 24800,
"transactionType": {
"type": "PULSA",
"description": "Pulsa"
}
},
{
"id": 109,
"productCode": "PUPRSMA020K",
"provider": {
"name": "SMARTFREN",
"code": "SMARTFREN",
"paymentType": "STATIC"
},
"name": "Smartfren 20K",
"status": "ACTIVE",
"totalPrice": 20000,
"margin": 0,
"grandTotal": 20000,
"transactionType": {
"type": "PULSA",
"description": "Pulsa"
}
},
{
"id": 72,
"productCode": "FIF",
"provider": {
"name": "FIFGROUP",
"code": "FIF",
"paymentType": "DYNAMIC"
},
"name": "Biller FIF",
"status": "ACTIVE",
"totalPrice": 0,
"margin": 0,
"grandTotal": 0,
"transactionType": {
"type": "ANGSURAN",
"description": "Angsuran"
}
},
{
"id": 70,
"productCode": "ACC",
"provider": {
"name": "ACC",
"code": "ACC",
"paymentType": "STATIC"
},
"name": "ACC",
"status": "ACTIVE",
"totalPrice": 0,
"margin": 0,
"grandTotal": 0,
"transactionType": {
"type": "ANGSURAN",
"description": "Angsuran"
}
},
{
"id": 105,
"productCode": "PLPRPLN020K",
"provider": {
"name": "PLN",
"code": "PLN",
"paymentType": "STATIC"
},
"name": "20.000",
"status": "ACTIVE",
"totalPrice": 21000,
"margin": 0,
"grandTotal": 21000,
"transactionType": {
"type": "TOKEN_LISTRIK",
"description": "Token Listrik"
}
},
{
"id": 106,
"productCode": "PLPRPLN050K",
"provider": {
"name": "PLN",
"code": "PLN",
"paymentType": "STATIC"
},
"name": "50.000",
"status": "ACTIVE",
"totalPrice": 50400,
"margin": 0,
"grandTotal": 50400,
"transactionType": {
"type": "TOKEN_LISTRIK",
"description": "Token Listrik"
}
},
{
"id": 69,
"productCode": "MAUCASH",
"provider": {
"name": "MAUCASH",
"code": "MAUCASH",
"paymentType": "STATIC"
},
"name": "MAUCASH",
"status": "ACTIVE",
"totalPrice": 0,
"margin": 0,
"grandTotal": 0,
"transactionType": {
"type": "ANGSURAN",
"description": "Angsuran"
}
},
{
"id": 110,
"productCode": "PUPRTEL020K",
"provider": {
"name": "Telkomsel",
"code": "TELKOMSEL",
"paymentType": "STATIC"
},
"name": "Telkomsel 20rb",
"status": "ACTIVE",
"totalPrice": 20200,
"margin": 800,
"grandTotal": 21000.0000,
"transactionType": {
"type": "PULSA",
"description": "Pulsa"
}
},
Status | Description |
---|---|
2xx | Partner harus memberikan response status code 2xx |
7. Product Notification
Fitur ini akan memberi tahu partner jika ada perubahan harga dari AstraPay.
7.1 Protocol & Service Address
contoh cURL request body pada product notification partner
curl --location 'https://partner.com/product/callback' \
--header 'x-timestamp: 2020-01-01T00:00:00' \
--header 'Content-Type: application/json' \
--data '
{
"id": 680,
"productCode": "PDPOPDA0000",
"provider": {
"name": "PDAM",
"code": "PDAM",
"paymentType": "STATIC"
},
"name": "PDAM",
"status": "ACTIVE",
"totalPrice": 24150,
"margin": 0,
"grandTotal": 24150,
"transactionType": {
"type": "TAGIHAN_AIR",
"description": "Tagihan Air"
}
}'
Item | Value |
---|---|
Protocol | HTTPS |
Method | POST |
7.2 Request Header
Name | Type | Requirement | Description |
---|---|---|---|
X-TIMESTAMP | String | Mandatory | Waktu lokal Merchant/Partner dalam format yyyy-MM-ddTHH:mm:ssTZD |
Content-Type | String | Mandatory | Tipe konten, data yang dikirim harus selalu application/json |
7.3 Request Body
Name | Type | Requirement | Description |
---|---|---|---|
id | Int | Mandatory | Kode unik produk |
productCode | String | Mandatory | Kode untuk produk (Contoh: PUPRTEL011K) |
provider | Object | Mandatory | Data provider dari sebuah produk |
provider.name | String | Mandatory | Nama provider dari sebuah produk |
provider.code | String | Mandatory | Kode unik provider dari sebuah produk |
provider.paymentType | String | Mandatory | Tipe pembayaran dari sebuah produk (DYNAMIC / STATIC) |
name | String | Mandatory | Nama dari sebuah produk |
status | String | Mandatory | Status dari sebuah produk (ACTIVE / INACTIVE) |
totalPrice | Int | Mandatory | Nominal harga jual dari AstraPay |
margin | Int | Mandatory | Keuntungan yang didapatkan Merchant |
grandTotal | Int | Mandatory | Nominal harga jual yang ditambahkan margin (Rumus: totalPrice + margin) |
transactionType | Object | Mandatory | Data tipe transaksi dari sebuah produk |
transactionType.type | String | Mandatory | Tipe transaksi yang ada pada AstraPay(ANGSURAN, PULSA, PAKET_DATA, PASCABAYAR, dan lain-lain) |
transactionType.description | String | Mandatory | Deskripsi dari sebuah tipe transaksi |
7.4 Response Status Code
Status | Description |
---|---|
2xx | Partner harus memberikan response status code 2xx |
8. Callback
Dibawah ini merupakan spesifikasi API Callback yang harus disiapkan oleh merchant untuk mendapatkan pembaruan status transaksi.
8.1 Protocol & Service Address
contoh cURL request body pada callback partner
curl --location 'https://partner.com/transaction/callback' \
--header 'x-timestamp: 2020-01-01T00:00:00' \
--header 'Content-Type: application/json' \
--data '
{
"id": 1762,
"transactionNumber": "INV/BIL/ASU/240314/008OORD2ATP",
"type": "BPJS_KESEHATAN",
"productCode": "ASPOBPJ0000",
"beneficiaryNumber": "8888802883963273",
"totalPrice": 72500,
"margin": 0,
"grandTotal": 72500,
"message": null,
"status": "SUCCESS",
"inquiryId": 1422,
"partnerReferenceNo": "1A23F45",
"detailAdditionalData": [
{
"key": "transactionNumber",
"value": "INV/BIL/ASU/240314/008OORD2ATP",
"label": "No. Transaksi"
},
{
"key": "referenceNumberProvider",
"value": "8BC3CC22FE669563",
"label": "No. Referensi"
},
{
"key": "transactionType",
"value": "BPJS Kesehatan",
"label": "Jenis Pembayaran"
},
{
"key": "beneficiaryNumber",
"value": "8888802883963273",
"label": "No. BPJS Kesehatan"
},
{
"key": "beneficiaryName",
"value": "Jarister Edwins Silalahi",
"label": "Nama Pemilik"
},
{
"key": "totalMembers",
"value": "2 orang",
"label": "Anggota Keluarga"
},
{
"key": "totalPeriods",
"value": "1 bulan",
"label": "Periode Bayar"
},
{
"key": "basicPrice",
"value": "Rp70",
"label": "Jumlah Tagihan"
}
]
}
'
Item | Value |
---|---|
Protocol | HTTPS |
Method | POST |
8.2 Request Header
Name | Type | Requirement | Description |
---|---|---|---|
X-TIMESTAMP | String | Mandatory | Waktu lokal Merchant/Partner dalam format yyyy-MM-ddTHH:mm:ssTZD |
Content-Type | String | Mandatory | Tipe konten, data yang dikirim harus selalu application/json |
8.3 Request Body
Name | Type | Requirement | Description |
---|---|---|---|
id | Int | Mandatory | Kode unik hasil transaksi |
transactionNumber | Int | Mandatory | Kode unik transaksi yang di generate oleh AstraPay |
type | String | Mandatory | Kode untuk kategori produk (Contoh: PULSA) |
productCode | String | Mandatory | Kode untuk produk (Contoh: PUPRTEL011K) |
totalPrice | Int | Mandatory | Nominal harga jual dari AstraPay |
partnerReferenceNo | String | Mandatory | ID transaksi pada Merchant/Partner |
beneficiaryNumber | String | Mandatory | Data yang diinput di form field (Contoh: Nomor telepon, Token listrik, dst.) |
margin | Int | Mandatory | Keuntungan yang didapatkan Merchant |
grandTotal | Int | Mandatory | Nominal harga jual yang ditambahkan margin (Rumus: totalPrice + margin) |
message | String | Optional | Pesan yang dimunculkan ketika terjadi error |
status | String | Mandatory | Status Transaksi (SUCCESS / PENDING / VOID ) |
inquiryId | String | Mandatory | Kode unik hasil inquiry untuk transaksi |
detailAdditionalData | Object | Mandatory | Data tambahan dari inquiry |
detailAdditionalData.key | String | Optional | Kata kunci untuk penunjuk data |
detailAdditionalData.value | String | Optional | Response data |
detailAdditionalData.label | String | Optional | Label keterangan data |
8.4 Response Status Code
Status | Description |
---|---|
2xx | Partner harus memberikan response status code 2xx |
9. Response list
Dibawah ini merupakan daftar response code yang akan muncul. Format “xx” dalam Response Code diisikan dengan Service Code dari masing-masing api.
9.1 Authentication
Contoh Response error Autentikasi
{
"responseCode": "4017300",
"responseMessage": "Unauthorized. Invalid Client ID or Client Secret or Signature"
}
Response Code | Response Message | Description |
---|---|---|
404xx08 | Invalid Merchant | Client ID atau Merchant ID tidak ditemukan |
200xx00 | Successful | Sukses |
400xx00 | Bad Request | Pesan umum yang akan diterima ketika permintaan gagal/tidak sesuai |
500xx00 | General Error | General Error |
401xx01 | Invalid Token (B2B) | Request token invalid |
401xx00 | Unauthorized. Signature | Invalid signature |
409xx00 | Conflict | Menggunakan X-EXTERNAL-ID yang sama di hari yang sama |
400xx01 | Invalid Field Format X-TIMESTAMP | Format field X-TIMESTAMP salah |
400xx01 | Invalid Field Format X-EXTERNAL-ID | Format field X-EXTERNAL-ID salah |
400xx02 | Invalid Field Format X-TIMESTAMP | X-TIMESTAMP tidak ada atau tidak lengkap |
400xx02 | Invalid Field Format X-EXTERNAL-ID | X-EXTERNAL-ID tidak ada atau tidak lengkap |
400xx02 | Invalid Field Format X-PARTNER-ID | X-PARTNER-ID tidak ada atau tidak lengkap |
9.2 Inquiry & Transaction
Contoh Response Error Inquiry & Transaction dengan code InquiryExists
{
"status": 400,
"message": "save.requestDto.inquiryId: Inquiry not found.",
"error": "Bad Request",
"path": "/v1/mitra-service/transactions",
"timestamp": "2023-12-14T15:06:24.985970",
"details": [
{
"code": "InquiryExists",
"objectName": "InquiryExists",
"defaultMessage": "Inquiry not found.",
"field": "inquiryId",
"rejectedValue": 1235,
"additionalData": null
}
]
}
Contoh Response Error Inquiry & Transaction dengan code BILL_ALREADY_PAID
{
"status": 400,
"message": "Tagihan sudah terbayar.",
"error": "Bad Request",
"path": "/v1/mitra-service/inquiries",
"details": [
{
"code": "BILL_ALREADY_PAID",
"objectName": null,
"defaultMessage": "Tagihan sudah terbayar.",
"field": null,
"rejectedValue": null,
"additionalData": []
}
]
}
Status | Code | Description |
---|---|---|
200 | Inquiry/transaksi terdaftar | |
201 | Inquiry/transaksi berhasil terbuat | |
400 | InquiryExists | Hasil inquiry tidak ditemukan |
400 | UserIsAgent | User merupakan bukan Agen |
400 | ProductIsActive | Produk sedang tidak aktif |
400 | InsufficientBalance | Saldo agen tidak mencukupi |
400 | CONTRACT_NOT_FOUND | Beneficiary number tidak ditemukan yang dapat disebabkan oleh nomor sudah tidak terdaftar, tidak aktif, atau terdapat kesalahan dalam pengetikan (typo) |
400 | BILL_ALREADY_PAID | Tagihan sudah dibayarkan dan tagihan yang baru belum terbit atau belum bisa dibayarkan |
400 | PRODUCT_NOT_AVAILABLE | Produk sedang tidak tersedia |
400 | PRODUCT_INVALID | Terdapat kesalahan dalam setting produk sehingga kode produk atau yang lainnya salah |
400 | PRICE_INVALID | Kesalahan dalam setting produk sehingga harga tidak sesuai |
400 | OPERATOR_ISSUE | Kegagalan yang terjadi yang disebabkan oleh operator |
400 | CUT_OFF | Kegagalan yang terjadi karena di luar jam operasional, biasanya berasal dari operator yang seringnya terjadi ketika transaksi tengah malam |
400 | LAST_INSTALLMENT_FIF | Pembayaran tidak dapat dilakukan melalui sistem AstraPay karena merupakan angsuran terakhir sehingga harus datang langsung ke cabang FIFGROUP |
400 | LAST_INSTALLMENT_TAF | Pembayaran tidak dapat dilakukan melalui sistem AstraPay karena merupakan angsuran terakhir sehingga harus datang langsung ke cabang TAF |
400 | OVERDUE_TAF | Pembayaran tidak dapat dilakukan melalui sistem AstraPay, karena merupakan angsuran yang jatuh tempo sehingga harus datang langsung ke cabang TAF |
400 | BLOCKED_NUMBER | Pembayaran tidak dapat dilakukan karena nomor telah diblokir oleh operator |
400 | KWH_EXCEED_LIMIT | Jumlah KWH (kilowatt-hour) melebihi batasan yang telah ditentukan PLN (biasanya di token listrik) dan setiap pelanggan batasannya berbeda-beda |
400 | SYSTEM_FAILED | Error sistem terkait server, IP, dan lain-lain yang seharusnya dapat diperbaiki |
400 | FAILED | Error general yang tidak dapat diketahui jelas penyebab errornya |
FAQ
Payment Channel
No | Pertanyaan | Jawaban |
---|---|---|
1. | Apa saja yang harus merchant lakukan sebelum memulai integrasi? | Merchant melakukan pendaftaran ke [email_partnership] kemudian memberikan informasi berupa data PIC (nama, brand bisnis, alamat, SIUP, NPWP untuk proses Know Your Business(KYB). |
2. | Bagaimana saya bisa mendapatkan credential merchant? | Merchant dapat mendaftarkan Nama, e-mail, Callback URL, Default URL development kepada Tim AstraPay. Kemudian Tim AstraPay akan memberikan Credential berupa clientId dan clientSecret untuk melakukan development integrasi. |
3. | Bagaimana saya bisa melakukan integrasi? | Setelah mendapatkan Credential dari Tim AstraPay, Merchant mulai dapat melakukan development integrasi menggunakan Credential yang diberikan |
4. | Apa yang perlu saya siapkan untuk deploy ke Production setelah development integrasi selesai? | Merchant dapat memberikan data sesuai Jawaban no.2 untuk versi production ke Tim AstraPay. Setelah itu Tim AstraPay akan memberikan clientId dan clientSecret untuk Production Environment |
5. | Apa itu Callback di AstraPay? | Callback kami definisikan sebagai proses notifikasi dari sistem AstraPay kepada sistem Merchant bahwa suatu proses yang dilakukan merchant (Payment, Account Link) telah berhasil |
Maintenance and Support
Overview QRIS SDK
Dokumen ini menjelaskan kebijakan maintenance untuk penggunaan Software Development Kit (SDK) AstraPay QRIS. AstraPay secara berkala memperbarui SDK dan API yang terintegrasi untuk memperkenalkan fitur baru, melakukan perbaikan, dan melakukan pemeliharaan pada fitur yang sudah ada. Setiap versi QRIS SDK akan dipublikasikan di Maven (Android) dan CocoaPods (iOS) serta didokumentasikan di dokumentasi API kami.
Partner SDK adalah pihak yang menggunakan SDK QRIS AstraPay dengan mengintegrasikan layanan pembayaran QRIS AstraPay ke dalam aplikasi/brand. Kami sangat menyarankan partner SDK untuk tetap memantau perkembangan rilis SDK agar dapat memanfaatkan perkembangan fitur terbaru.
Versioning
Versi rilis SDK AstraPay QRIS mengikuti format X.Y.Z (Major.Minor.Patch).
- Peningkatan versi major terjadi ketika terdapat perubahan signifikan pada SDK, seperti perubahan yang tidak backward compatible kepada API yang terintegrasi. Versi SDK sebelumnya tidak dapat digunakan, sehingga partner SDK harus memperbarui versi SDK ke yang terbaru. Kami mendorong partner SDK untuk berhati-hati dan melakukan pengujian yang seksama saat memperbarui major version SDK.
- Peningkatan versi minor dilakukan ketika ada penambahan fitur ataupun perubahan design yang tidak mengganggu fungsionalitas versi SDK sebelumnya.
- Peningkatan versi patch dilakukan untuk perbaikan yang backward compatible.
Catatan : Atas peningkatan versi minor maupun patch, partner SDK tetap disarankan untuk menggunakan versi terbaru dan memperbarui versi SDK mereka dengan seksama.
Phases
Setiap versi minor SDK AstraPay dibagi menjadi tiga fase:
- Available
- Sunset: SDK telah mencapai akhir masa pakai dan tidak dapat lagi digunakan.
- Deprecated: SDK masih dapat digunakan oleh partner SDK yang saat ini menggunakan versi tersebut. Setiap co-brand diharapkan untuk memperbarui ke versi SDK terbaru pada tanggal Sunset yang telah ditentukan. Co-brand baru disarankan untuk tidak mengintegrasikan versi SDK yang telah deprecated.
Communication Method
Kami akan mengkomunikasikan rilis kami melalui beberapa metode:
- Pemberitahuan melalui email akan dikirimkan kepada PIC partner SDK untuk pembaruan major maupun minor versions.
- Dokumentasi rilis dapat ditemukan di https://astrapay.com/docs/api.