NAV
Shell HTTP

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 : 07 Juni 2022

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

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:

  1. Authorization
  2. Account Link
  3. Account Registration
  4. Payment with linking
  5. Push to Payment BETA
  6. Profile
  7. Transaction Status
  8. Refund
  9. Response Code
  10. 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.

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 img

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.


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



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:

  1. Account Number Page
  2. PIN Page
  3. OTP Page
  4. 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:

  1. Account Link Success
  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:

  1. Account Number Page
  2. Account Not Found Page
  3. Registration Page
  4. OTP Page
  5. Registration Result Page

Di bawah ini akan ditampilkan prototype untuk Register yang bisa dicoba oleh Merchant. Prototype ini akan menampilkan beberapa case, yaitu:

  1. Registration Success
  2. 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: img

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:

  1. Payment Detail Page
  2. PIN Page
  3. Payment Result Page

Di bawah ini akan ditampilkan prototype untuk Payment yang bisa dicoba oleh Merchant. Prototype ini akan menampilkan beberapa case, yaitu:

  1. Payment Success
  2. Payment Wrong PIN
  3. 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: img

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.

Disbursement

Alur Disbursement

img

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.

img

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 :

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: cd8a2deb-b004-4255-9c30-91656dc7d755
  client_secret: ece0ae05-9a2e-4365-b59b-8ee7b1d8443b

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(36) 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  : {"phoneNumber":"08123456789","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:2194c8df25a0f32de1b8f814019f9162d43714ef63c2e1c9b362af84df4a0d43: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 {"phoneNumber":"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: 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'
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 9c4ba8bf3e2b0e66f4e48884e08dccbf0cfd533a6d02d871fb7a8b4914a93c9c

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: 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 '{
    "phoneNumber": "08123456789",
    "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.
{
"phoneNumber": 08123456789,
"amount": 15000
}

Request Body

Field Tipe Data Wajib Deskripsi
phoneNumber 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
phoneNumber 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",
  "phoneNumber": "08123456789",
  "amount": 15000,
  "serviceCharge": 0,
  "total": 15000,
}

400 - Bad Request

{
    "status": 400,
    "message": "Validation failed for disbursementInquiryRequestDto(phoneNumber,). Error count 2",
    "error": "Bad Request",
    "path": "/disbursement-service/h2h/inquiries",
    "timestamp": "2022-03-01T15:14:20.323682200",
    "details": [
        {
            "code": "PhoneNumberIsExist",
            "objectName": "disbursementInquiryRequestDto",
            "defaultMessage": "Phone number is not registered.",
            "field": "phoneNumber",
            "rejectedValue": "08007007077"
        },
        {
            "code": "BalanceNotExceededLimitAfterInquiry",
            "objectName": "disbursementInquiryRequestDto",
            "defaultMessage": "Inquiry Amount exceeded account balance limit.",
            "field": "",
            "rejectedValue": {
                "phoneNumber": "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
Phone number is not registered. phoneNumber tidak terdaftar sebagai pengguna AstraPay
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
phoneNumber 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",
  "phoneNumber": "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:

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

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.

img

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.

img

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

Introduction

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.

img

Pada dokumentasi ini juga menjelaskan tentang API QRIS Dynamic yang diimplementasi pada Gateway.

Berikut adalah beberapa API yang kami sediakan untuk Merchant, yaitu:

  1. Authorization
  2. Create Bill
  3. Check Status Bill

Dari proses di atas, akan dijelaskan apa saja yang perlu disiapkan dan bagaimana langkah-langkah implementasinya.

Environment

Item Value
Development https://qris-uat-api.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:

Catatan : Client Secret bersifat rahasia, dilarang membagikan Client Secret kepada siapapun.

img

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 5 menit sejak pertama kali dibuat.

img

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-13T10:10:31.742Z",
    "createdAt": "2022-06-13T10:05: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.

Catatan: Diharapkan Check Bill Status dilakukan MINIMAL setiap 60 detik

img

Bill Status

Bill Status Description
PENDING Bill menunggu pembayaran dan masih bisa dibayar selama 5 menit
EXPIRED Bill kedaluwarsa setelah 5 menit 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.

img

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'

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