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 : 19 Januari 2023
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 -nocrypte
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
Access Token
Protocol dan Service Address
Item | Value |
---|---|
Protocol | HTTPS |
Verb | POST |
API Name | B2B Access Token Request |
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",
"additionalInfo": {
"clientSecret": "xxxxxoiEpZGXE9hKaR8gmdxxxxxxxxxx"
}
}'
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 |
additionallInfo | Object | Optional | Informasi Tambahan |
clientSecret | String | Mandatory | Merchant/Partner Client Secret |
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
4. Pihak AstraPay kemudian akan mengirimkan email untuk kelanjutan proses integrasi menggunakan API SNAP secara teknis.
5. Merchant dapat melanjutkan development untuk integrasi. Merchant yang sebelumnya sudah integrasi dapat melihat Panduan Migrasi Menggunakan API SNAP.
6. Apabila development sudah selesai, Merchant diharapkan untuk menghubungi AstraPay.
7. AstraPay akan mengirimkan dokumen yang harus diisikan oleh Merchant terkait Integrasi.
8. Dokumen yang sudah diisikan akan di review oleh Pihak AstraPay
9. Setelah direview, pihak AstraPay akan menghubungi Merchant terkait kebutuhan environment Production & akses Dashboard Merchant.
10. Apabila Merchant sudah siap untuk live ke Production, Merchant diharapkan memberi tahu Pihak AstraPay.
11. 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:
1. 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
- 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
Cara mendapatkan Client Id dan Client Secret:
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 seqeunce diagram untuk proses binding:
Layanan ini terdiri dari 2 API, diantaranya:
Nama API | Deskripsi |
---|---|
API Get OAuth URL | 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 Get OAuth URL
API ini digunakan untuk mendapatkan Auth Code.
Protocol & Service Address
Item | Value |
---|---|
Protocol | HTTPS |
Service Code | 10 |
Channel ID | 01310 |
Method | GET |
URL Sandbox | /snap-service/snap/v1.0/get-auth-code |
Content-Type | application/json |
Request Parameter
Berikut adalah query param yang dibutuhkan untuk request parameter API ini:
Cara Menyertakan SeamlessData
seamlessData = URLEncode({"mobileNumber":"081111111111","externalUid":"AP365gd89j898"})
Cara Menyertakan SeamlessSign
seamlessSign = URLEncode(Base64.encode(sign(seamlessData,privateKey)))
Request Sample
GET .../snap-service/snap/v1.0/get-auth-code?timestamp=2023-02-27T07:10:15+07:00&partnerId=c18ec35f-57d6-4f69-b97e-b2ef2ce78abb&externalId=6013101234602&channelId=01310&state=WodkkwijSDs&scopes=QUERY_BALANCE,PUBLIC_ID&redirectUrl=https%3A%2F%2Fmerchant.com%2Fcallback&seamlessData=%257B%2522externalUid%2522%253A%2522merchantUserId123%2522%257D&seamlessSign=aABQPCWkFoj%252BtJkPcyYq
Field | Type | Requirement | Description |
---|---|---|---|
timestamp | String | Mandatory | Waktu lokal Merchant/Partner dalam format yyyy-MM-ddTHH:mm:ssTZD |
partnerId | String | Mandatory | Client ID Merchant/Partner yang didapat dari AstraPay |
externalId | String | Mandatory | Numeric string unik yang hanya dapat digunakan satu kali dalam satu hari. Format yang digunakan adalah: 36 Random Numeric String |
channelId | String | Mandatory | ID dari service yang mengakses API Get OAuth URL (01310) |
redirectUrl | String | Mandatory | URL yang digunakan sebagai callback setelah proses getAuthCode berhasil |
scopes | List | Mandatory | Scope akses dari authorization yang di inginkan |
state | String | Mandatory | Random string untuk keperluan perlindungan terhadap CSRF |
seamlessData | String | Mandatory | Data yang diperuntukan untuk mempercepat proses otentikasi |
mobileNumber | String | Optional | Nomor HP customer |
externalUid | String | Mandatory | Id milik user pada aplikasi partner (Merchant user Id) |
seamlessSign | String | Mandatory | Signature dari seamless data yang disertakan |
Response Parameter
Berikut adalah query param yang dibutuhkan untuk response parameter API ini:
Response Sample
https://www.merchant.com/oauth/callback?responseCode=2001000&responseMessage=Successful&authCode=a4sd5a4fsaf5d5f4df66ad85f4&state=WodkkwijSDs
Field | Type | Requirement | Description |
---|---|---|---|
responseCode | String | Mandatory | Lihat response list |
responseMessage | String | Mandatory | Lihat response list |
authCode | String | Mandatory | AuthCode yang didapatkan setelah user berhasil melakukan login |
state | String | Mandatory | Random string untuk keperluan perlindungan terhadap CSRF |
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 | Auth Code sudah pernah dipakai |
4017400 | authCode expired | Auth Code sudah kedaluwarsa |
4017400 | refreshToken invalid | Refresh Token tidak sesuai |
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 (BETA)
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 B2B Access Token Request |
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/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",
"amount": {
"value": "10000",
"currency": "IDR"
},
"additionalInfo": {
"description": "Buy Starbucks"
}
}'
Field | Type | Requirement | Description |
---|---|---|---|
partnerReferenceNo | String | Mandatory | Id transaksi yang pada Merchant/Partner |
amount | String | Mandatory | - |
value | String (ISO4217) | Mandatory | Jumlah bersih transaksi yang diterima termasuk 2 digit decimal. Cth: 10000.00 |
currency | String | Mandatory | Mata Uang |
additionalInfo | Object | Mandatory | Informasi Tambahan |
description | String | Mandatory | Deskripsi |
Response Body
Contoh Response
{
"responseCode":"2005400",
"responseMessage":"Successful",
"partnerReferenceNo":"2020102900000000000001",
"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 yang pada Merchant/Partner |
webRedirectUrl | String | Mandatory | https://sandbox.astrapay.com/merchant-service/payments/1c74a043-a28d-4826-a175-0bba189a83fd |
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 B2B Access Token Request |
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 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":"55",
"amount":{
"value":"100000",
"currency":"IDR"
}
}'
Field | Type | Requirement | Description |
---|---|---|---|
originalPartnerReferenceNo | String | Mandatory | ID transaksi dari Merchant/Partner (Merchant/Partner Transaction Id) |
originalReferenceNo | String | Optional | AstraPay Transaction ID |
serviceCode | String | Mandatory | Kode service yang diakses |
amount | Object | Mandatory | - |
value | String (ISO4217) | 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) |
Response Body
Contoh Response
{
"responseCode":"2005500",
"responseMessage":"Request has been processed successfully",
"originalPartnerReferenceNo":"2020102900000000000001", //merchantTransactionId
"originalReferenceNo":"2020102977770000000009",
"serviceCode":"55",
"latestTransactionStatus":"00",
"refundHistory":[
{
"refundNo":"96194816941239812",
"partnerReferenceNo":"239850918204981205970",
"refundAmount":{
"value":"12345678.00",
"currency":"IDR"
},
"refundStatus":"00",
"refundDate":"2020-12-23T07:44:16+07:00",
"reason":"Sayur 1 hilang"
},
{
"refundNo":"96194123981251341",
"partnerReferenceNo":"2398509123131981205970",
"refundAmount":{
"value":"112345678.00",
"currency":"IDR"
},
"refundStatus":"00",
"refundDate":"2020-12-23T07:54:16+07:00",
"reason":"Sayur 2 rusak"
}
],
"transAmount":{
"value":"112345678.00",
"currency":"IDR"
},
"feeAmount":{
"value":"112345678.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 | AstraPay Transaction ID |
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 | - |
value | String(ISO4217) | Mandatory | Jumlah Net dari refund. Contoh: total refund IDR10.000, menjadi 10000,00 (2 nol di belakang koma) |
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 | - |
value | String(ISO4217) | Mandatory | Jumlah transaksi yang dibayarkan. Contoh: transaksi IDR10.000, menjadi 10000,00 (2 nol di belakang koma) |
currency | String | Mandatory | Kode mata uang berdasarkan ISO (IDR) |
feeAmount | Object | Mandatory | - |
value | String(ISO4217) | Mandatory | Jumlah biaya layanan yang dibayarkan. Contoh: total biaya layanan IDR10.000, menjadi 10000,00 (2 nol di belakang koma) |
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 B2B Access Token Request |
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":"dcb60ae4-4d38-11ec-81d3-0242ac130003",
"amount":{
"value":"3000.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 | clientId |
amount | String | Mandatory | - |
value | String(ISO4217) | Mandatory | Jumlah bersih transaksi yang diterima termasuk 2 digit decimal. Cth: 10000.00 |
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 (BETA)
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 B2B Access Token Request |
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-servic |
X-SIGNATURE | String | Mandatory | Signature untuk API 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 unik yang hanya dapat digunakan satu kali dalam satu hari satu kali dalam satu hari untuk membedakan tiap request API yang diterima. Maximum 36 digit dengan format “5 digit channel id + 31 numeric string unik” |
CHANNEL-ID | String | Mandatory | ID dari service yang mengakses API 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 eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICIzTF9udFF6MGZsNjl5UHB4T2RBTDk3NDNGOU05UWszVklTOWMwZGNwa2VFIn0' \
--header 'Content-Type: application/json' \
--header 'X-TIMESTAMP: 2020-01-01T00:00:00+07:00' \
--header 'X-SIGNATURE: lD0iXRtzEyJ8VmyDLPcm9zHfTXXn0OnhbI6pB6fd6q6FSw6XQt9IwGG/PNm38ouJDVd15Y8Y8XIKnxLiCe/pUQ==' \
--header 'X-PARTNER-ID: c18ec35f-57d6-4f69-b97e-b2ef2ce78abb' \
--header 'X-EXTERNAL-ID: 12345678901' \
--header 'CHANNEL-ID: 305' \
--data-raw '{
"originalPartnerReferenceNo":"TESTNG-PAYMENT-INQUIRY 1",
"originalReferenceNo":"INV/PAC/ONP/221019/26CSJKHFU13",
"partnerRefundNo":"PARTNER/NO/123/011/1",
"refundAmount":{
"value": "10000.00",
"currency":"IDR"
},
"reason":"Test refund"
}'
Field | Type | Requirement | Description |
---|---|---|---|
OriginalPartnerReferenceNo | String | Mandatory | Id transaksi dari Merchant/Partner (Merchant Transaction Id) |
OriginalReferenceNo | String | Mandatory | AstraPay Transaction ID |
partnerRefundNo | String | Mandatory | Nomor refund dari Merchant/Partner |
refundAmount | Object | Mandatory | - |
value | String(ISO4217) | Mandatory | Jumlah saldo yang dikembalikan |
currency | String | Mandatory | Mata Uang |
reason | String | Mandatory | Alasan pengembalian saldo |
Response Body
Contoh Response
{
"responseCode":"2005800",
"responseMessage":"Request In Progress",
"originalPartnerReferenceNo":"2020102900000000000001",
"originalReferenceNo":"2020102977770000000009",
"refundNo":"REF993883",
"partnerRefundNo":"239850918204981205970",
"refundAmount":{
"value":"10000.00",
"currency":"IDR"
},
"refundTime":"2020-12-21T17:21:41+07:00",
"additionalInfo":{
"reason":"Customer Complaint"
},
}
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 | AstraPay Transaction ID |
refundNo | String | Mandatory | AstraPay Transaction ID |
OriginalReferenceNo | String | Mandatory | Nomor pengembalian dana yang di generate oleh AstraPay |
partnerRefundNo | String | Mandatory | Nomor pengembalian dana dari Partner/Merchant |
refundAmount | Object | Mandatory | - |
value | String(ISO4217) | Mandatory | Jumlah saldo yang dikembalikan |
currency | String | Mandatory | Mata Uang |
refundTime | String | Mandatory | Waktu pengembalian saldo diajukan |
additionalInfo | Object | Mandatory | Informasi Tambahan |
reason | String | Mandatory | Alasan pengembalian dana |
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 B2B Access Token Request |
Authorization-Customer | String | Mandatory | Akses token milik customer hasil generate dari API Access Token B2B2C |
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"]
}'
Field | Type | Requirement | Description |
---|---|---|---|
balanceTypes | Array of String | Mandatory | Menentukan jenis saldo customer yang ingin ditampilkan (Untuk AstraPay saat ini hanya ada jenis saldo "balance") |
balance | String | Mandatory | Jenis saldo |
Response Body
Contoh Response
{
"responseCode":"2001100",
"responseMessage":"Successful",
"accountInfo":[
{
"balanceType":"BALANCE",
"amount":{
"value":"200000.00",
"currency":"IDR"
}
}
]
}
Field | Type | Requirement | Description |
---|---|---|---|
responseCode | String | Mandatory | Lihat response list |
responseMessage | String | Mandatory | Lihat response list |
accountInfo | List | Optional | Berisikan informasi mengenai saldo customer |
balanceType | String | Mandatory | Jenis Saldo |
amount | Object | Optional | - |
value | String (ISO4217) | Mandatory | Jumlah bersih transaksi yang diterima |
currency | String | Mandatory | Mata uang |
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 |
---|---|---|
404xx08 | Invalid Merchant | Client id tidak ditemukan |
200xx00 | Successful | Sukses |
400xx00 | Bad Request | Pesan general 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 |
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 |
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 | Request in Progress | Refund sedang di proses |
4045801 | Transaction Not Found | Transaksi tidak ditemukan |
4045801 | Invalid Transaction Status | Transaksi belum disetujui |
4005800 | Bad Request. originalPartnerReferenceNo | Transaksi refund sudah pernah diproses |
4005800 | Bad Request. partnerRefundNo | Partner refund number kosong/sudah tersedia |
4005800 | Bad Request. Refund Has Been Successful | Transaksi refund sudah sukses |
4005800 | Bad Request. Refund Has Been Processing | Transaksi refund sedang diproses |
4035806 | Feature Not Allowed At This Time. It’s Because refund request not refundable | Transaksi belum bisa dilakukan refund |
2025800 | Feature Not Allowed At This Time. Refund request must not be expired | Transaksi tidak bisa diproses karena sudah kedaluwarsa (30 hari) |
Response List Balance Inquiry
Response Code | Response Message | Description |
---|---|---|
4011101 | Invalid Token B2B2C | Request Token B2B2C invalid |
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 |
---|---|
B2B Access Token Request | 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 Get OAuth URL | Digunakan untuk mendapatkan AuthCode |
Daftar Perubahan API sesuai SNAP AstraPay
Fungsi | API Sebelumnya | SNAP AstraPay |
---|---|---|
Menghubungkan account customer dengan AstraPay | API Account Link and Registration | - API Get OAuth URL - API Access Token B2B2C |
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 BETA | 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 V1.0
Selamat datang di dokumentasi AstraPay QRIS Dynamic dengan standar SNAP BI.
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:
- 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
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
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" : "57",
"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 | Kode service yang diakses (51) |
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": "51",
"latestTransactionStatus": "00",
"transactionStatusDesc": "SUCCESS",
"paidTime": "2022-10-12T11:09:10.912333",
"amount": {
"value": "1.00",
"currency": "IDR"
},
"terminalId": "5142",
"additionalInfo": {
"tip": "0.00"
}
}
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 | Kode service yang diakses (51) |
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”. |
Payment Notification(Callback)
Catatan : Merchant diharapkan membuat API callback (Payment Notification) 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
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]/v1.0/qr/qr-mpm-notify |
Request Body
Contoh cURL Callback
POST …/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
KYC Auto-Preferred Astrapay by MauPaylater
1. Flow Diagram Auto-Preferred
Berikut adalah alur gambaran proses auto-preferred customer Astrapay
2. Authorization and API Specification
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
Jika status 'ACTIVE'
Sample Body Request
{
"phoneNumber" : "08778000123",
"status" : "ACTIVE",
"rejectReason" : "Data telah sesuai",
"reapplyDate" : "2022-10-17"
}
Sample Response
{
"phoneNumber" : "08778000123",
"status" : "ACTIVE",
"rejectReason" : "Data telah sesuai",
"reapplyDate" : "2022-10-17"
}
Jika status 'REJECTED'
Sample Body Request
{
"phoneNumber" : "08778000123",
"status" : "REJECTED",
"rejectReason" : "Data tidak sesuai",
"reapplyDate" : "2022-10-17"
}
Sample Response
{
"phoneNumber" : "08778000123",
"status" : "REJECTED",
"rejectReason" : "Data tidak sesuai",
"reapplyDate" : "2022-10-17"
}
Jika status 'BLOCKED'
Sample Body Request
{
"phoneNumber" : "08778000123",
"status" : "BLOCKED",
"rejectReason" : "",
"reapplyDate" : "2022-10-17"
}
Sample Response
{
"phoneNumber" : "08778000123",
"status" : "BLOCKED",
"rejectReason" : "",
"reapplyDate" : "2022-10-17"
}
API Paylater Registration
API yang digunakan untuk melakukan update status registrasi paylater di Astrapay
Endpoint
URL for request
Method | Environment | Value |
---|---|---|
POST | Testing | https://paylatersvc-uat.astrapay.com/paylater-service/partners/links |
Production | https://paylatersvc.astrapay.com/paylater-service/partners/links |
Header
Header for request
Key | Description | Environment |
---|---|---|
x-client-id | Identifier yang diberikan oleh Astrapay | Testing |
Production |
JSON Body
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 |
3 | rejectReason | String | 255 | Alasan registrasi customer di reject |
4 | reapplyDate | Date | Tanggal customer dapat melakukan registrasi kembali |
API Share Data Customer ke Astrapay Auto-Preferred
API untuk mengirimkan data KYC customer yang pengajuan paylaternya telah di approved oleh Maucash
Endpoint
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
Header for request
Key | Description | Environment |
---|---|---|
x-client-id | Identifier yang diberikan oleh Astrapay | Testing |
JSON Body
Body for request *field required
JSON Body
curl --location --request POST 'https://kyc-uat-api.astrapay.com/kyc-service/kycs- partner' \
--header 'x-client-id: xxx4f325-2565-4b7b-be1b-888df6623xxx' \ --header 'Content-Type: application/json' \
--data-raw '{
"phoneNumber" : "082112344321",
"name" RIANTOSE","identificationDocumentType"
: "BERN
: "KTP",
"identificationDocumentNumber" : "321423912332","placeOfBirth"
"dateOfBirth"
"nationality" "gender"
"profession" "country" "province"
"city"
"district" "Kalinyamatan","village"
"address" Makmur Raya",
"rwNumber" "postalCode" "regionId"
"kycPhoto" : [
{
"type" : "KTP", "file" : base64
}{,
"type" : "KTP",
"file" : base64 }
] }'
: "Jakarta", : "1991-10-28",
: "WNI",
: "LAKI-LAKI",
: "Wiraswasta", : "Indonesia",
: "Jawa Tengah", : "Jepara",
:
: "Kriyan",
:"rtNumber"
: "05",
: "59462",
: "1102",
: "04", "Jalan
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 |
Notification Repayment
API Reminder Repayment
API yang digunakan untuk mengirimkan notifikasi reminder pembayaran tagihan MauPaylater
Endpoint
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
Header for request
Key | Description | Environment |
---|---|---|
x-client-id | Identifier yang diberikan oleh Astrapay | Testing |
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 |
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 |