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 : 15 Maret 2024

Glossarium

Istilah Definisi
Merchant Pihak ketiga yang akan menggunakan dokumen
API Application Programming Interface.
Database Sebuah koleksi data yang tersusun dan di desain untuk kemudahan akses. Sebagai contoh nama pelanggan dan alamat
AstraPay Member Account Nomor pelanggan AstraPay yang digunakan untuk login ke aplikasi AstraPay

Snap Keamanan

Snap keamanan AstraPay menggunakan enkripsi simetris dengan token ber-Standard Symmetric Encryption Signature HMAC_SHA512 (512 bits). Ada 4 komponen yang dibutuhkan untuk berkomunikasi:

Catatan : Client Secret dan Private Key bersifat rahasia, dilarang membagikan Client Secret dan atau Private Key kepada siapapun.

Untuk api keamanan, perlu diperhatikan tiga proses yaitu:
1. Generate Signature Auth
2. API B2B Access Token Request
3. Generate Signature Service

img

Generate Private Key dan Public Key

Cara generate private key dan public key, bisa melalui beberapa cara diantaranya generator online, logic coding atau melalui terminal/cmd. Untuk private key nantinya akan disimpan oleh merchant atau pengguna, sedangkan public key akan disimpan oleh merchant atau pengguna dan dibagikan ke AstraPay atau penyedia. Berikut merupakan penjelasan cara generate melalui terminal/cmd.

Untuk mengeluarkan nilai value dari file private_key atau public_key yang sudah tergenerate bisa dibuka dengan command line atau explorer. Dengan nama:

Generate Signature Auth

Signature auth digunakan sebagai salah satu request header di api B2B Access Token Request. Dibawah ini merupakan langkah-langkah untuk men-generate signature auth.


1. Format payload untuk men-generate signature sebagai berikut:

[X-CLIENT-KEY] + "|" + [X-TIMESTAMP]

2. Signature yang sudah di generate sebelumnya dihasilkan dengan meng-aplikasikan enkripsi SHA-256 with RSA-2048 yang menggunakan private key pkcs8, kemudian hasilnya di encode menjadi base64.

3. Masukkan signature kedalam HTTP header “X-SIGNATURE” di api B2B Access Token Request

Contoh X-Signature yang sudah di generate:

85be817c55b2c135157c7e89f52499bf0c25ad6eeebe04a986e8c862561b19a5

API Access Token B2B

Protocol dan Service Address

Item Value
Protocol HTTPS
Verb POST
API Name Access Token B2B
Function API ini digunakan untuk mengambil token otorisasi berdasarkan client_id dan client_secret. Token digunakan untuk otorisasi HTTP Header
Service Code 73
Content type application/json
URL snap-service/snap/v1.0/access-token/b2b

Request

Contoh cURL

curl --location --request POST '/snap-service/snap/v1.0/access-token/b2b' \
--header 'x-client-key: client_id' \
--header 'x-timestamp: 2020-01-01T00:00:00+07:00' \
--header 'x-signature: KELOUOwWABn9/7gDrJ2ISSrf17xxxxxx' \
--header 'Content-Type: application/json' \
--data-raw '{
    "grantType": "client_credentials"
}'
Field Type Requirement Description
Content-type String Mandatory Tipe konten, data yang dikirim harus selalu application/json
X-TIMESTAMP String Mandatory Waktu lokal Merchant/Partner dalam format yyyy-MM-ddTHH:mm:ssTZD
X-CLIENT-KEY String Mandatory Merchant/Partner client_id
X-SIGNATURE String Mandatory Signature untuk API keamanan B2B Access Token Request (Siganture Auth).Verifikasi signature dapat dilakukan dengan menggunakan public key yang diberikan oleh Merchant/Partner

Body

Field Type Requirement Description
grantType String Mandatory Data yang dikirim merupakan client_credential

Response

Contoh Response

Content-type: application/json                                  
X-TIMESTAMP: 2022-03-22T14:45:43+07:00                                  
X-CLIENT-KEY: 85be817c55b2c135157c7e89f52499bf0c25ad6eeebe04a986e8c862561b19a5                                  
{                                   
  "responseCode": "2007300",                                    
  "responseMessage": "Successful",                                    
  "accessToken": "DlHTC8U5urS6VDsWkNMv3ealeldgjR8H5CvYYfD8n5xxx",
  "tokenType": "Bearer",
  "expiresIn": "3600"
} 

Header

Field Type Requirement Description
Content-type String Mandatory Tipe konten, data yang dikirim harus selalu application/json
X-TIMESTAMP String Mandatory Waktu lokal Merchant/Partner dalam format yyyy-MM-ddTHH:mm:ssTZD
X-CLIENT-KEY String Mandatory Merchant/Partner client_id

Body

Field Type Requirement Description
responseCode String Mandatory Lihat response list
responseMessage String Mandatory Lihat response list
accessToken String Conditional Token Akses B2B
tokenType String Conditional Tipe dari token otorisasi, selalu berisi “Bearer”
expiresIn String Conditional Durasi aktif dari token. Secara default 3600 Detik.

Generate Signature Service

Signature service digunakan sebagai salah satu request header (X-SIGNATURE) di API Service SNAP BI yang dihubungkan. Dibawah ini merupakan langkah-langkah untuk men-generate signature service.


1. Format payload untuk men-generate signature service adalah sebagai berikut:

[HTTP METHOD] + ”:” + [RELATIVE PATH URL] + “:“ + [B2B ACCESS TOKEN] + “:“ + LowerCase(HexEncode(SHA-256(Minify([HTTP BODY])))) + “:“ + [X-TIMESTAMP]

2. Signature yang sudah di generate sebelumnya dihasilkan dengan mengaplikasikan HMAC_SHA512 hashing menggunakan Client Secret yang diberikan AstraPay, kemudian hasilnya di encode menjadi base64.

3. Masukkan signature kedalam HTTP header “X-SIGNATURE” di API SNAP yang akan digunakan.

Contoh X-Signature yang sudah di generate:

06a7c024bd3927ecea861ddb8605f96b382cd09e8f0ed71a4c4e8c810627212dd6973ab495b405a14dbad54f9fe23f8873b33ebcc546e2766912b7de4c225ef5

Response List

Response Code Service Code Case Code Response Message Description
200 OK any 00 Successful Client berhasil teridentifikasi dan akses token diberikan.
400 Bad Request any 01 Invalid Field Format Format field tidak benar.
400 Bad Request any 02 Invalid mandatory field {fieldName} Data yang dibutuhkan tidak ada atau tidak lengkap.
409 Duplicate 47 01 Duplicate partnerReferenceNo partnerReferenceNo sudah ada pada sistem.
404 Not Found 47 17 Invalid Terminal Terminal code tidak ada di sistem.
404 Not Found 51 08 Invalid Merchant Merchant id tidak ada di sistem atau status merchant abnormal.
500 Internal Server Error Respons tidak valid dari Back-end atau Kesalahan Tidak Terdefinisi

Payment Channel

Selamat datang di dokumentasi AstraPay Payment Channel, pada bagian ini akan dijelaskan cara Merchant melakukan integrasi AstraPay sebagai metode pembayaran pada Aplikasi Merchant, ada beberapa API yang kami sediakan untuk Merchant, yaitu:

  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.

Payment Channel SNAP BI V1.0

SNAP Introduction

Saat ini, AstraPay menyediakan metode baru untuk calon merchant yang ingin melakukan integrasi dengan AstraPay, melalui SNAP AstraPay API. Dimana SNAP (Standar Nasional Open API Pembayaran) adalah standar Open API yang ditetapkan Bank Indonesia agar menciptakan industri sistem pembayaran yang lebih maju di Indonesia.

Untuk melakukan integrasi dengan AstraPay, merchant diharuskan untuk melakukan pendaftaran melalui link dibawah ini.

Sudah terdaftar dan ingin melakukan penyesuaian

Quick Start

Dibawah ini adalah hal yang perlu kamu ketahui untuk melakukan integrasi: Berikut adalah alur integrasi yang akan dilalui Merchant:
img Keterangan:
1. Alur integrasi dengan Astrapay menyesuaikan dengan kondisi Merchant, apabila Merchant belum pernah integrasi, dapat lanjut ke tahap 2A. Apabila sudah integrasi, lanjut ke tahap 2B.

2A. Apabila Merchant belum pernah melakukan integrasi, Merchant dapat mengisi formulir pendaftaran pada halaman ini.

3A. Pihak AstraPay akan memeriksa data registrasi yang sudah diisikan dan akan di follow up mengenai kelanjutan tahap integrasi.

2B. Pihak AstraPay akan menghubungi Merchant yang sudah integrasi untuk membahas mengenai timeline penggunaan SNAP AstraPay.

3B. Pihak AstraPay kemudian akan mengirimkan email untuk kelanjutan proses integrasi menggunakan API SNAP secara teknis.

4. Merchant dapat melanjutkan development untuk integrasi. Merchant yang sebelumnya sudah integrasi dapat melihat Panduan Migrasi Menggunakan API SNAP.

5. Apabila development sudah selesai, Merchant diharapkan untuk menghubungi AstraPay.

6. Selanjutnya Merchant mengunduh dan mengisi semua dokumen testing yaitu Dev Site, Fungsionalitas, dan UAT yang tersedia di bawah ini.

7. Dokumen testing yang sudah diisi dikirimkan ke pihak AstraPay untuk dilakukan review.

8. Setelah direview, pihak AstraPay akan menghubungi Merchant terkait kebutuhan environment Production & akses Dashboard Merchant.

9. Apabila Merchant sudah siap untuk live ke Production, Merchant diharapkan memberi tahu Pihak AstraPay.

10. Aplikasi Merchant dapat live ke Production.

Environment

Item Value
Development https://sandbox.astrapay.com
Production URL production akan dikirimkan melalui email terdaftar setelah UAT selesai dilakukan

Tahap Integrasi Development

Dibawah ini adalah hal yang perlu disiapkan dan diketahui sebelum melakukan development untuk melakukan integrasi:

  1. Mengisi formulir pendaftaran URL Merchant Payment Channel lalu mengirimkannya ke pihak AstraPay. Formulir URL dapat diunduh disini.
  2. Menyiapkan credential yang diperlukan untuk komunikasi antar penyedia (AstraPay) dan pengguna (Merchant/Partner):
  1. Client ID (X-Client-Key), dibuat oleh penyedia dan diberikan kepada pengguna. Dibutuhkan untuk menandakan Merchant yang mengirim request.
  2. Client Secret, dibuat oleh penyedia dan diberikan kepada pengguna. Dibutuhkan untuk menandakan Merchant yang mengirim request.
  3. Cara mendapatkan Client ID dan Client Secret:
    1. Melakukan registrasi dengan mengisi formulir pendaftaran.
    2. Merchant mendapatkan credential Client ID dan Client Secret melalui email yang tertera di formulir pendaftaran.
  4. Public Key, dibuat oleh pengguna dan diberikan kepada penyedia.
  5. Private Key, dibuat oleh pengguna dan disimpan oleh pengguna sendiri.
  6. Cara Generate Public Key dan Private Key.
  7. API yang membutuhkan Signature Auth, Signature Service, Token B2B, dan Token B2B2C sesuai pada sequence diagram, implementasinya dapat dilihat disini.

SNAP Registration

Layanan ini digunakan untuk mendaftarkan dan menghubungkan akun customer pada platform Merchant ke akun AstraPay customer.

Use Case Diagram

Berikut adalah flow untuk proses binding:

img

Sequence Diagram

Berikut adalah sequence diagram untuk proses binding: img

Layanan ini terdiri dari 3 API, diantaranya:

Nama API Deskripsi
API Account Binding Digunakan untuk mendapatkan authCode
API Access Token B2B2C Digunakan untuk mengambil token otoriasasi user sebagai identifikasi pada setiap API yang berkaitan dengan data customer
API Account Binding Inquiry (Opsional) Digunakan untuk mengecek status binding customer

API Account Binding

API ini digunakan untuk mendapatkan authCode.

Protocol & Service Address

Item Value
Protocol HTTPS
Service Code 07
Channel ID 01207
Method POST
URL Sandbox /snap-service/snap/v1.0/registration-account-binding
Content-Type application/json

Request Header

Name Type Requirement Description
Content-Type String Mandatory Tipe konten, data yang dikirim harus selalu application/json
Authorization String Mandatory Bearer token hasil generate dari API Access Token B2B
X-TIMESTAMP String Mandatory Waktu lokal Merchant/Partner dalam format yyyy-MM-ddTHH:mm:ssTZD
X-SIGNATURE String Mandatory Hasil dari generate Signature Service
X-PARTNER-ID String Mandatory Client ID Merchant/Partner yang didapat dari AstraPay
X-EXTERNAL-ID String Mandatory Numeric string unik yang hanya dapat digunakan satu kali dalam satu hari. Format yang digunakan adalah: 36 Random Numeric String
X-DEVICE-ID String Optional Identifier device yang digunakan oleh customer pada API yang sedang diakses
CHANNEL-ID String Mandatory ID dari service yang mengakses API Account Binding (01207)

Request Body

Contoh cURL Account Binding

curl --location 'https://sandbox.astrapay.com/snap-service/snap/v1.0/registration-account-binding' \
--header 'Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJUZk50bGRXTzhvRGhibU95STd1R0g0dV9ZMzBmeTc4b1I1T2V6S3JIdVpzIn0.eyJleHAiOjE3MDY4Mzk3NTksImlhdCI6MTcwNjgwMzc1OSwianRpIjoiZmUyOTEyNzMtNTM1Ny00MmE1LWExODMtOWUxNWNiZTdjYjBmIiwiaXNzIjoiaHR0cHM6Ly9rZXljbG9hay1zaXQuYXN0cmFwYXkuY29tL2F1dGgvcmVhbG1zL2FzdHJhcGF5LWJ1c2luZXNzIiwic3ViIjoiNDY2NTk5NzEtZTgwZC00OThiLTlkNjYtM2VhMTJjNDY5Mzk5IiwidHlwIjoiQmVhcmVyIiwiYXpwIjoiYzMzYWU3MTYtMjQwMi00OTc5LWIyMmQtMThhZmEyOGQzZDRlIiwicmVhbG1fYWNjZXNzIjp7InJvbGVzIjpbImRlZmF1bHQtcm9sZXMtYXN0cmFwYXkiXX0sInNjb3BlIjoicHJvZmlsZSBlbWFpbCIsImNsaWVudEhvc3QiOiIxODIuMjUzLjU5LjEwNSIsImNsaWVudElkIjoiYzMzYWU3MTYtMjQwMi00OTc5LWIyMmQtMThhZmEyOGQzZDRlIiwiZW1haWxfdmVyaWZpZWQiOmZhbHNlLCJwcmVmZXJyZWRfdXNlcm5hbWUiOiJzZXJ2aWNlLWFjY291bnQtYzMzYWU3MTYtMjQwMi00OTc5LWIyMmQtMThhZmEyOGQzZDRlIiwiY2xpZW50QWRkcmVzcyI6IjE4Mi4yNTMuNTkuMTA1In0.UhjrPznIeUiRMxptnrTeLN_Z6svcN0RzDsAU8oj_F965hRKVWDfp_B4kp2i1gnaC4Tp8X9jC-5xSEBicSZR4I-TitsuikPvT4l_NGqXcHCxSa4noeQmjoDysMILotTqa3rIx9_dWxvIyZil_t4b7L7fhTCVB-B6boxYpUGpBaNOxl6gdC8184AwFX-X8bqBTe2t9BaWZ6QBWAaarB4MdjYArrXW8N5C1oraPh4oAz2O2JVEhdM5ls1Jj0p2SlAVlsYSr9LbFJkwlJSJirDgjcArBbyFhx9OKLJT5F_7gvZm8iOBZuiUTOz4V0Sk79W-mwL0UcTIkCp1F-_PPfM0r3w' \
--header 'Content-Type: application/json' \
--header 'X-TIMESTAMP: 2023-06-02T13:20:19+07:00' \
--header 'X-SIGNATURE: DMQt5kjGE40k+GayNs+tY1VYWoHfum6ASuiEUp51ituU0/yoA4ZhQGyMeRXjBkrbbYhRR+YB3aiIss7Y5b5p4w==' \
--header 'X-PARTNER-ID: 22fd3727-3044-4596-8552-f4e54205f540' \
--header 'X-EXTERNAL-ID: 9812839751201231223895' \
--header 'X-DEVICE-ID: 09864ADCASA' \
--header 'CHANNEL-ID: 01207' \
--data '{
    "merchantId":"9653109f-2806-48cf-ad75-85664c2db33e",
    "phoneNo": "081111111111",
    "additionalInfo": {
        "finishBindingUrl": "https://Merchant.com",
        "externalUid":"Testing22"
    }
}'
Field Type Requirement Description
merchantId String Mandatory Kode unik setiap merchant yang diberikan AstraPay
phoneNo String Optional Nomor HP customer, apabila field ini terisi maka user wajib login dengan nomor yang sudah disertakan
additionalInfo Object Mandatory Informasi tambahan
additionalInfo.finishBindingUrl String Mandatory URL yang digunakan sebagai callback setelah proses get authCode berhasil
additionalInfo.externalUid String Mandatory ID milik user pada aplikasi partner (Merchant user ID)

Response Body

Contoh Response

{
  "responseCode": "2000700",
  "responseMessage": "Successful",
  "referenceNo": "644efc4f-9bb1-45ef-a6cf-1e396cbf1075",
  "redirectUrl": "https://sandbox.astrapay.com/payment-channel/account-binding/644efc4f-9bb1-45ef-a6cf-1e396cbf1075",
  "additionalInfo": {
    "authCode": "nlleyvaQcB2SOkVjtF7ceCuC16BiqCc6DRrjaKOnnfRdToW8Tr"
  }
}
Field Type Requirement Description
responseCode String Mandatory Lihat response list
responseMessage String Mandatory Lihat response list
referenceNo String Mandatory ID transaksi pada AstraPay
redirectUrl String Mandatory URL yang digunakan untuk mengarahkan user ke webview AstraPay untuk menyelesaikan proses binding account
additionalInfo Object Mandatory Informasi Tambahan
additionalInfo.authCode String Mandatory Authorization berupa string yang diberikan untuk pengguna dan dapat digunakan untuk mendapatkan akses token B2B2C

API Access Token B2B2C

API ini digunakan untuk mengambil token otorisasi user sebagai identifikasi

Protocol & Service Address

Item Value
Protocol HTTPS
Service Code 74
Method POST
URL Sandbox /snap-service/snap/v1.0/access-token/b2b2c
Content-Type application/json

Request Header

Name Type Requirement Description
Content-Type String Mandatory Tipe konten, data yang dikirim harus selalu application/json
X-TIMESTAMP String Mandatory Waktu lokal Merchant/Partner dalam format yyyy-MM-ddTHH:mm:ssTZD
X-SIGNATURE String Mandatory Signature untuk API keamanan B2B Access Token Request (Signature Auth). Verifikasi signature dapat dilakukan oleh penyedia dengan menggunakan public key yang diberikan oleh pengguna (Merchant/Partner)
X-CLIENT-KEY String Mandatory Client ID Merchant/Partner yang didapat dari AstraPay

Request Body

Contoh cURL Access Token B2B2C

curl --location --request POST 'https://sandbox.astrapay.com/snap-service/snap/v1.0/access-token/b2b2c' \
--header 'X-TIMESTAMP: 2022-01-01T00:00:00+07:00' \
--header 'X-SIGNATURE: 07abc7c30d245c0ecce3ef6c2a9ac76cd9ffaf6d0d090773b429c2b97437dc72047f46d9890abb2d6d8af7594ea19787e79ec80e388e2f6225b449c2e4d82e7df50f37c301424aede785935703c1c70235ba4e59f589f571218ce2dce4c061e598f0f38d1ac57f3feb52cf0c31078e3ceee8d796c53983fe1d38ebd71155aaa613700dc21f5a57941b787f921af7d287e72687d5242eb3063d543d5f5923f76db008cf4f56fb9c618f7f4bc8366ae70d88705617487754563e629119013fa0549e6645b397524b3dd2fa7e7f3fe9faf0fbf77da59f566861a3c510241fd4416ab7d0eba42d998e1178da51d607e0ef866607c458837c762323be53827d86e875' \
--header 'X-CLIENT-KEY: 962489e9-de5d-4eb7-92a4-b07d44d64bf4' \
--header 'Content-Type: application/json' \
--data-raw '{
    "grantType": "AUTHORIZATION_CODE",
    "authCode": "3p8Uuq0dkDBPagBvbFIo1QodNzZaJJXXITpL9mFRsWASqbxWA5",
}'
Field Type Requirement Description
grantType String Mandatory Penerapan tipe token request, bisa menggunakan AUTHORIZATION_CODE atau REFRESH_TOKEN
authCode String Conditional Authorization code yang diterima setelah user memberikan persetujuan. Wajib apabila grantType = AUTHORIZATION_CODE
refreshToken String Conditional Digunakan untuk mendapatkan accessToken baru dimana user tidak perlu memberikan persetujuan lagi. Bersifat wajib ketika grantType = REFRESH_TOKEN. Harus kurang dari validitas access token dan akan diatur oleh aplikasi penyedia untuk menghasilkan accessToken baru.

Response Header

Name Type Requirement Description
X-TIMESTAMP String Mandatory Waktu lokal Merchant/Partner dalam format yyyy-MM-ddTHH:mm:ssTZD
X-CLIENT-KEY String Mandatory Merchant/Partner Client ID

Response Body

Contoh Response

curl --location --request POST 'https://sandbox.astrapay.com/authorization-service/snap/v1.0/access-token/b2b2c' \
--header 'X-TIMESTAMP: 2022-01-01T00:00:00+07:00' \
--header 'X-CLIENT-KEY: 962489e9-de5d-4eb7-92a4-b07d44d64bf4' \
--data-raw '{
    "responseCode": "2007400",
    "responseMessage": "Successful",
    "accessToken":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiIyMTFlZThiMi1hN2FlLTRhZGUtYmJlYS1mNzI3MDk3ZmQ0NmEiLCJjbGllbnRJZCI6IjZhZTk1N2M0LTI4NjMtNDcxMy1hY2NlLWJhMTJkZTYzNmNmYyIsIm5iZiI6MTYxMTQ2ODk3OCwiZXhwIjoxNjExNDY5ODc4LCJpYXQiOjE2MTE0Njg5Nzh9.KM7yz9GvuUaDR1bXwei4iO0h4e3g4o1Hct5Ie9VoBdo",
    "tokenType":"Bearer",
    "accessTokenExpiryTime":"2020-01-01T00:00:00+07:00",
    "refreshToken":"57d21fe3-ba9c-4f2d-9fde-eae669bbf80d",
    "refreshTokenExpiryTime":"2020-01-01T00:00:00+07:00"
}'
Field Type Requirement Description
responseCode String Mandatory Lihat response list
responseMessage String Mandatory Lihat response list
accessToken String Mandatory Authorization berupa string yang diberikan untuk pengguna dan digunakan untuk mengakses daya yang dilindungi
tokenType String Mandatory Bearer Token
accessTokenExpiryTime String Mandatory Waktu ketika accessToken akan expired. accessToken akan expired dalam waktu 15 hari dengan format ISO8601
refreshToken String Mandatory Random string yang digunakan pengguna untuk mendapatkan accessToken baru untuk mengakses data user.
refreshTokenExpiryTime String Mandatory Waktu untuk refreshToken akan expired.

Response List

Response Code Response Message Description
4017400 authCode Used authCode sudah pernah dipakai
4017400 authCode expired authCode sudah kedaluwarsa
4017400 refreshToken invalid Refresh Token tidak sesuai

API Account Binding Inquiry

API ini digunakan untuk mengecek status binding customer dan bersifat opsional.

Protocol & Service Address

Item Value
Protocol HTTPS
Service Code 08
Channel ID 01108
Method POST
URL Sandbox /snap-service/snap/v1.0/registration-account-inquiry
Content-Type application/json

Request Header

Name Type Requirement Description
Content-Type String Mandatory Tipe konten, data yang dikirim harus selalu application/json
Authorization String Mandatory Bearer token hasil generate dari API Access Token B2B
X-TIMESTAMP String Mandatory Waktu lokal Merchant/Partner dalam format yyyy-MM-ddTHH:mm:ssTZD
X-SIGNATURE String Mandatory Hasil dari generate Signature Service
X-PARTNER-ID String Mandatory Client ID Merchant/Partner yang didapat dari AstraPay
X-EXTERNAL-ID String Mandatory Numeric string unik yang hanya dapat digunakan satu kali dalam satu hari. Format yang digunakan adalah: 36 Random Numeric String
X-DEVICE-ID String Optional Identifier device yang digunakan oleh customer pada API yang sedang diakses
CHANNEL-ID String Mandatory ID dari service yang mengakses API Account Binding Inquiry (01108)

Request Body

Contoh cURL Account Binding Inquiry

curl --location 'https://sandbox.astrapay.com/snap-service/snap/v1.0/registration-account-inquiry' \
--header 'Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJUZk50bGRXTzhvRGhibU95STd1R0g0dV9ZMzBmeTc4b1I1T2V6S3JIdVpzIn0.eyJleHAiOjE3MDY4Mzk3NTksImlhdCI6MTcwNjgwMzc1OSwianRpIjoiZmUyOTEyNzMtNTM1Ny00MmE1LWExODMtOWUxNWNiZTdjYjBmIiwiaXNzIjoiaHR0cHM6Ly9rZXljbG9hay1zaXQuYXN0cmFwYXkuY29tL2F1dGgvcmVhbG1zL2FzdHJhcGF5LWJ1c2luZXNzIiwic3ViIjoiNDY2NTk5NzEtZTgwZC00OThiLTlkNjYtM2VhMTJjNDY5Mzk5IiwidHlwIjoiQmVhcmVyIiwiYXpwIjoiYzMzYWU3MTYtMjQwMi00OTc5LWIyMmQtMThhZmEyOGQzZDRlIiwicmVhbG1fYWNjZXNzIjp7InJvbGVzIjpbImRlZmF1bHQtcm9sZXMtYXN0cmFwYXkiXX0sInNjb3BlIjoicHJvZmlsZSBlbWFpbCIsImNsaWVudEhvc3QiOiIxODIuMjUzLjU5LjEwNSIsImNsaWVudElkIjoiYzMzYWU3MTYtMjQwMi00OTc5LWIyMmQtMThhZmEyOGQzZDRlIiwiZW1haWxfdmVyaWZpZWQiOmZhbHNlLCJwcmVmZXJyZWRfdXNlcm5hbWUiOiJzZXJ2aWNlLWFjY291bnQtYzMzYWU3MTYtMjQwMi00OTc5LWIyMmQtMThhZmEyOGQzZDRlIiwiY2xpZW50QWRkcmVzcyI6IjE4Mi4yNTMuNTkuMTA1In0.UhjrPznIeUiRMxptnrTeLN_Z6svcN0RzDsAU8oj_F965hRKVWDfp_B4kp2i1gnaC4Tp8X9jC-5xSEBicSZR4I-TitsuikPvT4l_NGqXcHCxSa4noeQmjoDysMILotTqa3rIx9_dWxvIyZil_t4b7L7fhTCVB-B6boxYpUGpBaNOxl6gdC8184AwFX-X8bqBTe2t9BaWZ6QBWAaarB4MdjYArrXW8N5C1oraPh4oAz2O2JVEhdM5ls1Jj0p2SlAVlsYSr9LbFJkwlJSJirDgjcArBbyFhx9OKLJT5F_7gvZm8iOBZuiUTOz4V0Sk79W-mwL0UcTIkCp1F-_PPfM0r3w' \
--header 'Content-Type: application/json' \
--header 'X-TIMESTAMP: 2023-06-02T13:20:19+07:00' \
--header 'X-SIGNATURE: DMQt5kjGE40k+GayNs+tY1VYWoHfum6ASuiEUp51ituU0/yoA4ZhQGyMeRXjBkrbbYhRR+YB3aiIss7Y5b5p4w==' \
--header 'X-PARTNER-ID: 22fd3727-3044-4596-8552-f4e54205f540' \
--header 'X-EXTERNAL-ID: 9812839751201231223895' \
--header 'X-DEVICE-ID: 09864ADCASA' \
--header 'CHANNEL-ID: 01108' \
--data '{
    "additionalInfo": {
        "refreshToken": "57d21fe3-ba9c-4f2d-9fde-eae669bbf80d"
    }
}'
Field Type Requirement Description
additionalInfo Object Mandatory Informasi tambahan
additionalInfo.refreshToken String Mandatory Informasi tambahan berupa refreshToken

Response Header

Name Type Requirement Description
Content-Type String Mandatory Tipe konten, data yang dikirim harus selalu application/json
X-TIMESTAMP String Mandatory Waktu lokal Merchant/Partner dalam format yyyy-MM-ddTHH:mm:ssTZD
X-SIGNATURE String Mandatory Hasil dari generate Signature Service

Response Body

Contoh Response

{
  "responseCode": "2000800",
  "responseMessage": "Successful",
  "referenceNo": "82c7ead2-ac97-49e0-a350-637712e46306",
}
Field Type Requirement Description
responseCode String Mandatory Lihat response list
responseMessage String Mandatory Lihat response list
referenceNo String Mandatory ID transaksi pada AstraPay

SNAP Direct Debit

Layanan ini digunakan untuk melakukan pembayaran di sisi customer dari rincian pembelian sampai mendapatkan notifikasi bahwa pembayaran sudah berhasil.

Use Case Diagram

Berikut adalah use case diagram Direct Debit img


Layanan ini terdiri dari 3 API, diantaranya:
1. API Direct Debit Payment
2. API Direct Debit Payment Status
3. API Direct Debit Payment Refund (BETA)
4. API Direct Debit Payment Notify

API Direct Debit Payment

API ini digunakan untuk melakukan pembayaran.

img

Protocol & Service Address

Item Value
Protocol HTTPS
Service Code 54
Channel ID 00854
Method POST
URL Sandbox /merchant-service/snap/v1.0/debit/payment-host-to-host
Content-Type application/json

Request Header

Name Type Requirement Description
Authorization String Mandatory Bearer token hasil generate dari API Access Token B2B
Authorization-Customer String Conditional Akses token milik customer hasil generate dari API Access Token B2B2C. Bersifat wajib ketika menggunakan metode pembayaran payment with linking
Content-Type String Mandatory Tipe konten, data yang dikirim harus selalu application/json
X-TIMESTAMP String Mandatory Waktu lokal Merchant/Partner dalam format yyyy-MM-ddTHH:mm:ssTZD
X-SIGNATURE String Mandatory Signature untuk API Direct Debit hasil dari generate Signature Service
X-PARTNER-ID String Mandatory Client ID Merchant/Partner yang didapat dari AstraPay
X-EXTERNAL-ID String Mandatory Numeric string unik yang hanya dapat digunakan satu kali dalam satu hari. Format yang digunakan adalah: 36 Random Numeric String
X-DEVICE-ID String Conditional Identifier device yang digunakan oleh customer pada API yang sedang diakses. Bersifat wajib ketika menggunakan metode pembayaran payment with linking
CHANNEL-ID String Mandatory ID dari service yang mengakses API Direct Debit Payment (00854)

Request Body

Contoh cURL Direct Debit Payment

curl --location --request POST 'https://sandbox.astrapay.com/merchant-service/snap/v1.0/debit/payment-host-to-host' \
--header 'Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICI1QjhXRGtYSzVBMWpyeFVrckMyWnB4NFN4XzVBRUlhMVpjM1NsOVZobUtJIn0.eyJleHAiOjE2NzI0MTA2MTQsImlhdCI6MTY3MjM3NDYxNCwianRpIjoiNTUyNWRiMTctZDIxNC00YmU4LWI1ZTQtYTAwNDUxODE1MjgzIiwiaXNzIjoiaHR0cDovLzEwLjIwLjcuNjo4NDQzL2F1dGgvcmVhbG1zL2FzdHJhcGF5LWJ1c2luZXNzIiwiYXVkIjoiYWNjb3VudCIsInN1YiI6IjMzZTRhYTQ0LTU2M2QtNGE5NC05NjE2LWQ0MDdlZTZhZjc0NyIsInR5cCI6IkJlYXJlciIsImF6cCI6ImMxOGVjMzVmLTU3ZDYtNGY2OS1iOTdlLWIyZWYyY2U3OGFiYiIsImFjciI6IjEiLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsiZGVmYXVsdC1yb2xlcy1hc3RyYXBheS1idXNpbmVzcyIsIm9mZmxpbmVfYWNjZXNzIiwidW1hX2F1dGhvcml6YXRpb24iXX0sInJlc291cmNlX2FjY2VzcyI6eyJhY2NvdW50Ijp7InJvbGVzIjpbIm1hbmFnZS1hY2NvdW50IiwibWFuYWdlLWFjY291bnQtbGlua3MiLCJ2aWV3LXByb2ZpbGUiXX19LCJzY29wZSI6InByb2ZpbGUgZW1haWwiLCJlbWFpbF92ZXJpZmllZCI6ZmFsc2UsImNsaWVudEhvc3QiOiIxNzIuMjAuMTAuNDAiLCJjbGllbnRJZCI6ImMxOGVjMzVmLTU3ZDYtNGY2OS1iOTdlLWIyZWYyY2U3OGFiYiIsInByZWZlcnJlZF91c2VybmFtZSI6InNlcnZpY2UtYWNjb3VudC1jMThlYzM1Zi01N2Q2LTRmNjktYjk3ZS1iMmVmMmNlNzhhYmIiLCJjbGllbnRBZGRyZXNzIjoiMTcyLjIwLjEwLjQwIn0.c8LFOYl72UuvqGlc69kO7TuWLL_AkV1doAaZVzSwXA-6oyu85babY49T5DIElTTHGBWQXKBKOovnOmLBK9cJscshcm-dDm9kBGn8JI0yLjfHMa_-KLXFN8eedPu5pu936NIvO8rANGXo0b1pWoSKC4NgW8WxHZvzmUpN_H0-0WdTzFvbRRpcy2b1NrSa4xMwEa3tgdM8yIGFDDtK1l7X0KjSGlZ7LGarzbjf9yul9f6xNOcJOSMPu8zOWwYtiEKQabUm0wJSW2dvXYG_3VCeKeuhgEivOeoqzAEvq5a9AYVifOPwl-Hi_ba4DaH6wGohHcBjn9e6-xTTp7dWNxJCFQ' \
--header 'Authorization-Customer: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzUxMiJ9.eyJleHRlcm5hbFVpZCI6InVzZXJJZDEyMyIsInN1YiI6IjA4MjIzNTQwMTExMyIsIm5iZiI6MTY3MjMyMDc2NiwibWVyY2hhbnRJZCI6ImMxOGVjMzVmLTU3ZDYtNGY2OS1iOTdlLWIyZWYyY2U3OGFiYiIsImlzcyI6IkFzdHJhUGF5LVNuYXAiLCJjbGFpbSI6IlNOQVAiLCJleHAiOjE2NzM2MTY3NjYsInR5cGUiOiJBQ0NFU1MiLCJpYXQiOjE2NzIzMjA3NjYsInVzZXJJZCI6MjAwMDI4LCJqdGkiOiIzZmNlMGYyZC01ZjQ2LTQxOTEtODFjYy05ZTE3MTE3MTU2MGQifQ.VDp_PXp_4xryNF74JUhlHnvcC-8agCLY2Ej5B5Sqh_t_pfZF-AqJZXQSr0dKFCDCnIzn_OsK1ydKoQmeQP4IJ3wV2Ep7QaG9VCRVR0WhgJMYB6BaiBpt4kZpryqAjPgHh7lYhSs4sTtxegxMT4IUK4Glw-yCZC_qgWEUFffh1VsT-JHNI0nIQbapVvPkOvuHBX2t_JqmGXz3BESH2-woaI3MEz-zbdPm7lJzN_A1QZAtVPgaZXdVMj9c9-3olcdoDyOj86X-EHW_O30GRKdxLm09ier31VRKj15U3E8Lgaw0IcYniqNNhLkp300fKf6_26eH0zeZrAIPwRxIHv5CSA ' \
--header 'Content-Type: application/json' \
--header 'X-TIMESTAMP: 2022-10-23T07:44:11+07:00' \
--header 'X-SIGNATURE: 7jkf3scp5kd8opCBnuWql+GayuKoyPD3vKsKGDyRsNbNEc/qzWgIvADGYmR8FSOU9FFmE4JJvR0JO9cYGqmlvg==' \
--header 'X-PARTNER-ID: c18ec35f-57d6-4f69-b97e-b2ef2ce78abb' \
--header 'X-EXTERNAL-ID: 008541234525416' \
--header 'X-DEVICE-ID: 09864ADCASA' \
--header 'CHANNEL-ID: 00854' \
--data-raw '{
    "partnerReferenceNo": "TRX301222140301000",
    "merchantId":"ffedcd28-70ea-4540-9172-d335f5dda51c",
    "amount": {
        "value": "10000.00",
        "currency": "IDR"
    },
    "additionalInfo": {
        "description": "Buy Starbucks"
    }
}'
Field Type Requirement Description
partnerReferenceNo String Mandatory ID transaksi pada Merchant/Partner
merchantId String Conditional Kode unik setiap merchant yang diberikan AstraPay. Bersifat wajib ketika Merchant terdaftar memiliki Sub-Merchant pada sistem AstraPay
amount String Mandatory -
amount.value String (ISO4217) Mandatory Jumlah bersih transaksi yang diterima termasuk 2 digit decimal. Cth: 10000.00
amount.currency String Mandatory Mata Uang
additionalInfo Object Mandatory Informasi Tambahan
additionalInfo.description String Mandatory Deskripsi

Response Body

Contoh Response

{
    "responseCode":"2005400",
    "responseMessage":"Successful",
    "partnerReferenceNo":"2020102900000000000001",
    "referenceNo":"INV/PAC/ONP/230223/26PIVDJFNW0",
    "webRedirectUrl": "https://sandbox.astrapay.com/merchant-service/payments/1c74a043-a28d-4826-a175-0bba189a83fd"
}
Field Type Requirement Description
responseCode String Mandatory Lihat response list
responseMessage String Mandatory Lihat response list
partnerReferenceNo String Mandatory ID transaksi pada Merchant/Partner
referenceNo String Mandatory ID transaksi pada AstraPay
webRedirectUrl String Mandatory https://sandbox.astrapay.com/merchant-service/payments/1c74a043-a28d-4826-a175-0bba189a83fd

API Direct Debit Payment Status

API ini digunakan untuk melakukan pengecekan status transaksi.

img

Protocol & Service Address

Item Value
Protocol HTTPS
Service Code 55
Channel ID 00155
Method POST
URL Sandbox /merchant-service/snap/v1.0/debit/status
Content-Type application/json

Request Header

Name Type Requirement Description
Authorization String Mandatory Bearer token dari hasil generate dari API Access Token B2B
Content-Type String Mandatory Tipe konten, data yang dikirim harus selalu application/json
X-TIMESTAMP String Mandatory Waktu lokal Merchant/Partner dalam format yyyy-MM-ddTHH:mm:ssTZD yang valuenya sama dengan yang digunakan pada signature-auth, token B2B Access Token Request, dan signature-service
X-SIGNATURE String Mandatory Signature untuk API Direct Debit hasil dari generate Signature Service
X-PARTNER-ID String Mandatory Client ID Merchant/Partner yang didapat dari AstraPay
X-EXTERNAL-ID String Mandatory Numeric string unik yang hanya dapat digunakan satu kali dalam satu hari. Format yang digunakan adalah: 36 Random Numeric String
CHANNEL-ID String Mandatory ID dari service yang mengakses API Direct Debit Payment Status (00155)

Request Body

Contoh cURL Direct Debit Payment Status

curl --location --request POST 'https://sandbox.astrapay.com/merchant-service/snap/v1.0/debit/status' \
--header 'Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICIzTF9udFF6MGZsNjl5UHB4T2RBTDk3NDNGOU05UWszVklTOWMwZGNwa2VFIn0' \
--header 'Content-Type: application/json' \
--header 'X-TIMESTAMP: 2020-01-01T00:00:00+07:00' \
--header 'X-SIGNATURE: v3yjqcO1MpqNINgjkGiqkSeeGypreVjDHZQKe8qxu0rr5vGzFmQQeOIviryOqQgQ/nEdeWN5eu47xedeEG3a0Q==' \
--header 'X-PARTNER-ID: c18ec35f-57d6-4f69-b97e-b2ef2ce78abb' \
--header 'X-EXTERNAL-ID: 12345678s' \
--header 'CHANNEL-ID: 00155' \
--data-raw '{
   "originalPartnerReferenceNo":"TRANSACTION-TEST-05",
   "originalReferenceNo":"",
   "serviceCode":"54",
   "amount":{
      "value":"100000.00",
      "currency":"IDR"
   }
}'
Field Type Requirement Description
originalPartnerReferenceNo String Mandatory ID transaksi dari Merchant/Partner (Merchant/Partner Transaction ID)
originalReferenceNo String Optional ID transaksi dari AstraPay
serviceCode String Mandatory Kode service yang diakses
amount Object Mandatory -
amount.value String (ISO4217) Mandatory Jumlah net dari transaksi termasuk 2 digit decimal. Cth: 100000.00
amount.currency String Mandatory Kode mata uang berdasarkan ISO (IDR)

Response Body

Contoh Response

{
   "responseCode":"2005500",
   "responseMessage":"Request has been processed successfully",
   "originalPartnerReferenceNo":"2020102900000000000001", //merchantTransactionId
   "originalReferenceNo":"2020102977770000000009",
   "serviceCode":"54",
   "latestTransactionStatus":"00",
   "refundHistory":[      
         {
         "refundNo":"96194816941239812",
         "partnerReferenceNo":"239850918204981205970",
         "refundAmount":{
            "value":"100000.00",
            "currency":"IDR"
         },
         "refundStatus":"00",
         "refundDate":"2020-12-23T07:44:16+07:00",
         "reason":"Sayur 1 hilang"
      },
      {
         "refundNo":"96194123981251341",
         "partnerReferenceNo":"2398509123131981205970",
         "refundAmount":{
            "value":"100000.00",
            "currency":"IDR"
         },
         "refundStatus":"00",
         "refundDate":"2020-12-23T07:54:16+07:00",
         "reason":"Sayur 2 rusak"
      }
   ],
   "transAmount":{
      "value":"100000.00",
      "currency":"IDR"
   },
   "feeAmount":{
      "value":"2000.00",
      "currency":"IDR"
   },
   "paidTime":"2020-12-21T14:56:11+07:00",
   "additionalInfo":{
   }
}
Field Type Requirement Description
responseCode String Mandatory Lihat response list
responseMessage String Mandatory Lihat response list
originalPartnerReferenceNo String Mandatory ID transaksi dari Merchant/Partner (Merchant/Partner Transaction ID)
originalReferenceNo String Mandatory ID transaksi dari AstraPay
serviceCode String Mandatory Kode service yang diakses
latestTransactionStatus String Mandatory 00 - Success
01 - Initiated
02 - Paying
03 - Pending
04 - Refunded
05 - Canceled
06 - Failed
07 - Not found
refundHistory Object Optional Riwayat refund, jika belum pernah refund akan kosong
refundNo String Conditional ID refund
partnerReferenceNo String Mandatory ID refund dari Merchant/Partner
refundAmount Object Mandatory -
refundAmount.value String(ISO4217) Mandatory Jumlah net dari refund termasuk 2 digit decimal. Cth: 100000.00
refundAmount.currency String Mandatory Kode mata uang berdasarkan ISO (IDR)
refundStatus String Mandatory Status refund
refundDate String Conditional Tanggal refund
reason String Optional Alasan refund
transAmount Object Mandatory -
transAmount.value String(ISO4217) Mandatory Jumlah transaksi yang dibayarkan termasuk 2 digit decimal. Cth: 100000.00
transAmount.currency String Mandatory Kode mata uang berdasarkan ISO (IDR)
feeAmount Object Mandatory -
feeAmount.value String(ISO4217) Mandatory Jumlah biaya layanan yang dibayarkan termasuk 2 digit decimal. Cth: 2000.00
feeAmount.currency String Mandatory Kode mata uang berdasarkan ISO (IDR)
paidTime String Conditional Tanggal transaksi
additionalInfo Object Optional Informasi tambahan

API Direct Debit Payment Notify

API ini digunakan untuk melakukan callback dari AstraPay ke merchant.

img

Protocol & Service Address

Item Value
Protocol HTTPS
Service Code 56
Channel ID 00656
Method POST
URL Sandbox /v1.0/debit/notify
Content-Type application/json

Request Header

Name Type Requirement Description
Authorization String Mandatory Bearer token dari hasil generate dari API Access Token B2B
Content-Type String Mandatory Tipe konten, data yang dikirim harus selalu application/json
X-TIMESTAMP String Mandatory Waktu lokal Merchant/Partner dalam format yyyy-MM-ddTHH:mm:ssTZD yang valuenya sama dengan yang digunakan pada signature-auth, token B2B Access Token Request, dan signature-service
X-SIGNATURE String Mandatory Signature untuk API Direct Debit hasil dari generate Signature Service
X-PARTNER-ID String Mandatory Client ID Merchant/Partner yang didapat dari AstraPay
X-EXTERNAL-ID String Mandatory Numeric string unik yang hanya dapat digunakan satu kali dalam satu hari. Format yang digunakan adalah: 36 Random Numeric String
CHANNEL-ID String Mandatory ID dari service yang mengakses API Payment Notify (00656)

Request Body

Contoh cURL Direct Debit Payment Notify

curl --location --request POST 'https://merchant.com/v2/snap/v1.0/debit/notify' \
--header 'Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJhcHByZXN0c2VydmljZSIsImF1ZCI6InNsYXNocm9vdCIsImlhdCI6MTY3MTEzNDUyMSwibmJmIjoxNjcxMTM0NTIxLCJleHAiOjE2NzExMzgxMjEsImRhdGEiOnsidWlkIjoiZDBmNTU0NTJjM2E2MmQ0MDNlNjNiNDRmZGFiMGY4NGU0NTZhYjc0YTIwMjIxMjE2MDMwMjAxIiwidWlwIjoiYjNmNjM0NjY5OTQwZTA4YWFlZDQ1NDZhMGZlMjFmNjJkMWJjNDcwMDIwMjIxMjE2MDMwMjAxIn19.jGoDTMu0H7-nxdmQnTOnRiJIucxjvB1yokOsuoIzWbA' \
--header 'Content-Type: application/json' \
--header 'X-TIMESTAMP: 2022-12-15T17:07:16+07:00' \
--header 'X-SIGNATURE: EwSP45pjvkOTJ59OJkjbhKQwqQuonulSZ0yiswz6q3r0U0OgWest15xOAdQ8Fu5lY6+wRJIt3a3J9i6SHO6OUw==' \
--header 'X-PARTNER-ID: dcb60ae4-4d38-11ec-81d3-0242ac130003' \
--header 'X-EXTERNAL-ID: 167284702245712690811679223447346553' \
--header 'CHANNEL-ID: 00656' \
--data-raw '{
   "originalPartnerReferenceNo":"AP2210110252200023",
   "originalReferenceNo":"INV/PAY/ONP/221215/NP5BYX56D26",
   "merchantId":"1478c1f7-f06d-426b-95cd-034cd085910e",
   "amount":{
      "value":"10000.00",
      "currency":"IDR"
   },
   "latestTransactionStatus":"00",
   "finishedTime":"2022-12-15T17:07:15+07:00"
}'
Field Type Requirement Description
originalPartnerReferenceNo String Mandatory ID transaksi dari Merchant/Partner (Merchant Transaction ID)
originalReferenceNo String Mandatory AstraPay Transaction ID
merchantId String Mandatory Kode unik setiap merchant yang diberikan AstraPay
amount String Mandatory -
amount.value String(ISO4217) Mandatory Jumlah bersih transaksi yang diterima termasuk 2 digit decimal. Cth: 10000.00
amount.currency String Mandatory Mata uang
latestTransactionStatus String Mandatory 00 - Success
01 - Initiated
02 - Paying
03 - Pending
04 - Refunded
05 - Canceled
06 - Failed
07 - Not found
finishedTime String Mandatory Waktu transaksi selesai

Response Body

Contoh Response

{
   "responseCode":"2005600",
   "responseMessage":"Request has been processed successfully"
}
Field Type Requirement Description
responseCode String Mandatory Lihat response list
responseMessage String Mandatory Lihat response list

API Direct Debit Payment Refund (BETA)

API ini digunakan untuk melakukan pengembalian saldo ke user. Hubungi kami apabila ingin mengimplementasikan API ini

img

Protocol & Service Address

Item Value
Protocol HTTPS
Service Code 58
Channel ID 00258
Method POST
URL Sandbox /merchant-service/snap/v1.0/debit/refund
Content-Type application/json

Request Header

Name Type Requirement Description
Authorization String Mandatory Bearer token dari hasil generate dari API Access Token B2B
Content-Type String Mandatory Tipe konten, data yang dikirim harus selalu application/json
X-TIMESTAMP String Mandatory Waktu lokal Merchant/Partner dalam format yyyy-MM-ddTHH:mm:ssTZD yang valuenya sama dengan yang digunakan pada signature-auth, token B2B Access Token Request, dan signature-servic
X-SIGNATURE String Mandatory Signature untuk API Payment Refund hasil dari generate Signature Service
X-PARTNER-ID String Mandatory Client ID Merchant/Partner yang didapat dari AstraPay
X-EXTERNAL-ID String Mandatory Numeric string unik yang hanya dapat digunakan satu kali dalam satu hari. Format yang digunakan adalah: 36 Random Numeric String
CHANNEL-ID String Mandatory ID dari service yang mengakses API Payment Refund (00258)

Request Body

Contoh cURL Direct Debit Payment Refund

curl --location --request POST 'https://sandbox.astrapay.com/merchant-service/snap/v1.0/debit/refund' \
--header 'Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICIzTF9udFF6MGZsNjl5UHB4T2RBTDk3NDNGOU05UWszVklTOWMwZGNwa2VFIn0' \
--header 'Content-Type: application/json' \
--header 'X-TIMESTAMP: 2020-01-01T00:00:00+07:00' \
--header 'X-SIGNATURE: lD0iXRtzEyJ8VmyDLPcm9zHfTXXn0OnhbI6pB6fd6q6FSw6XQt9IwGG/PNm38ouJDVd15Y8Y8XIKnxLiCe/pUQ==' \
--header 'X-PARTNER-ID: c18ec35f-57d6-4f69-b97e-b2ef2ce78abb' \
--header 'X-EXTERNAL-ID: 12345678901' \
--header 'CHANNEL-ID: 305' \
--data-raw '{
   "originalPartnerReferenceNo":"TESTNG-PAYMENT-INQUIRY 1",
   "originalReferenceNo":"INV/PAC/ONP/221019/26CSJKHFU13",
   "partnerRefundNo":"PARTNER/NO/123/011/1",
   "refundAmount":{
      "value": "10000.00",
      "currency":"IDR"
   },
   "reason":"Test refund"
}'
Field Type Requirement Description
OriginalPartnerReferenceNo String Mandatory ID transaksi dari Merchant/Partner (Merchant Transaction ID)
OriginalReferenceNo String Mandatory AstraPay Transaction ID
partnerRefundNo String Mandatory Nomor refund dari Merchant/Partner
refundAmount Object Mandatory -
refundAmount.value String(ISO4217) Mandatory Jumlah saldo yang dikembalikan termasuk 2 digit decimal. Cth: 10000.00
refundAmount.currency String Mandatory Mata uang
reason String Mandatory Alasan pengembalian saldo

Response Body

Contoh Response

{
   "responseCode":"2005800",
   "responseMessage":"Request In Progress",
   "originalPartnerReferenceNo":"2020102900000000000001",
   "originalReferenceNo":"2020102977770000000009",
   "refundNo":"REF993883",
   "partnerRefundNo":"239850918204981205970",
   "refundAmount":{
      "value":"10000.00",
      "currency":"IDR"
   },
   "refundTime":"2020-12-21T17:21:41+07:00",
   "additionalInfo":{
        "reason":"Customer Complaint"
    },
}
Field Type Requirement Description
responseCode String Mandatory Lihat response list
responseMessage String Mandatory Lihat response list
originalPartnerReferenceNo String Mandatory ID transaksi dari Merchant/Partner (Merchant Transaction ID)
OriginalReferenceNo String Mandatory AstraPay Transaction ID
refundNo String Mandatory AstraPay Transaction ID
OriginalReferenceNo String Mandatory Nomor pengembalian dana yang di generate oleh AstraPay
partnerRefundNo String Mandatory Nomor pengembalian dana dari Partner/Merchant
refundAmount Object Mandatory -
refundAmount.value String(ISO4217) Mandatory Jumlah saldo yang dikembalikan
refundAmount.currency String Mandatory Mata uang
refundTime String Mandatory Waktu pengembalian saldo diajukan
additionalInfo Object Mandatory Informasi tambahan
additionalInfo.reason String Mandatory Alasan pengembalian dana

SNAP Balance Inquiry

Layanan ini digunakan untuk mengecek saldo customer yang hanya terdiri dari 1 API, yaitu API Balance Inquiry.

Use Case Diagram

Berikut adalah use case diagram Balance Inquiry img

Berikut ini adalah flow Balance Inquiry. img

API Balance Inquiry

API ini digunakan untuk mengetahui jumlah saldo customer.

Protocol & Service Address

Item Value
Protocol HTTPS
Service Code 11
Channel ID 00311
Method POST
URL Sandbox /merchant-service/snap/v1.0/balance-inquiry
Content-Type application/json

Request Header

Name Type Requirement Description
Authorization String Mandatory Bearer token dari hasil generate dari API Access Token B2B
Authorization-Customer String Mandatory Akses token milik customer hasil generate dari API Access Token B2B2C. Bersifat wajib ketika menggunakan metode pembayaran payment with linking
Content-Type String Mandatory Tipe konten, data yang dikirim harus selalu application/json
X-TIMESTAMP String Mandatory Waktu lokal Merchant/Partner dalam format yyyy-MM-ddTHH:mm:ssTZD
X-SIGNATURE String Mandatory Signature untuk API Direct Debit hasil dari generate Signature Service
X-PARTNER-ID String Mandatory Client ID Merchant/Partner yang didapat dari AstraPay
X-EXTERNAL-ID String Mandatory Numeric string unik yang hanya dapat digunakan satu kali dalam satu hari. Format yang digunakan adalah: 36 Random Numeric String
X-DEVICE-ID String Conditional Identifier device yang digunakan oleh customer pada API yang sedang diakses. Bersifat wajib ketika menggunakan metode pembayaran payment with linking
CHANNEL-ID String Mandatory ID dari service yang mengakses API Balance Inquiry (00311)

Request Body

Contoh cURL Balance Inquiry

curl --location --request POST 'https://sandbox.astrapay.com/merchant-service/snap/v1.0/balance-inquiry' \
--header 'Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICI1QjhXRGtYSzVBMWpyeFVrckMyWnB4NFN4XzVBRUlhMVpjM1NsOVZobUtJIn0.eyJleHAiOjE2NzA5MzgzNjAsImlhdCI6MTY3MDkwMjM2MCwianRpIjoiYTZmMWIzNWItM2Y0NS00ZjJmLThiYzQtODQ0ZDcxOTE1NzNkIiwiaXNzIjoiaHR0cDovLzEwLjIwLjcuNjo4NDQzL2F1dGgvcmVhbG1zL2FzdHJhcGF5LWJ1c2luZXNzIiwiYXVkIjoiYWNjb3VudCIsInN1YiI6IjMzZTRhYTQ0LTU2M2QtNGE5NC05NjE2LWQ0MDdlZTZhZjc0NyIsInR5cCI6IkJlYXJlciIsImF6cCI6ImMxOGVjMzVmLTU3ZDYtNGY2OS1iOTdlLWIyZWYyY2U3OGFiYiIsImFjciI6IjEiLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsiZGVmYXVsdC1yb2xlcy1hc3RyYXBheS1idXNpbmVzcyIsIm9mZmxpbmVfYWNjZXNzIiwidW1hX2F1dGhvcml6YXRpb24iXX0sInJlc291cmNlX2FjY2VzcyI6eyJhY2NvdW50Ijp7InJvbGVzIjpbIm1hbmFnZS1hY2NvdW50IiwibWFuYWdlLWFjY291bnQtbGlua3MiLCJ2aWV3LXByb2ZpbGUiXX19LCJzY29wZSI6InByb2ZpbGUgZW1haWwiLCJlbWFpbF92ZXJpZmllZCI6ZmFsc2UsImNsaWVudEhvc3QiOiIxNzIuMjAuMTAuMzkiLCJjbGllbnRJZCI6ImMxOGVjMzVmLTU3ZDYtNGY2OS1iOTdlLWIyZWYyY2U3OGFiYiIsInByZWZlcnJlZF91c2VybmFtZSI6InNlcnZpY2UtYWNjb3VudC1jMThlYzM1Zi01N2Q2LTRmNjktYjk3ZS1iMmVmMmNlNzhhYmIiLCJjbGllbnRBZGRyZXNzIjoiMTcyLjIwLjEwLjM5In0.XF8epufqemFGyb94GKz53O4lXQ_jyF2UBuyfc4DagWDgGWBKQVosg_VrEwAVdjgeakQQHIDc7Bq3kCfBt1AGxJjASxpsdgpAhx9DmhsfK8YQnK2-WPyvjHIdAA1Ws8Amr8ccCs5iSlXd5Vz6gjnu5ETfxFOEJztu-RtURM7lwnkp8P4rHTf47lZEpC6zAGqasKdUE1AtVP3GW6arMCB0SE-2roWoP1bFMYq802fHcIqdIT0Egc55UnQbsXYfUbrDZ1YvuVJehUamn1PJe5HWZ2PyYGMqhn4efE5xElfWLyeJO2llbNPrCLBgRrgGqYwzWPCuZRKpCnJNyHne3_3oZA' \
--header 'Authorization-Customer: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzUxMiJ9.eyJleHRlcm5hbFVpZCI6InVzZXJJZDEyMyIsInN1YiI6IjA4MjIzNTQwMTExMyIsIm5iZiI6MTY3MDkwMjQ4MiwibWVyY2hhbnRJZCI6ImMxOGVjMzVmLTU3ZDYtNGY2OS1iOTdlLWIyZWYyY2U3OGFiYiIsImlzcyI6IkFzdHJhUGF5LVNuYXAiLCJjbGFpbSI6IlNOQVAiLCJleHAiOjE2NzIxOTg0ODIsInR5cGUiOiJBQ0NFU1MiLCJpYXQiOjE2NzA5MDI0ODIsInVzZXJJZCI6MjAwMDI4LCJqdGkiOiJkMDRhYWYzOS03YjEyLTQ1YzAtODYzYS1lYTIzMDhkNzJiMTUifQ.WdAwnIzcN7aobItqxdWjbb7FdodlK73_qs8HVBOZu5gCjMK5PyuP2vWL49hfuiDm85IlTOs5S9HnEdqHGPOhfdORa6pnkxX9v884N-Nq-eRoBbYSHsZTzvNGKlg_zvFBHveC6_GCxCwIzKzXMtIJoi2_ZmrgupRbW9KZTqzqUWIYYEjCMQS-dGh3s79iQ2cIiUD-PonINnXTtaq31fBPd2TT0nHoXrYzxVvN2Vzq289ivzb0A3tx2tmFdCkbzKrYstBhcQ3vragu7-TiJ2kR9Mf_o7K6jVulOpCr-tmxawblJPDnWJqzyVJtgnRB7j0W9n4pw3USohWz_Yd_t5GebQ' \
--header 'Content-Type: application/json' \
--header 'X-TIMESTAMP: 2022-10-23T07:44:11+07:00' \
--header 'X-SIGNATURE: xxxTuetiAq4Iv0gTmP+9R6jF1glQf85sS48qRrZHZHGrEEeDE+RummnSCVZiZuJTkaLOywNkcQxx' \
--header 'X-PARTNER-ID: c18ec35f-57d6-4f69-b97e-b2ef2ce78abb' \
--header 'X-EXTERNAL-ID: 003111234567890124s2s2r' \
--header 'X-DEVICE-ID: 09864ADCASA' \
--header 'CHANNEL-ID: 00311' \
--data-raw '{
    "balanceTypes": ["BALANCE", "POINT"]
}'
Field Type Requirement Description
balanceTypes Array of String Mandatory Menentukan jenis saldo customer yang ingin ditampilkan (Untuk AstraPay saat ini hanya ada jenis saldo "balance" dan saldo "point")
balance String Mandatory Jenis saldo

Response Body

Contoh Response

{
   "responseCode":"2001100",
   "responseMessage":"Successful",
   "accountInfos":[
      {
         "balanceType":"BALANCE",
         "amount":{
            "value":"10000.00",
            "currency":"IDR"
         }
      },
      {
         "balanceType":"POINT",
         "amount":{
            "value":"100.00",
            "currency":"IDR"
         }
      }
   ],
   "additionalInfo":[
         "userStatus" : "LOCKED"
   ]
}
Field Type Requirement Description
responseCode String Mandatory Lihat response list
responseMessage String Mandatory Lihat response list
accountInfos List Optional Berisikan informasi mengenai saldo customer
balanceType String Mandatory Jenis saldo
amount Object Optional -
amount.value String (ISO4217) Mandatory Jumlah bersih transaksi yang diterima termasuk 2 digit decimal. Cth: 10000.00
amount.currency String Mandatory Mata uang
additionalInfo Object Optional Informasi tambahan
*Akan release di bulan Mei 2024
additionalInfo.userStatus String Mandatory Status akun user (ACTIVE/LOCKED/INCLOSURE)
*Akan release di bulan Mei 2024

Response List Payment Channel

Dibawah ini merupakan daftar response code yang akan muncul. Format “xx” dalam Response Code diisikan dengan Service Code dari masing-masing api.

Response Code Response Message Description
404xx08 Invalid Merchant Client ID atau Merchant ID tidak ditemukan
200xx00 Successful Sukses
400xx00 Bad Request Pesan umum yang akan diterima ketika permintaan gagal/tidak sesuai
500xx00 General Error General Error
401xx01 Invalid Token (B2B) Request token invalid
401xx00 Unauthorized. Signature Invalid signature
409xx00 Conflict Menggunakan X-EXTERNAL-ID yang sama di hari yang sama
400xx01 Invalid Field Format X-TIMESTAMP Format field X-TIMESTAMP salah
400xx01 Invalid Field Format X-EXTERNAL-ID Format field X-EXTERNAL-ID salah
400xx01 Invalid Field Format CHANNEL-ID Format field CHANNEL-ID salah
400xx02 Invalid Field Format X-TIMESTAMP X-TIMESTAMP tidak ada atau tidak lengkap
400xx02 Invalid Field Format X-EXTERNAL-ID X-EXTERNAL-ID tidak ada atau tidak lengkap
400xx02 Invalid Field Format X-PARTNER-ID X-PARTNER-ID tidak ada atau tidak lengkap
400xx02 Invalid Field Format CHANNEL-ID CHANNEL-ID tidak ada atau tidak lengkap

Response List Payment

Response Code Response Message Description
4015401 Invalid Token (B2B2C) Request Token B2B2C invalid
4035405 Inactive Account Akun Inactive
4095401 Duplicate partnerReferenceNo Transaction ID merchant lebih dari satu

Response List Payment Status

Response Code Response Message Description
4045501 Transaction Not Found Transaksi tidak ditemukan

Response List Payment Refund

Response Code Response Message Description
2025800 Request in Progress Refund sedang diproses
4045801 Transaction Not Found Transaksi tidak ditemukan
4045801 Invalid Transaction Status Transaksi belum disetujui
4005800 Bad Request. originalPartnerReferenceNo Transaksi refund sudah pernah diproses
4005800 Bad Request. partnerRefundNo Partner refund number kosong/sudah tersedia
4005800 Bad Request. Refund Has Been Successful Transaksi refund sudah sukses
4005800 Bad Request. Refund Has Been Processing Transaksi refund sedang diproses
4035806 Feature Not Allowed At This Time. It’s Because refund request not refundable Transaksi belum bisa dilakukan refund
2025800 Feature Not Allowed At This Time. Refund request must not be expired Transaksi tidak bisa diproses karena sudah kedaluwarsa (30 hari)

Response List Balance Inquiry

Response Code Response Message Description
4011101 Invalid Token B2B2C Request Token B2B2C invalid
4041111 Invalid Account User Account is closed
*Akan release di bulan Mei 2024

Response List Account Binding Inquiry

Response Code Response Message Description
4010804 Customer Token Not Found Token tidak ditemukan pada sistem

Panduan Penyesuaian SNAP AstraPay

Merchant yang sudah pernah melakukan integrasi dengan AstraPay dan ingin melakukan penyesuaian dengan menggunapan SNAP API AstraPay, perlu mengetahui beberapa hal dibawah ini:

Penambahan API yang akan diimplementasi untuk melakukan integrasi sesuai SNAP

Nama API Deskripsi
API Access Token B2B Digunakan untuk mengambil token otoriasasi Client ID dan Client Secret. Token digunakan untuk otorisasi HTTP Header
API Access Token B2B2C Digunakan untuk mengambil token otoriasasi user sebagai identifikasi pada setiap API yang berkaitan dengan data customer
API Account Binding Digunakan untuk mendapatkan authCode
API Account Binding Inquiry (Opsional) Digunakan untuk mengecek status binding customer

Daftar Perubahan API sesuai SNAP AstraPay

Fungsi API Sebelumnya SNAP AstraPay
Menghubungkan account customer dengan AstraPay API Account Link and Registration - API Account Binding
- API Access Token B2B2C
- API Account Binding Inquiry (Opsional)
Menampilkan saldo AstraPay customer API Get Profile API Balance Inquiry
Memproses pembayaran API Payment with Linking
API Push to Payment
API Direct Debit Payment
Melakukan pengembalian dana customer API Refund BETA API Direct Debit Refund
Mengetahui status transaksi yang sedang di proses API Transaction Status API Direct Debit Payment Status
Mendapatkan callback proses transaksi dari AstraPay Sebelumnya sudah terdapat di dalam API Payment with Linking dan Push to Payment API Direct Debit Nofify

Disbursement

Alur Disbursement

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: a9652973-4a43-434f-924f-f584f50feed6
  client_secret: ck2IwGsOvZa8L15kCTjCB2bvGYsLFDv4

Request

Field Tipe Data Wajib Deskripsi
grant_type String Y Validasi jenis akses. Format: client_credentials
client_id String(36) Y String unik sebagai ID untuk menandakan Merchant yang mengirim request
client_secret String(32) Y String unik rahasia untuk menandakan Merchant yang mengirim request

Sample Response Body

{
    "access_token": "eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJlVm9kSlYzeVN6aUlyLW9aZjZCQzJtUVVaTmJFLWFaQndETjFUUmxmZE1jIn0.eyJleHAiOjE2Mzk0NDY3NzksImlhdCI6MTYzOTQ0NjQ3OSwianRpIjoiMzUxYWVlYTAtNTE2Ny00OTVkLWJhNTYtYWY5NmRhOTg2ZTFjIiwiaXNzIjoiaHR0cDovLzE3Mi4yMC4zLjEyNDo4MDgwL2F1dGgvcmVhbG1zL2FzdHJhcGF5LWJ1c2luZXNzIiwiYXVkIjoiYWNjb3VudCIsInN1YiI6IjJlNjJmNzVhLTA2Y2UtNGQ5ZC04NTRkLTdiYWYxYjk0OWJiOSIsInR5cCI6IkJlYXJlciIsImF6cCI6IjYwMDY4YzlmLTkyMGMtNGVlMy05M2Q5LWQ0NWRlMzcxZjJlMSIsImFjciI6IjEiLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsiZGVmYXVsdC1yb2xlcy1hc3RyYXBheS1idXNpbmVzcyIsIm9mZmxpbmVfYWNjZXNzIiwidW1hX2F1dGhvcml6YXRpb24iXX0sInJlc291cmNlX2FjY2VzcyI6eyJhY2NvdW50Ijp7InJvbGVzIjpbIm1hbmFnZS1hY2NvdW50IiwibWFuYWdlLWFjY291bnQtbGlua3MiLCJ2aWV3LXByb2ZpbGUiXX19LCJzY29wZSI6InByb2ZpbGUgZW1haWwiLCJlbWFpbF92ZXJpZmllZCI6ZmFsc2UsImNsaWVudEhvc3QiOiIxNzIuMjAuMy4xMjMiLCJjbGllbnRJZCI6IjYwMDY4YzlmLTkyMGMtNGVlMy05M2Q5LWQ0NWRlMzcxZjJlMSIsInByZWZlcnJlZF91c2VybmFtZSI6InNlcnZpY2UtYWNjb3VudC02MDA2OGM5Zi05MjBjLTRlZTMtOTNkOS1kNDVkZTM3MWYyZTEiLCJjbGllbnRBZGRyZXNzIjoiMTcyLjIwLjMuMTIzIn0.THD7R67KhJu93x4pBzQUSbxb4riGTROdPCFiVTGhz9v1sYmo7Ku1rDNrRw2hZcnnIxrXMPlVsHeLSrjS_gpXFUTSibqGlpqKpQ-niHxWnzHns-IbUAZF0Us0pj_7Yx3g0Q7huGwyV-ZyMXYrgZFCul4IKloUgEkYASznGGM2dCuH9kp90tGwXfQwLsgmq570mtE9LpSS0lIg92uLd8H7nDTCAhQVgG-9r5RkuxJv7GZqcajD2G4hrZgkR8FrtY5gnMu-mA4GzWGfpVwFWqRY_i9y2_nP5attQ07IsbFaARR6SKnMUAVG11mtRopDn8b4MTLpcAJ_IpVYRaQ8KcrZ_Q",
    "expires_in": 3600,
    "refresh_expires_in": 0,
    "token_type": "Bearer",
    "not-before-policy": 0,
    "scope": "profile email"
}

Kode Error

Status Code Message Deskripsi
200
OK
Client berhasil teridentifikasi dan akses token diberikan.
400
Bad Request
Invalid client credentials Otentikasi klien gagal client_id atau client_secret tidak dikenal.
Unsupported grant_type value grant_type yang tidak sesuai.
Client secret not provided in request client_secret tidak disertakan dalam request.
Missing form parameter: grant_type value grant_type tidak disertakan dalam request.
500
Internal Server Error
Respons tidak valid dari Back-end atau Kesalahan Tidak Terdefinisi

Signature

Signature digunakan oleh AstraPay untuk memverifikasi bahwa request dari Host tidak tersusupi oleh hacker.

Generate Signature

Contoh StringToSign

HttpMethod   : POST
Url          : /disbursement-service/h2h/inquiries
AstraPayKey  : eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJiOThDaFhUWFVJQ3J4SjhadWt5OWNCUXpBLThqQnhxa0lndmpoM0h3SVpFIn0.eyJleHAiOjE2NDg2MjE2ODksImlhdCI6MTY0ODYyMTM4OSwianRpIjoiM2RlZmY3MzAtZTllZi00MWM5LTk4MWYtZDdlOTcyYjZiNjMzIiwiaXNzIjoiaHR0cDovLzE3Mi4yMC42Ljc5OjgwODAvYXV0aC9yZWFsbXMvYXN0cmFwYXktYnVzaW5lc3MiLCJhdWQiOiJhY2NvdW50Iiwic3ViIjoiMmQzMGUzYjAtNjk0Yi00NjkyLWE4YmUtYmJhNTA5ZjBjNjQ5IiwidHlwIjoiQmVhcmVyIiwiYXpwIjoiODE5Njk2MTItYWZmMS0xMWVjLWI5MDktMDI0MmFjMTIwMDAyIiwiYWNyIjoiMSIsInJlYWxtX2FjY2VzcyI6eyJyb2xlcyI6WyJkZWZhdWx0LXJvbGVzLWFzdHJhcGF5LWJ1c2luZXNzIiwib2ZmbGluZV9hY2Nlc3MiLCJ1bWFfYXV0aG9yaXphdGlvbiJdfSwicmVzb3VyY2VfYWNjZXNzIjp7ImFjY291bnQiOnsicm9sZXMiOlsibWFuYWdlLWFjY291bnQiLCJtYW5hZ2UtYWNjb3VudC1saW5rcyIsInZpZXctcHJvZmlsZSJdfX0sInNjb3BlIjoicHJvZmlsZSBlbWFpbCIsImVtYWlsX3ZlcmlmaWVkIjpmYWxzZSwiY2xpZW50SG9zdCI6IjE3Mi4yMC42LjEwOSIsImNsaWVudElkIjoiODE5Njk2MTItYWZmMS0xMWVjLWI5MDktMDI0MmFjMTIwMDAyIiwicHJlZmVycmVkX3VzZXJuYW1lIjoic2VydmljZS1hY2NvdW50LTgxOTY5NjEyLWFmZjEtMTFlYy1iOTA5LTAyNDJhYzEyMDAwMiIsImNsaWVudEFkZHJlc3MiOiIxNzIuMjAuNi4xMDkifQ.dcVfUrHe53BXZU2abOvSxFkZy59BcEO6Zb3jLMlU9FL_XBxN09lPSgQ_MY2ejksz0oTHkyjlRz9apG6c3n5GY34hj6jjY_UFV6A97VVv53F0nLqdpTlFKQYuzIrZs4BJmUzvBGviTI9K9dNagQ6rop6LwsqzJxGT8laS5EtIDDqaP4kciADqv0xOaWZfqYE9nbz91w54qQ5vT2y64XeINoQXFzr7hvhmXY8sgbCWDgKdlxnWU_oN-76EJmT2Yfa66aEMF8vIL7NLk_6_MsVduIdvge5covOltsWnICOZUHThfDj-CLbzUL55d62h7PkMmOKlCdl9HCS8pa_CKK4Rtg
RequestBody  : {"userIdentification":"085939526552","amount":15000}
Timestamp    : 2021-04-21T11:37:51.436Z

StringToSign : POST:/disbursement-service/h2h inquiries:eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJiOThDaFhUWFVJQ3J4SjhadWt5OWNCUXpBLThqQnhxa0lndmpoM0h3SVpFIn0.eyJleHAiOjE2NDg2MjE2ODksImlhdCI6MTY0ODYyMTM4OSwianRpIjoiM2RlZmY3MzAtZTllZi00MWM5LTk4MWYtZDdlOTcyYjZiNjMzIiwiaXNzIjoiaHR0cDovLzE3Mi4yMC42Ljc5OjgwODAvYXV0aC9yZWFsbXMvYXN0cmFwYXktYnVzaW5lc3MiLCJhdWQiOiJhY2NvdW50Iiwic3ViIjoiMmQzMGUzYjAtNjk0Yi00NjkyLWE4YmUtYmJhNTA5ZjBjNjQ5IiwidHlwIjoiQmVhcmVyIiwiYXpwIjoiODE5Njk2MTItYWZmMS0xMWVjLWI5MDktMDI0MmFjMTIwMDAyIiwiYWNyIjoiMSIsInJlYWxtX2FjY2VzcyI6eyJyb2xlcyI6WyJkZWZhdWx0LXJvbGVzLWFzdHJhcGF5LWJ1c2luZXNzIiwib2ZmbGluZV9hY2Nlc3MiLCJ1bWFfYXV0aG9yaXphdGlvbiJdfSwicmVzb3VyY2VfYWNjZXNzIjp7ImFjY291bnQiOnsicm9sZXMiOlsibWFuYWdlLWFjY291bnQiLCJtYW5hZ2UtYWNjb3VudC1saW5rcyIsInZpZXctcHJvZmlsZSJdfX0sInNjb3BlIjoicHJvZmlsZSBlbWFpbCIsImVtYWlsX3ZlcmlmaWVkIjpmYWxzZSwiY2xpZW50SG9zdCI6IjE3Mi4yMC42LjEwOSIsImNsaWVudElkIjoiODE5Njk2MTItYWZmMS0xMWVjLWI5MDktMDI0MmFjMTIwMDAyIiwicHJlZmVycmVkX3VzZXJuYW1lIjoic2VydmljZS1hY2NvdW50LTgxOTY5NjEyLWFmZjEtMTFlYy1iOTA5LTAyNDJhYzEyMDAwMiIsImNsaWVudEFkZHJlc3MiOiIxNzIuMjAuNi4xMDkifQ.dcVfUrHe53BXZU2abOvSxFkZy59BcEO6Zb3jLMlU9FL_XBxN09lPSgQ_MY2ejksz0oTHkyjlRz9apG6c3n5GY34hj6jjY_UFV6A97VVv53F0nLqdpTlFKQYuzIrZs4BJmUzvBGviTI9K9dNagQ6rop6LwsqzJxGT8laS5EtIDDqaP4kciADqv0xOaWZfqYE9nbz91w54qQ5vT2y64XeINoQXFzr7hvhmXY8sgbCWDgKdlxnWU_oN-76EJmT2Yfa66aEMF8vIL7NLk_6_MsVduIdvge5covOltsWnICOZUHThfDj-CLbzUL55d62h7PkMmOKlCdl9HCS8pa_CKK4Rtg:77bf1abdccbeeff284c4f06b99d5cf9e22bfa56cc744aa5784da873275a1c86c:2021-04-21T11:37:51.436Z
Value Deskripsi Contoh
HTTPMethod Jenis dari HTTP Method, tetap dalam value UPPERCASE POST, GET
Url Keseluruhan Uniform Resource Locator yang diakses oleh Host, semua karakter setelah nama domain /disbursement-service/h2h/inquiries
AstraPayKey Bearer Token yang dikirim melalui request header dengan field x-astrapay-key

eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJiOThDaFhUWFVJQ3J4SjhadWt5OWNCUXpBLThqQnhxa0lndmpoM0h3SVpFIn0.eyJleHAiOjE2NDg2MjE2ODksImlhdCI6MTY0ODYyMTM4OSwianRpIjoiM2RlZmY3MzAtZTllZi00MWM5LTk4MWYtZDdlOTcyYjZiNjMzIiwiaXNzIjoiaHR0cDovLzE3Mi4yMC42Ljc5OjgwODAvYXV0aC9yZWFsbXMvYXN0cmFwYXktYnVzaW5lc3MiLCJhdWQiOiJhY2NvdW50Iiwic3ViIjoiMmQzMGUzYjAtNjk0Yi00NjkyLWE4YmUtYmJhNTA5ZjBjNjQ5IiwidHlwIjoiQmVhcmVyIiwiYXpwIjoiODE5Njk2MTItYWZmMS0xMWVjLWI5MDktMDI0MmFjMTIwMDAyIiwiYWNyIjoiMSIsInJlYWxtX2FjY2VzcyI6eyJyb2xlcyI6WyJkZWZhdWx0LXJvbGVzLWFzdHJhcGF5LWJ1c2luZXNzIiwib2ZmbGluZV9hY2Nlc3MiLCJ1bWFfYXV0aG9yaXphdGlvbiJdfSwicmVzb3VyY2VfYWNjZXNzIjp7ImFjY291bnQiOnsicm9sZXMiOlsibWFuYWdlLWFjY291bnQiLCJtYW5hZ2UtYWNjb3VudC1saW5rcyIsInZpZXctcHJvZmlsZSJdfX0sInNjb3BlIjoicHJvZmlsZSBlbWFpbCIsImVtYWlsX3ZlcmlmaWVkIjpmYWxzZSwiY2xpZW50SG9zdCI6IjE3Mi4yMC42LjEwOSIsImNsaWVudElkIjoiODE5Njk2MTItYWZmMS0xMWVjLWI5MDktMDI0MmFjMTIwMDAyIiwicHJlZmVycmVkX3VzZXJuYW1lIjoic2VydmljZS1hY2NvdW50LTgxOTY5NjEyLWFmZjEtMTFlYy1iOTA5LTAyNDJhYzEyMDAwMiIsImNsaWVudEFkZHJlc3MiOiIxNzIuMjAuNi4xMDkifQ.dcVfUrHe53BXZU2abOvSxFkZy59BcEO6Zb3jLMlU9FL_XBxN09lPSgQ_MY2ejksz0oTHkyjlRz9apG6c3n5GY34hj6jjY_UFV6A97VVv53F0nLqdpTlFKQYuzIrZs4BJmUzvBGviTI9K9dNagQ6rop6LwsqzJxGT8laS5EtIDDqaP4kciADqv0xOaWZfqYE9nbz91w54qQ5vT2y64XeINoQXFzr7hvhmXY8sgbCWDgKdlxnWU_oN-76EJmT2Yfa66aEMF8vIL7NLk_6_MsVduIdvge5covOltsWnICOZUHThfDj-CLbzUL55d62h7PkMmOKlCdl9HCS8pa_CKK4Rtg

RequestBody Isi dari Body pada request, dalam bentuk compact / minify (menghapus semua tabs, whitespace) sebelum dilakukan hash dengan algoritma SHA-256 {"userIdentification":"08123456789","amount":15000}
Timestamp Timestamp dengan format ISO8601 dan dalam format waktu UTC, yyyy-MM-ddTHH:mm:ss.SSSZ. Dan dikirim melalui request header dengan field x-timestamp 2021-04-21T11:37:51.436Z

Contoh Request Header

curl --location --request POST 'https://sandbox.astrapay.com/disbursement-service/h2h/inquiries' \
--header 'Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJlVm9kSlYzeVN6aUlyLW9aZjZCQzJtUVVaTmJFLWFaQndETjFUUmxmZE1jIn0.eyJleHAiOjE2Mzk0NDY3NzksImlhdCI6MTYzOTQ0NjQ3OSwianRpIjoiMzUxYWVlYTAtNTE2Ny00OTVkLWJhNTYtYWY5NmRhOTg2ZTFjIiwiaXNzIjoiaHR0cDovLzE3Mi4yMC4zLjEyNDo4MDgwL2F1dGgvcmVhbG1zL2FzdHJhcGF5LWJ1c2luZXNzIiwiYXVkIjoiYWNjb3VudCIsInN1YiI6IjJlNjJmNzVhLTA2Y2UtNGQ5ZC04NTRkLTdiYWYxYjk0OWJiOSIsInR5cCI6IkJlYXJlciIsImF6cCI6IjYwMDY4YzlmLTkyMGMtNGVlMy05M2Q5LWQ0NWRlMzcxZjJlMSIsImFjciI6IjEiLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsiZGVmYXVsdC1yb2xlcy1hc3RyYXBheS1idXNpbmVzcyIsIm9mZmxpbmVfYWNjZXNzIiwidW1hX2F1dGhvcml6YXRpb24iXX0sInJlc291cmNlX2FjY2VzcyI6eyJhY2NvdW50Ijp7InJvbGVzIjpbIm1hbmFnZS1hY2NvdW50IiwibWFuYWdlLWFjY291bnQtbGlua3MiLCJ2aWV3LXByb2ZpbGUiXX19LCJzY29wZSI6InByb2ZpbGUgZW1haWwiLCJlbWFpbF92ZXJpZmllZCI6ZmFsc2UsImNsaWVudEhvc3QiOiIxNzIuMjAuMy4xMjMiLCJjbGllbnRJZCI6IjYwMDY4YzlmLTkyMGMtNGVlMy05M2Q5LWQ0NWRlMzcxZjJlMSIsInByZWZlcnJlZF91c2VybmFtZSI6InNlcnZpY2UtYWNjb3VudC02MDA2OGM5Zi05MjBjLTRlZTMtOTNkOS1kNDVkZTM3MWYyZTEiLCJjbGllbnRBZGRyZXNzIjoiMTcyLjIwLjMuMTIzIn0.THD7R67KhJu93x4pBzQUSbxb4riGTROdPCFiVTGhz9v1sYmo7Ku1rDNrRw2hZcnnIxrXMPlVsHeLSrjS_gpXFUTSibqGlpqKpQ-niHxWnzHns-IbUAZF0Us0pj_7Yx3g0Q7huGwyV-ZyMXYrgZFCul4IKloUgEkYASznGGM2dCuH9kp90tGwXfQwLsgmq570mtE9LpSS0lIg92uLd8H7nDTCAhQVgG-9r5RkuxJv7GZqcajD2G4hrZgkR8FrtY5gnMu-mA4GzWGfpVwFWqRY_i9y2_nP5attQ07IsbFaARR6SKnMUAVG11mtRopDn8b4MTLpcAJ_IpVYRaQ8KcrZ_Q' \
--header 'x-signature: fb0a2ae94f0148452459dd1f070d00194c607bb5636e149e5fc271d0a7da825b' \
--header 'x-timestamp: 2021-04-21T11:37:51.436Z' \
--header 'x-astrapay-key: eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJlVm9kSlYzeVN6aUlyLW9aZjZCQzJtUVVaTmJFLWFaQndETjFUUmxmZE1jIn0.eyJleHAiOjE2Mzk0NDY3NzksImlhdCI6MTYzOTQ0NjQ3OSwianRpIjoiMzUxYWVlYTAtNTE2Ny00OTVkLWJhNTYtYWY5NmRhOTg2ZTFjIiwiaXNzIjoiaHR0cDovLzE3Mi4yMC4zLjEyNDo4MDgwL2F1dGgvcmVhbG1zL2FzdHJhcGF5LWJ1c2luZXNzIiwiYXVkIjoiYWNjb3VudCIsInN1YiI6IjJlNjJmNzVhLTA2Y2UtNGQ5ZC04NTRkLTdiYWYxYjk0OWJiOSIsInR5cCI6IkJlYXJlciIsImF6cCI6IjYwMDY4YzlmLTkyMGMtNGVlMy05M2Q5LWQ0NWRlMzcxZjJlMSIsImFjciI6IjEiLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsiZGVmYXVsdC1yb2xlcy1hc3RyYXBheS1idXNpbmVzcyIsIm9mZmxpbmVfYWNjZXNzIiwidW1hX2F1dGhvcml6YXRpb24iXX0sInJlc291cmNlX2FjY2VzcyI6eyJhY2NvdW50Ijp7InJvbGVzIjpbIm1hbmFnZS1hY2NvdW50IiwibWFuYWdlLWFjY291bnQtbGlua3MiLCJ2aWV3LXByb2ZpbGUiXX19LCJzY29wZSI6InByb2ZpbGUgZW1haWwiLCJlbWFpbF92ZXJpZmllZCI6ZmFsc2UsImNsaWVudEhvc3QiOiIxNzIuMjAuMy4xMjMiLCJjbGllbnRJZCI6IjYwMDY4YzlmLTkyMGMtNGVlMy05M2Q5LWQ0NWRlMzcxZjJlMSIsInByZWZlcnJlZF91c2VybmFtZSI6InNlcnZpY2UtYWNjb3VudC02MDA2OGM5Zi05MjBjLTRlZTMtOTNkOS1kNDVkZTM3MWYyZTEiLCJjbGllbnRBZGRyZXNzIjoiMTcyLjIwLjMuMTIzIn0.THD7R67KhJu93x4pBzQUSbxb4riGTROdPCFiVTGhz9v1sYmo7Ku1rDNrRw2hZcnnIxrXMPlVsHeLSrjS_gpXFUTSibqGlpqKpQ-niHxWnzHns-IbUAZF0Us0pj_7Yx3g0Q7huGwyV-ZyMXYrgZFCul4IKloUgEkYASznGGM2dCuH9kp90tGwXfQwLsgmq570mtE9LpSS0lIg92uLd8H7nDTCAhQVgG-9r5RkuxJv7GZqcajD2G4hrZgkR8FrtY5gnMu-mA4GzWGfpVwFWqRY_i9y2_nP5attQ07IsbFaARR6SKnMUAVG11mtRopDn8b4MTLpcAJ_IpVYRaQ8KcrZ_Q' \
--header 'Content-Type: application/json'
Value Deskripsi Contoh
AstraPayValidationKey ValidationKey yang dikirimkan kepada Host dan bersifat rahasia String dengan panjang 44 karakter
AstraPaySignature Hasil generate signature dengan SHA-256 HMAC dengan komposisi dari StringToSign dan AstraPayValidationKey, dan dikirim melalui request header dengan field x-signature fb0a2ae94f0148452459dd1f070d00194c607bb5636e149e5fc271d0a7da825b

Respon Error Signature Tidak Sesuai

400 - Bad Request

Invalid signature

Inquiry Disbursement

Tahap ini merupakan proses awal dari transaksi disbursement. Proses ini membutuhkan nomor handphone pengguna AstraPay dan juga jumlah saldo disbursement. Proses ini wajib dilakukan sebelum melakukan commit transaksi disbursement dan saldo AstraPay belum diterima oleh pengguna pada tahap ini.

Complete Code

curl --location --request POST 'https://sandbox.astrapay.com/disbursement-service/h2h/inquiries' \
--header 'Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJiOThDaFhUWFVJQ3J4SjhadWt5OWNCUXpBLThqQnhxa0lndmpoM0h3SVpFIn0.eyJleHAiOjE2NDg2MjE2ODksImlhdCI6MTY0ODYyMTM4OSwianRpIjoiM2RlZmY3MzAtZTllZi00MWM5LTk4MWYtZDdlOTcyYjZiNjMzIiwiaXNzIjoiaHR0cDovLzE3Mi4yMC42Ljc5OjgwODAvYXV0aC9yZWFsbXMvYXN0cmFwYXktYnVzaW5lc3MiLCJhdWQiOiJhY2NvdW50Iiwic3ViIjoiMmQzMGUzYjAtNjk0Yi00NjkyLWE4YmUtYmJhNTA5ZjBjNjQ5IiwidHlwIjoiQmVhcmVyIiwiYXpwIjoiODE5Njk2MTItYWZmMS0xMWVjLWI5MDktMDI0MmFjMTIwMDAyIiwiYWNyIjoiMSIsInJlYWxtX2FjY2VzcyI6eyJyb2xlcyI6WyJkZWZhdWx0LXJvbGVzLWFzdHJhcGF5LWJ1c2luZXNzIiwib2ZmbGluZV9hY2Nlc3MiLCJ1bWFfYXV0aG9yaXphdGlvbiJdfSwicmVzb3VyY2VfYWNjZXNzIjp7ImFjY291bnQiOnsicm9sZXMiOlsibWFuYWdlLWFjY291bnQiLCJtYW5hZ2UtYWNjb3VudC1saW5rcyIsInZpZXctcHJvZmlsZSJdfX0sInNjb3BlIjoicHJvZmlsZSBlbWFpbCIsImVtYWlsX3ZlcmlmaWVkIjpmYWxzZSwiY2xpZW50SG9zdCI6IjE3Mi4yMC42LjEwOSIsImNsaWVudElkIjoiODE5Njk2MTItYWZmMS0xMWVjLWI5MDktMDI0MmFjMTIwMDAyIiwicHJlZmVycmVkX3VzZXJuYW1lIjoic2VydmljZS1hY2NvdW50LTgxOTY5NjEyLWFmZjEtMTFlYy1iOTA5LTAyNDJhYzEyMDAwMiIsImNsaWVudEFkZHJlc3MiOiIxNzIuMjAuNi4xMDkifQ.dcVfUrHe53BXZU2abOvSxFkZy59BcEO6Zb3jLMlU9FL_XBxN09lPSgQ_MY2ejksz0oTHkyjlRz9apG6c3n5GY34hj6jjY_UFV6A97VVv53F0nLqdpTlFKQYuzIrZs4BJmUzvBGviTI9K9dNagQ6rop6LwsqzJxGT8laS5EtIDDqaP4kciADqv0xOaWZfqYE9nbz91w54qQ5vT2y64XeINoQXFzr7hvhmXY8sgbCWDgKdlxnWU_oN-76EJmT2Yfa66aEMF8vIL7NLk_6_MsVduIdvge5covOltsWnICOZUHThfDj-CLbzUL55d62h7PkMmOKlCdl9HCS8pa_CKK4Rtg' \
--header 'x-signature: fb0a2ae94f0148452459dd1f070d00194c607bb5636e149e5fc271d0a7da825b' \
--header 'x-timestamp: 2021-04-21T11:37:51.436Z' \
--header 'x-astrapay-key: eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJlVm9kSlYzeVN6aUlyLW9aZjZCQzJtUVVaTmJFLWFaQndETjFUUmxmZE1jIn0.eyJleHAiOjE2Mzk0NDY3NzksImlhdCI6MTYzOTQ0NjQ3OSwianRpIjoiMzUxYWVlYTAtNTE2Ny00OTVkLWJhNTYtYWY5NmRhOTg2ZTFjIiwiaXNzIjoiaHR0cDovLzE3Mi4yMC4zLjEyNDo4MDgwL2F1dGgvcmVhbG1zL2FzdHJhcGF5LWJ1c2luZXNzIiwiYXVkIjoiYWNjb3VudCIsInN1YiI6IjJlNjJmNzVhLTA2Y2UtNGQ5ZC04NTRkLTdiYWYxYjk0OWJiOSIsInR5cCI6IkJlYXJlciIsImF6cCI6IjYwMDY4YzlmLTkyMGMtNGVlMy05M2Q5LWQ0NWRlMzcxZjJlMSIsImFjciI6IjEiLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsiZGVmYXVsdC1yb2xlcy1hc3RyYXBheS1idXNpbmVzcyIsIm9mZmxpbmVfYWNjZXNzIiwidW1hX2F1dGhvcml6YXRpb24iXX0sInJlc291cmNlX2FjY2VzcyI6eyJhY2NvdW50Ijp7InJvbGVzIjpbIm1hbmFnZS1hY2NvdW50IiwibWFuYWdlLWFjY291bnQtbGlua3MiLCJ2aWV3LXByb2ZpbGUiXX19LCJzY29wZSI6InByb2ZpbGUgZW1haWwiLCJlbWFpbF92ZXJpZmllZCI6ZmFsc2UsImNsaWVudEhvc3QiOiIxNzIuMjAuMy4xMjMiLCJjbGllbnRJZCI6IjYwMDY4YzlmLTkyMGMtNGVlMy05M2Q5LWQ0NWRlMzcxZjJlMSIsInByZWZlcnJlZF91c2VybmFtZSI6InNlcnZpY2UtYWNjb3VudC02MDA2OGM5Zi05MjBjLTRlZTMtOTNkOS1kNDVkZTM3MWYyZTEiLCJjbGllbnRBZGRyZXNzIjoiMTcyLjIwLjMuMTIzIn0.THD7R67KhJu93x4pBzQUSbxb4riGTROdPCFiVTGhz9v1sYmo7Ku1rDNrRw2hZcnnIxrXMPlVsHeLSrjS_gpXFUTSibqGlpqKpQ-niHxWnzHns-IbUAZF0Us0pj_7Yx3g0Q7huGwyV-ZyMXYrgZFCul4IKloUgEkYASznGGM2dCuH9kp90tGwXfQwLsgmq570mtE9LpSS0lIg92uLd8H7nDTCAhQVgG-9r5RkuxJv7GZqcajD2G4hrZgkR8FrtY5gnMu-mA4GzWGfpVwFWqRY_i9y2_nP5attQ07IsbFaARR6SKnMUAVG11mtRopDn8b4MTLpcAJ_IpVYRaQ8KcrZ_Q' \
--header 'Content-Type: application/json' \
--data-raw '{
    "userIdentification": "085939526552",
    "amount": 15000
}'

Protocol: HTTPS

Method: POST

Sandbox URL: https://sandbox.astrapay.com/disbursement-service/h2h/inquiries

Request Header

Field Value Wajib Deskripsi
Authorization Bearer Token Y Token yang didapatkan dari API proses Pembuatan Token Akses.
x-signature String Y Hasil generate dari AstraPay signature.
x-timestamp String Y Timestamp dengan format ISO8601 dan dalam format waktu UTC, yyyy-MM-ddTHH:mm:ss.SSSZ.
x-astrapay-key Bearer Token Y Token yang didapatkan dari API proses Pembuatan Token Akses.
{
"userIdentification": 08123456789,
"amount": 15000
}

Request Body

Field Tipe Data Wajib Deskripsi
userIdentification String Y Nomor tujuan yang merupakan pengguna AstraPay
amount Number Y Jumlah saldo yang akan ditransfer ke nomor tujuan

Respons

Field Tipe Data Wajib Deskripsi
inquiryCode String Y 20 karakter alphanumeric yang merupakan kode inquiry dari transaksi disbursement. Yang didapatkan dari API Inquiry Disbursement. inquiryCode ini memiliki waktu selama 60 menit sebelum EXPIRED
userIdentification String Y Nomor tujuan yang merupakan pengguna AstraPay, diawali dengan 0
amount Number Y Jumlah saldo yang akan ditransfer ke nomor tujuan
serviceCharge Number Y Jumlah biaya admin yang ada pada layanan disbursement
total Number Y Total = amount + serviceCharge

Contoh Respon

201 - Created

{
  "inquiryCode": "22021115093120333425",
  "userIdentification": "085939526552",
  "amount": 15000,
  "serviceCharge": 0,
  "total": 15000,
}

400 - Bad Request

{
    "status": 400,
    "message": "Validation failed for disbursementInquiryRequestDto(userIdentification,). Error count 2",
    "error": "Bad Request",
    "path": "/disbursement-service/h2h/inquiries",
    "timestamp": "2022-03-01T15:14:20.323682200",
    "details": [
        {
            "code": "userIdentificationIsExist",
            "objectName": "disbursementInquiryRequestDto",
            "defaultMessage": "User identification is not registered as AstraPay user.",
            "field": "userIdentification",
            "rejectedValue": "08007007077"
        },
        {
            "code": "BalanceNotExceededLimitAfterInquiry",
            "objectName": "disbursementInquiryRequestDto",
            "defaultMessage": "Inquiry Amount exceeded account balance limit.",
            "field": "",
            "rejectedValue": {
                "userIdentification": "08007007077",
                "amount": 2000000
            }
        }
    ]
}

400 - Bad Request (Invalid signature)

Invalid signature

Kode Respons

Status Code Details Deskripsi
201
Created
Inquiry transaksi disbursement berhasil terbuat.
400
Bad Request
User identification is not registered as AstraPay user. userIdentification tidak terdaftar sebagai pengguna AstraPay
Phone number / email is invalid! Format value userIdentification tidak sesuai dengan format nomor handphone / email
Inquiry Amount exceeded account balance limit. amount pada inquiry transaksi melebihi limit akun tujuan disbursement
401
Unauthorized
access_token tidak sesuai atau kedaluwarsa
500
Internal Server Error
Respons tidak valid dari Back-end atau Kesalahan Tidak Terdefinisi

Payment Disbursement

Tahap ini merupakan tahap akhir dari disbursement, dengan menyertakan inquiryCode yang didapat dari proses Inquiry Disbursement dan notes yang juga dapat disertakan, maka saldo AstraPay akan diterima oleh pengguna AstraPay sesuai dengan inquiry disbursement dan notes yang disertakan (jika ada).

Complete Code

curl --location --request POST 'https://sandbox.astrapay.com/disbursement-service/disbursements' \
--header 'Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJiOThDaFhUWFVJQ3J4SjhadWt5OWNCUXpBLThqQnhxa0lndmpoM0h3SVpFIn0.eyJleHAiOjE2NDg2MjI2MjAsImlhdCI6MTY0ODYyMjMyMCwianRpIjoiYzRlOTVjMmMtMzE0OS00ZTE2LWExOWEtMjgyYWZhMjUzOWY5IiwiaXNzIjoiaHR0cDovLzE3Mi4yMC42Ljc5OjgwODAvYXV0aC9yZWFsbXMvYXN0cmFwYXktYnVzaW5lc3MiLCJhdWQiOiJhY2NvdW50Iiwic3ViIjoiMmQzMGUzYjAtNjk0Yi00NjkyLWE4YmUtYmJhNTA5ZjBjNjQ5IiwidHlwIjoiQmVhcmVyIiwiYXpwIjoiODE5Njk2MTItYWZmMS0xMWVjLWI5MDktMDI0MmFjMTIwMDAyIiwiYWNyIjoiMSIsInJlYWxtX2FjY2VzcyI6eyJyb2xlcyI6WyJkZWZhdWx0LXJvbGVzLWFzdHJhcGF5LWJ1c2luZXNzIiwib2ZmbGluZV9hY2Nlc3MiLCJ1bWFfYXV0aG9yaXphdGlvbiJdfSwicmVzb3VyY2VfYWNjZXNzIjp7ImFjY291bnQiOnsicm9sZXMiOlsibWFuYWdlLWFjY291bnQiLCJtYW5hZ2UtYWNjb3VudC1saW5rcyIsInZpZXctcHJvZmlsZSJdfX0sInNjb3BlIjoicHJvZmlsZSBlbWFpbCIsImVtYWlsX3ZlcmlmaWVkIjpmYWxzZSwiY2xpZW50SG9zdCI6IjE3Mi4yMC42LjEwOSIsImNsaWVudElkIjoiODE5Njk2MTItYWZmMS0xMWVjLWI5MDktMDI0MmFjMTIwMDAyIiwicHJlZmVycmVkX3VzZXJuYW1lIjoic2VydmljZS1hY2NvdW50LTgxOTY5NjEyLWFmZjEtMTFlYy1iOTA5LTAyNDJhYzEyMDAwMiIsImNsaWVudEFkZHJlc3MiOiIxNzIuMjAuNi4xMDkifQ.l5TATpndqlC8ac5TiT2bSqKQV-1kI97t260DFzLXpTkWK-S0CjjbdVW4zM3qPIpEztzLwXfTfFZb8DdzBRWDaZZcT0nbOl4R6886-2UfXZoAdknF1xZhdQazf-U8kpCjcd9E6Wt4s3n2evabjuBGvcSpbQlnOlUKTelOUVtgegpn0GbvbGau_0cgSC2-oHhWJiFZV4YCuvLRTEukb4Gbo0yFHhlzX-Vibz1CcWa1Og_OLFMkOpOx9UGNXmGR55F4_E7vWgW126hGyKNhBek6wtvRKtPf_5NLfqgtDghr_19YukTztVhlvaknb818j3E8TcSR_b_pmdrGP10S-9vc5g' \
--header 'x-signature: 9c4ba8bf3e2b0e66f4e48884e08dccbf0cfd533a6d02d871fb7a8b4914e93b9c' \
--header 'x-timestamp: 2021-04-21T11:37:51.436Z' \
--header 'x-astrapay-key: eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJlVm9kSlYzeVN6aUlyLW9aZjZCQzJtUVVaTmJFLWFaQndETjFUUmxmZE1jIn0.eyJleHAiOjE2Mzk0NDY3NzksImlhdCI6MTYzOTQ0NjQ3OSwianRpIjoiMzUxYWVlYTAtNTE2Ny00OTVkLWJhNTYtYWY5NmRhOTg2ZTFjIiwiaXNzIjoiaHR0cDovLzE3Mi4yMC4zLjEyNDo4MDgwL2F1dGgvcmVhbG1zL2FzdHJhcGF5LWJ1c2luZXNzIiwiYXVkIjoiYWNjb3VudCIsInN1YiI6IjJlNjJmNzVhLTA2Y2UtNGQ5ZC04NTRkLTdiYWYxYjk0OWJiOSIsInR5cCI6IkJlYXJlciIsImF6cCI6IjYwMDY4YzlmLTkyMGMtNGVlMy05M2Q5LWQ0NWRlMzcxZjJlMSIsImFjciI6IjEiLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsiZGVmYXVsdC1yb2xlcy1hc3RyYXBheS1idXNpbmVzcyIsIm9mZmxpbmVfYWNjZXNzIiwidW1hX2F1dGhvcml6YXRpb24iXX0sInJlc291cmNlX2FjY2VzcyI6eyJhY2NvdW50Ijp7InJvbGVzIjpbIm1hbmFnZS1hY2NvdW50IiwibWFuYWdlLWFjY291bnQtbGlua3MiLCJ2aWV3LXByb2ZpbGUiXX19LCJzY29wZSI6InByb2ZpbGUgZW1haWwiLCJlbWFpbF92ZXJpZmllZCI6ZmFsc2UsImNsaWVudEhvc3QiOiIxNzIuMjAuMy4xMjMiLCJjbGllbnRJZCI6IjYwMDY4YzlmLTkyMGMtNGVlMy05M2Q5LWQ0NWRlMzcxZjJlMSIsInByZWZlcnJlZF91c2VybmFtZSI6InNlcnZpY2UtYWNjb3VudC02MDA2OGM5Zi05MjBjLTRlZTMtOTNkOS1kNDVkZTM3MWYyZTEiLCJjbGllbnRBZGRyZXNzIjoiMTcyLjIwLjMuMTIzIn0.THD7R67KhJu93x4pBzQUSbxb4riGTROdPCFiVTGhz9v1sYmo7Ku1rDNrRw2hZcnnIxrXMPlVsHeLSrjS_gpXFUTSibqGlpqKpQ-niHxWnzHns-IbUAZF0Us0pj_7Yx3g0Q7huGwyV-ZyMXYrgZFCul4IKloUgEkYASznGGM2dCuH9kp90tGwXfQwLsgmq570mtE9LpSS0lIg92uLd8H7nDTCAhQVgG-9r5RkuxJv7GZqcajD2G4hrZgkR8FrtY5gnMu-mA4GzWGfpVwFWqRY_i9y2_nP5attQ07IsbFaARR6SKnMUAVG11mtRopDn8b4MTLpcAJ_IpVYRaQ8KcrZ_Q' \
--header 'Content-Type: application/json' \
--data-raw '{
  "inquiryCode": "22021115093120333425",
  "notes": "Disbursement Saldo AstraPay"
}'

Protocol: HTTPS

Method: POST

Sandbox URL: https://sandbox.astrapay.com/disbursement-service/h2h/disbursements

Request Header

Field Value Wajib Deskripsi
Authorization Bearer Token Y Token yang didapatkan dari API proses Pembuatan Token Akses.
x-signature String Y Hasil generate dari AstraPay signature.
x-timestamp String Y Timestamp dengan format ISO8601 dan dalam format waktu UTC, yyyy-MM-ddTHH:mm:ss.SSSZ.
x-astrapay-key Bearer Token Y Token yang didapatkan dari API proses Pembuatan Token Akses.
{
"inquiryCode": 22021115093120333425,
"notes" : "Disbursement Saldo AstraPay"
}

Request Body

Field Tipe Data Wajib Deskripsi
inquiryCode String Y 20 karakter alphanumeric yang merupakan kode inquiry dari transaksi disbursement.Yang didapatkan dari API Inquiry Disbursement. inquiryCode ini memiliki waktu selama 60 menit sebelum EXPIRED
notes String N Catatan yang akan disertakan dalam transaksi disbursement dan akan masuk ke aplikasi AstraPay. Tidak dapat menyertakan link ataupun HTML

Berikut tampilan dalam aplikasi AstraPay sesuai dengan transaksi disbursement yang dilakukan :

Respons

Field Tipe Data Wajib Deskripsi
disbursementNumber String Y Kode transaksi disbursement yang sudah diproses
userIdentification String Y Nomor tujuan yang merupakan pengguna AstraPay
amount Number Y Jumlah saldo yang akan ditransfer ke nomor tujuan
serviceCharge Number Y Jumlah biaya admin yang ada pada layanan disbursement
total Number Y Total = amount + serviceCharge
status String Y Status transaksi disbursement

Contoh Respon

201 - Created

{
  "disbursementNumber": "INV/DIS/EXO/20220228/093744HQH",
  "userIdentification": "08123456789",
  "amount": 15000,
  "serviceCharge": 0,
  "total": 15000,
  "status": "SUCCESS",
}

400 - Bad Request

{
    "status": 400,
    "message": "Validation failed for executeH2HDisbursementInquiryRequestDto(inquiryCode). Error count 1",
    "error": "Bad Request",
    "path": "/disbursement-service/disbursements",
    "timestamp": "2022-03-01T15:11:58.814281600",
    "details": [
        {
            "code": "H2HInquiryCodeIsNotExpired",
            "objectName": "executeH2HDisbursementInquiryRequestDto",
            "defaultMessage": "Inquiry code is expired.",
            "field": "inquiryCode",
            "rejectedValue": "22022307263351277906"
        }
    ]
}

400 - Bad Request (Invalid Signature)

Invalid signature

Berikut penjelasan dari status inquiryCode:

Kode Respons

Status Code Details Deskripsi
201
Created
Transaksi disbursement berhasil dilaksanakan. Advice payment disbursement (jika request dengan inquiryCode yang sama)
400
Bad Request
Inquiry code is expired. inquiryCode telah expired (melebihi 1 jam dari pembuatan inquiryCode).
401
Unauthorized
access_token tidak sesuai atau kedaluwarsa
500
Internal Server Error
Respons tidak valid dari Back-end atau Kesalahan Tidak Terdefinisi

Check Disbursement Status

API ini digunakan untuk mendapatkan detail transasksi disbursement sesuai dengan inquiryCode yang disertakan. Sehingga, API akan memberikan respons data dari transaksi disbursement yang sudah dilaksanakan.

Complete Code

curl --location --request GET 'https://sandbox.astrapay.com/disbursement-service/h2h/22092709523273159544' \
--header 'x-signature: 1e6d0d03132f20b774b93258720b00bc6a767d45c8bfd3418fc2c5fc5c395e41' \
--header 'x-timestamp: 2021-04-21T11:37:51.436Z' \
--header 'x-astrapay-key: eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJlVm9kSlYzeVN6aUlyLW9aZjZCQzJtUVVaTmJFLWFaQndETjFUUmxmZE1jIn0.eyJleHAiOjE2Mzk0NDY3NzksImlhdCI6MTYzOTQ0NjQ3OSwianRpIjoiMzUxYWVlYTAtNTE2Ny00OTVkLWJhNTYtYWY5NmRhOTg2ZTFjIiwiaXNzIjoiaHR0cDovLzE3Mi4yMC4zLjEyNDo4MDgwL2F1dGgvcmVhbG1zL2FzdHJhcGF5LWJ1c2luZXNzIiwiYXVkIjoiYWNjb3VudCIsInN1YiI6IjJlNjJmNzVhLTA2Y2UtNGQ5ZC04NTRkLTdiYWYxYjk0OWJiOSIsInR5cCI6IkJlYXJlciIsImF6cCI6IjYwMDY4YzlmLTkyMGMtNGVlMy05M2Q5LWQ0NWRlMzcxZjJlMSIsImFjciI6IjEiLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsiZGVmYXVsdC1yb2xlcy1hc3RyYXBheS1idXNpbmVzcyIsIm9mZmxpbmVfYWNjZXNzIiwidW1hX2F1dGhvcml6YXRpb24iXX0sInJlc291cmNlX2FjY2VzcyI6eyJhY2NvdW50Ijp7InJvbGVzIjpbIm1hbmFnZS1hY2NvdW50IiwibWFuYWdlLWFjY291bnQtbGlua3MiLCJ2aWV3LXByb2ZpbGUiXX19LCJzY29wZSI6InByb2ZpbGUgZW1haWwiLCJlbWFpbF92ZXJpZmllZCI6ZmFsc2UsImNsaWVudEhvc3QiOiIxNzIuMjAuMy4xMjMiLCJjbGllbnRJZCI6IjYwMDY4YzlmLTkyMGMtNGVlMy05M2Q5LWQ0NWRlMzcxZjJlMSIsInByZWZlcnJlZF91c2VybmFtZSI6InNlcnZpY2UtYWNjb3VudC02MDA2OGM5Zi05MjBjLTRlZTMtOTNkOS1kNDVkZTM3MWYyZTEiLCJjbGllbnRBZGRyZXNzIjoiMTcyLjIwLjMuMTIzIn0.THD7R67KhJu93x4pBzQUSbxb4riGTROdPCFiVTGhz9v1sYmo7Ku1rDNrRw2hZcnnIxrXMPlVsHeLSrjS_gpXFUTSibqGlpqKpQ-niHxWnzHns-IbUAZF0Us0pj_7Yx3g0Q7huGwyV-ZyMXYrgZFCul4IKloUgEkYASznGGM2dCuH9kp90tGwXfQwLsgmq570mtE9LpSS0lIg92uLd8H7nDTCAhQVgG-9r5RkuxJv7GZqcajD2G4hrZgkR8FrtY5gnMu-mA4GzWGfpVwFWqRY_i9y2_nP5attQ07IsbFaARR6SKnMUAVG11mtRopDn8b4MTLpcAJ_IpVYRaQ8KcrZ_Q' \
--header 'Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICI1QjhXRGtYSzVBMWpyeFVrckMyWnB4NFN4XzVBRUlhMVpjM1NsOVZobUtJIn0.eyJleHAiOjE2NjQyNjgxNjcsImlhdCI6MTY2NDI0NjU2NywianRpIjoiNTg2OTJiZjgtMWJiMS00ZTYxLWE3ODUtNWM0NmUxNzc1ZGE0IiwiaXNzIjoiaHR0cDovLzEwLjIwLjcuNjo4NDQzL2F1dGgvcmVhbG1zL2FzdHJhcGF5LWJ1c2luZXNzIiwiYXVkIjoiYWNjb3VudCIsInN1YiI6IjNkMDYwMjEyLWE5ODYtNDk5NC04MWFhLTE3NWM5NzRlYzJiZiIsInR5cCI6IkJlYXJlciIsImF6cCI6ImE5NjUyOTczLTRhNDMtNDM0Zi05MjRmLWY1ODRmNTBmZWVkNiIsImFjciI6IjEiLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsiZGVmYXVsdC1yb2xlcy1hc3RyYXBheS1idXNpbmVzcyIsIm9mZmxpbmVfYWNjZXNzIiwidW1hX2F1dGhvcml6YXRpb24iXX0sInJlc291cmNlX2FjY2VzcyI6eyJhY2NvdW50Ijp7InJvbGVzIjpbIm1hbmFnZS1hY2NvdW50IiwibWFuYWdlLWFjY291bnQtbGlua3MiLCJ2aWV3LXByb2ZpbGUiXX19LCJzY29wZSI6InByb2ZpbGUgZW1haWwiLCJjbGllbnRIb3N0IjoiMDowOjA6MDowOjA6MDoxIiwiZW1haWxfdmVyaWZpZWQiOmZhbHNlLCJjbGllbnRJZCI6ImE5NjUyOTczLTRhNDMtNDM0Zi05MjRmLWY1ODRmNTBmZWVkNiIsInByZWZlcnJlZF91c2VybmFtZSI6InNlcnZpY2UtYWNjb3VudC1hOTY1Mjk3My00YTQzLTQzNGYtOTI0Zi1mNTg0ZjUwZmVlZDYiLCJjbGllbnRBZGRyZXNzIjoiMDowOjA6MDowOjA6MDoxIn0.bCxML3cttzp8sIza_T0YaSsn_rM5EknvNLh8xocgwWePRBd8rqTlMvvWbfdu-jktGZqAVXcy7z8tdkI4o4g5gbAZov86T_JS4rtYABIMD0GzGlyUV2MDI5_0gmRLh0Pvr5Qx_6yNlJl_3rne6bnjruWeWqRAlYAsKbrlGj56Nzjii3FeGO9qrKECx3S1oZl2MJzSD0tbDjSwEIfgHTtZgVdWUSsX9lB2F8hPJC4TpVMKEIHgveGBxqir1qwDZzfEMqqtYEABeep0AfpB_GE9QHVBn0DSwZoxc8gva0DV-ttrNZknkLSi-AyT_5zPrXwM8l0CzFLpvsHKZCksV2VDhQ' \

Protocol: HTTPS

Method: GET

Sandbox URL: https://sandbox.astrapay.com/disbursement-service/h2h/{inquiryCode}

Request Header

Field Value Wajib Deskripsi
Authorization Bearer Token Y Token yang didapatkan dari API proses Pembuatan Token Akses.
x-signature String Y Hasil generate dari AstraPay signature. Dengan value request body berupa "{}"
x-timestamp String Y Timestamp dengan format ISO8601 dan dalam format waktu UTC, yyyy-MM-ddTHH:mm:ss.SSSZ.
x-astrapay-key Bearer Token Y Token yang didapatkan dari API proses Pembuatan Token Akses.

Respons

Field Tipe Data Wajib Deskripsi
disbursementNumber String Y Kode transaksi disbursement yang sudah diproses
userIdentification String Y Nomor tujuan yang merupakan pengguna AstraPay
amount Number Y Jumlah saldo yang akan ditransfer ke nomor tujuan
serviceCharge Number Y Jumlah biaya admin yang ada pada layanan disbursement
total Number Y Total = amount + serviceCharge
status String Y Status transaksi disbursement

Contoh Respon

201 - Created

{
  "disbursementNumber": "INV/DIS/EXO/20220228/093744HQH",
  "userIdentification": "08123456789",
  "amount": 15000,
  "serviceCharge": 0,
  "total": 15000,
  "status": "SUCCESS",
}

400 - Bad Request

{
    "status": 400,
    "message": "Disbursement transaction has not been committed.",
    "error": "Bad Request",
    "path": "/disbursement-service/h2h/1234512121",
    "timestamp": "2022-09-09T08:37:57.912921800",
    "details": []
}

400 - Bad Request (Invalid Signature)

Invalid signature

Berikut penjelasan dari status inquiryCode:

Kode Respons

Status Code message Deskripsi
200
OK
InquiryCode yang disertakan terdaftar.
400
Bad Request
Disbursement transaction has not been committed. inquiryCode belum melaksanakan tahapan payment disbursement
400
Bad Request
The inquiry code does not belong to the merchant. Host merchant melakukan request dengan inquiryCode dari merchant yang berbeda.
401
Unauthorized
access_token tidak sesuai atau kedaluwarsa
500
Internal Server Error
Respons tidak valid dari Back-end atau Kesalahan Tidak Terdefinisi

Quick Response Dynamic

Overview

This document describes the notification and acceptance procedure for the implementation of this, from both the merchant and issuer perspective. It also describes the payment API that is implemented at the gateway.

General MPM Payment Flow

In this method, the merchant receives payment by having the consumer application scan the merchant details within a QR code that the merchant presents. To ensure interoperability with other payment gateways and issuers, the information encoded in the merchant’s QR code may conform to the EMVCo standard merchant-presented format. This is following a flow where the payment is collected as a credit transfer to the merchant acquirer account from the issuer partner.

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

Overview V2

Selamat datang di dokumentasi AstraPay QRIS Dynamic.

Dokumentasi ini menjelaskan procedure acceptance untuk implementasi QRIS Dynamic dari perspektif merchant.

Berikut ini adalah flow transaksi QRIS Dynamic secara umum.

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 V2

Item Value
Development https://sandbox.astrapay.com
Production URL production akan dikirimkan melalui email setelah UAT selesai dilakukan

Authorization

Semua API memerlukan header Authorization dengan token untuk memastikan Anda diautentikasi dengan benar. Berikut adalah credential yang digunakan untuk proses autentikasi, yaitu:

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 4 jam 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-17T10:00:31.742Z",
    "createdAt": "2022-06-13T10:00:31.742Z"
}
Field Type Requirement Length Description
id Integer Mandatory - Id milik bill untuk mengidentifikasi bill QRIS dynamic
qrText Text Mandatory - Kumpulan text yang berisi informasi yang akan dijadikan Qr code untuk pembayaran
billNumber String Mandatory 24 Berisi huruf dan angka acak yang dibuat oleh Astrapay
referenceNumber String Mandatory 255 Nomor referensi yang dibuat oleh merchant
amount Number Mandatory 10 Jumlah rupiah dari transaksi yang akan dimasukan oleh kasir dan tidak boleh lebih dari Rp10.000.000
tip Number Mandatory 10 Jumlah tip yang ingin diberikan oleh pembeli dan dimasukan oleh kasir dengan nilai default 0
status String Mandatory 25 Text berisi status pembayaran dari bill. Untuk mengetahui macam status pembayaran, mohon mengacu pada bagian table Bill Status
expiresAt Timestamp Mandatory - Waktu untuk bill menjadi expired dengan format yyyy-MM-dd'T'HH:mm:ss.SSS'Z'
createdAt Timestamp Mandatory - Waktu saat bill dibuat pertama kali dengan format yyyy-MM-dd'T'HH:mm:ss.SSS'Z'

Check Bill Status

API ini berfungsi untuk mengetahui apakah bill sudah terbayar atau belum dan apakah bill sudah kedaluwarsa (expired) atau belum.

img

Bill Status

Bill Status Description
PENDING Bill menunggu pembayaran dan masih bisa dibayar selama 4 jam
EXPIRED Bill kedaluwarsa setelah 4 jam dan sudah tidak bisa dibayar
PAID Bill sudah terbayar dan tidak bisa dibayar kembali

Protocol & Service Address

Item Value
Protocol HTTPS
Verb GET
URL [host]:[port]/qris-service/bills/{id}/status

Request Header

Contoh cURL Check Bill Status

curl --location --request GET '[host]:[port]/qris-service/bills/724/status' \
--header 'Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJUZk50bGRXTzhvRGhibU95STd1R0g0dV9ZMzBmeTc4b1I1T2V6S3JIdVpzIn0.eyJleHAiOjE2NTUwODk4OTgsImlhdCI6MTY1NTA4OTU5OCwianRpIjoiODZmZTczYTYtOGViMi00ZmFiLTliYzYtYWNjYjdmM2E1YzY5IiwiaXNzIjoiaHR0cDovLzEwLjIwLjYuOTo4NDQzL2F1dGgvcmVhbG1zL2FzdHJhcGF5LWJ1c2luZXNzIiwic3ViIjoiYTFhMzMyNDQtMjVkNS00ZjVhLWJhZWEtOWZkOGVkZGY3MjNhIiwidHlwIjoiQmVhcmVyIiwiYXpwIjoiYzAzZjY3ZWMtZTI1My0xMWVjLThmZWEtMDI0MmFjMTIwMDAyIiwiYWNyIjoiMSIsInJlYWxtX2FjY2VzcyI6eyJyb2xlcyI6WyJkZWZhdWx0LXJvbGVzLWFzdHJhcGF5Il19LCJzY29wZSI6InByb2ZpbGUgZW1haWwiLCJjbGllbnRIb3N0IjoiMTcyLjIwLjUuMjEiLCJlbWFpbF92ZXJpZmllZCI6ZmFsc2UsImNsaWVudElkIjoiYzAzZjY3ZWMtZTI1My0xMWVjLThmZWEtMDI0MmFjMTIwMDAyIiwicHJlZmVycmVkX3VzZXJuYW1lIjoic2VydmljZS1hY2NvdW50LWMwM2Y2N2VjLWUyNTMtMTFlYy04ZmVhLTAyNDJhYzEyMDAwMiIsImNsaWVudEFkZHJlc3MiOiIxNzIuMjAuNS4yMSJ9.X8jj2N2ZJHdJtzuYNgMlFp_WrDbYKH_1IlE_O2MVIj_e7n2T7dBlsWI-UlXUbLlkxfgVrFiE51fKrQFNomkWM-biQzDiRLvsk7f_1AFBLSBVgd_E2UP7sjzyET4r8mA_ITaiF_OyeJmIa5gXSr0Nxr6APQLrqgEKyzGKz2Q6_BBFcpfzlrlTMKdS-2NwFE1e_CB6b4XZ0-H4DeOlZ-ICWl9oUi1smluKGSxsMdVTVlbNfpRWxoyouXkEZlpmux5pMywLD2wnQUCfuSHfG_wIKNx0WOqwMvUbjZHLzxR1pRG-gqUPvZ2iGSiyWN0es5tyl-piI1uxs-bWgyYYrovqGQ'
Item Value
Authorization Bearer "Token”
Content-Type Application/json

Request Path Variable

Item Description
id Id milik bill untuk mengidentifikasi bill QRIS dynamic

Response Body

Example Response

{
    "id": 724,
    "billNumber": "MORE9YG0T2",
    "referenceNumber": "TEST0000342000001613",
    "amount": 2000.00,
    "tip": 2000.00,
    "status": "PAID",
    "expiresAt": "2022-06-13T10:10:31.742Z",
    "createdAt": "2022-06-13T10:05:31.755Z"
}
Field Type Requirement Length Description
id Integer Mandatory - Id milik bill untuk mengidentifikasi bill QRIS dynamic
billNumber String Mandatory 24 Berisi huruf dan angka acak yang di generate oleh Astrapay
referenceNumber String Mandatory 255 Nomor referensi yang dibuat oleh merchant
amount Number Mandatory 10 Jumlah rupiah dari transaksi yang akan dimasukan oleh kasir dan tidak boleh lebih dari Rp10.000.000
tip Number Mandatory 10 Jumlah tip yang ingin diberikan oleh pembeli dan dimasukan oleh kasir dengan nilai default 0
status String Mandatory 25 Text berisi status pembayaran dari bill. Untuk mengetahui macam status pembayaran, mohon mengacu pada bagian table Bill Status
expiresAt Timestamp Mandatory - Waktu untuk bill menjadi expired dengan format yyyy-MM-dd'T'HH:mm:ss.SSS'Z'
createdAt Timestamp Mandatory - Waktu saat bill dibuat pertama kali dengan format yyyy-MM-dd'T'HH:mm:ss.SSS'Z'

Callback

Catatan : Merchant diharapkan membuat API callback sesuai dengan Spesifikasi AstraPay (terlampir)

Parameter callback pada request akan digunakan oleh AstraPay untuk konfirmasi pembayaran yang telah dilakukan oleh customer Anda. Pada saat customer berhasil melakukan pembayaran, AstraPay akan mengirimkan HTTP POST yang menyertakan hasil pembayaran suatu tagihan dari customer. Anda perlu menyediakan halaman untuk menerima request callback tersebut. Agar dapat memproses hasil transaksi yang telah dilakukan oleh customer.

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'

QRIS Dynamic SNAP BI V1.0

Overview SNAP BI

Selamat datang di dokumentasi AstraPay QRIS Dynamic dengan standar SNAP BI.

Dokumentasi ini menjelaskan procedure acceptance untuk implementasi QRIS Dynamic dari perspektif merchant.

Saat ini, AstraPay QRIS Dynamic menyediakan metode integrasi melalui SNAP AstraPay API. Dimana SNAP (Standar Nasional Open API Pembayaran) adalah standar Open API yang ditetapkan Bank Indonesia agar menciptakan industri sistem pembayaran yang lebih maju di Indonesia.

Glosarium

Sebelum melakukan integrasi, mari kita bahas terlebih dahulu beberapa definisi dari istilah yang akan muncul pada dokumentasi ini. Penjelasan dari istilah tersebut adalah sebagai berikut:

Istilah Deskripsi
QRIS QRIS (Quick Response Code Indonesian Standard) adalah standar kode QR yang dikembangkan di Indonesia untuk memfasilitasi transaksi pembayaran elektronik. QRIS memungkinkan pengguna untuk melakukan pembayaran menggunakan kode QR yang dapat dibaca oleh aplikasi pembayaran.
QRIS Dynamic Varian dari QRIS yang memungkinkan pembayaran tagihan yang spesifik menggunakan kode QR yang unik. Dalam QRIS Dynamic, QR code yang dihasilkan berisi informasi tagihan yang spesifik, seperti jumlah pembayaran, nomor referensi, dan detail transaksi lainnya.
Switcher Pihak yang berperan sebagai perantara atau penghubung antara Penyedia Jasa Pembayaran (PJP) dengan institusi keuangan penerima atau pedagang (merchant) dan bertugas untuk memfasilitasi transaksi pembayaran yang menggunakan QRIS antara berbagai PJP.
Issuer Lembaga keuangan yang mengeluarkan atau menerbitkan alat pembayaran elektronik kepada pengguna yang nantinya dapat digunakan untuk melakukan transaksi pembayaran menggunakan QRIS.
Acquirer Entitas atau sistem yang bekerja sama dengan pedagang (merchant) untuk menerima pembayaran melalui QRIS. Acquirer bertugas untuk menyediakan teknologi dan infrastruktur yang dibutuhkan untuk menerima pembayaran melalui QRIS, seperti menyediakan perangkat pembaca QR, mengelola sistem pembayaran, dan menghubungkan pedagang dengan penyedia layanan pembayaran elektronik.
Rekonsiliasi Proses membandingkan data transaksi yang dicatat oleh pedagang (merchant) dengan data transaksi yang diterima oleh PJP. Hal ini bertujuan untuk memastikan bahwa semua transaksi yang terjadi telah tercatat dengan benar, tidak ada kesalahan, dan tidak ada perbedaan data antara pihak-pihak yang terlibat.
Settlement Proses transfer dana dari rekening yang melakukan pembayaran ke rekening pedagang (merchant) yang menerima pembayaran. Proses settlement ini biasanya melibatkan peran Switcher dan Acquirer, di mana mereka memfasilitasi transfer dana secara elektronik antara rekening-rekening yang terlibat.
Bill Tagihan atau invoice yang dapat dibayarkan menggunakan QRIS. Dalam QRIS Dynamic, QR code yang dihasilkan berisi informasi tagihan yang spesifik, seperti jumlah yang harus dibayarkan, nomor referensi, dan detail transaksi lainnya.
MPM Merchant Presented Mode, merchant menyajikan QR code QRIS kepada pelanggan untuk dipindai menggunakan aplikasi pembayaran yang kompatibel dengan QRIS.

Berikut ini adalah flow transaksi QRIS Dynamic secara umum.

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. SNAP Keamanan (Authorization)
  2. Generate QR MPM (Create Bill)
  3. QR Payment Query (Check Status Bill)

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

Environment SNAP BI V1.0

Item Value
Development https://sandbox.astrapay.com
Production URL production akan dikirimkan melalui email setelah UAT selesai dilakukan

SNAP Keamanan

Klik disini untuk detail informasi SNAP Keamanan AstraPay.

Generate QR MPM (Create Bill)

API ini berfungsi untuk membuat bill QRIS Dynamic, QRIS Dynamic memiliki waktu expired sesuai dengan validityPeriod yang diberikan dengan maksimal 24 jam dari saat QRIS dibuat.

img

Protocol & Service Address

Item Value
Protocol HTTPS
Service Code 47
Channel ID 00447
Verb POST
URL [host]:[port]/qris-service/snap/v1.0/qr/qr-mpm-generate

Request Header

Name Type Requirement Description
Content-Type String Mandatory Tipe konten, data yang dikirim harus selalu application/json
Authorization String Mandatory Bearer token dari hasil generate dari API Token B2B Access Token Request
X-TIMESTAMP String Mandatory Waktu lokal Merchant/Partner dalam format yyyy-MM-ddTHH:mm:ssTZD. Value yang digunakan harus sama dengan value pada signature-auth, token B2B Access Token Request, dan signature-service
X-SIGNATURE String Mandatory Signature untuk QR Query Payment hasil dari generate Signature Service.
X-PARTNER-ID String Mandatory Client ID Merchant/Partner yang didapat dari AstraPay
X-EXTERNAL-ID String Mandatory Numeric string unik yang hanya dapat digunakan satu kali dalam satu hari.
Format yang digunakan adalah:
36 Random Numeric String
CHANNEL-ID String Mandatory ID dari service API Generate QR MPM

Request Body

Contoh cURL generate QR MPM

curl --location --request POST '[host]:[port]/qris-service/snap/v1.0/qr/qr-mpm-generate' \
--header 'Authorization: Bearer xxxbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJUZk50bGRXTzhvRGhibUxxx' \
--header 'X-TIMESTAMP: 2022-10-17T20:00:00+07:00' \
--header 'X-SIGNATURE: xxxgt3kVLWyN41MEohgcJ1fTGXiiqWPflMncMr5gnLwblTqMeky1Yfxxx' \
--header 'CHANNEL-ID: 00447' \
--header 'X-PARTNER-ID: astrapay-testing' \
--header 'X-EXTERNAL-ID: 41807553358950093184162180797837' \
--header 'Content-Type: application/json' \
--data-raw '{
   "partnerReferenceNo":"2020102900000000006802",
   "amount":{
      "value":"1.00",
      "currency":"IDR"
   },
   "merchantId":"210000240",
   "terminalId":"A01",
   "validityPeriod":"2022-10-17T20:00:00",
   "additionalInfo":{
       "tip": "0.00"
   }
}'
Field Type Requirement Description
partnerReferenceNo String Mandatory ID transaksi dari Merchant/Partner (Merchant/Partner Transaction Id). Unik setiap request.
amount Object Mandatory Jumlah Transaksi Net yang diberikan. Amount memiliki dua sub-field yang tertera di dua kolom di bawah.
value String Mandatory Jumlah Net dari transaksi. Contoh: total transaksi IDR10.000, menjadi 10000.00 (2 nol di belakang koma)
currency String Mandatory Kode mata uang berdasarkan ISO (IDR)
merchantId String Mandatory Kode unik setiap merchant
terminalId String Mandatory Kode terminal
validityPeriod String Optional Periode waktu kedaluwarsa dari satu tagihan.
Ketika validityPeriod tidak diberikan maka secara default akan di set 4 jam setelah QR digenerate.
Validity period tidak boleh lebih dari 24 jam (1 hari) dari waktu generate QR MPM.
additionalInfo Object Optional Informasi Tambahan. Terdapat subfield yang bisa dilihat di kolom di bawah.
tip String Mandatory (ISO4217) Jumlah Net dari tip. Contoh: jika total tip IDR10.000, maka harus ditulis 10000.00 (2 nol di belakang koma). Jika tip tidak ada maka cantumkan “0.00”.

Response Body

Contoh Response

{
    "responseCode": "2004700",
    "responseMessage": "Successful",
    "referenceNo": "BJI33Z8Z0H",
    "partnerReferenceNo": "2020102900000000006718",
    "qrContent": "00020101021226640018ID.CO.ASTRAPAY.WWW011893600822321989939702092198993200303UMI51400014ID.CO.QRIS.WWW0211ID2198993970303UMI5204549953033605404100055020256031005802ID5912Toko Asepso56007JAKARTA61051015062210110BJI33Z8Z0H0703A016304E8D4",
    "merchantName": "Toko Asepso5",
    "terminalId": "A001",
    "additionalInfo": {
        "tip": "100.00"
    }
}
Field Type Requirement Description
responseCode String Mandatory Lihat response list
responseMessage String Mandatory Lihat response list
referenceNo String Mandatory Id transaksi dari AstraPay Ketika generate qr mpm berhasil (AstraPay Bill Number)
partnerReferenceNo String Mandatory Id transaksi dari Merchant/Partner Ketika generate qr mpm berhasil (Merchant/Partner Bill Number)
qrContent String Mandatory QR String MPM
merchantName String Mandatory Nama dari Merchant/Partner
terminalId String Mandatory Code terminal
additionalInfo Object Mandatory Informasi Tambahan. Terdapat subfield yang bisa dilihat di kolom di bawah.
tip String Mandatory (ISO4217) Jumlah Net dari tip. Contoh: jika total tip IDR10.000, maka harus ditulis 10000.00 (2 nol di belakang koma). Jika tip tidak ada maka cantumkan “0.00”.

QR Payment Query (Check Status Bill)

API ini berfungsi untuk mengetahui apakah bill sudah terbayar atau belum dan apakah bill sudah kedaluwarsa (expired) atau belum.

img

QR Payment Status

Berikut adalah list Bill Status dalam QR Dynamic AstraPay:

Bill Status Description
PENDING Bill menunggu pembayaran dan masih bisa dibayar selama jangka waktu validityPeriod yang diberikan
CANCELED Bill kedaluwarsa setelah melewati validityPeriod yang diberikan dan sudah tidak bisa dibayar
SUCCESS Bill sudah terbayar dan tidak bisa dibayar kembali
INITIATED Bill sedang dalam proses pembuatan
PAYING Proses transaksi pembayaran Bill sedang berlangsung
FAILED Bill gagal dibayar
REFUND Bill berhasil di refund (untuk pengerjaan berikutnya)

Protocol & Service Address

Item Value
Protocol HTTPS
Service Code 51
Channel ID 00551
Verb GET
URL [host]:[port]/qris-service/snap/v1.0/qr/qr-mpm-query

Contoh cURL QR Payment Query

curl --location --request POST '[host]:[port]/qris-service/snap/v1.0/qr/qr-mpm-query' \
--header 'Authorization: Bearer xxxiwia2lkIiA6ICJUZk50bGRXTzhvRGhibU9xxx' \
--header 'X-TIMESTAMP: 2022-10-17T20:00:00+07:00' \
--header 'X-SIGNATURE: xxxcJ1fTGXiiqWPflMncMr5gnLwblTqMeky1YfspeFo5fJfagvrHKq1FKHxxx' \
--header 'CHANNEL-ID: 00551' \
--header 'X-PARTNER-ID: astrapay-testing' \
--header 'X-EXTERNAL-ID: 41807553358950093184162180797837' \
--header 'Content-Type: application/json' \
--data-raw '{
   "originalReferenceNo":"ZSE44L79LN",
   "originalPartnerReferenceNo":"2020102900000000000001",
   "originalExternalId":"30443786930722726463280097920912",
   "serviceCode" : "47",
   "merchantId":"A01",
   "additionalInfo":{
      "tip": "0.00"
   }
}'

Request Header

Name Type Requirement Description
Content-Type String Mandatory Tipe konten, data yang dikirim harus selalu application/json
Authorization String Mandatory Bearer token dari hasil generate dari API Token B2B Access Token Request
X-TIMESTAMP String Mandatory Waktu lokal Merchant/Partner dalam format yyyy-MM-ddTHH:mm:ssTZD. Value yang digunakan harus sama dengan value pada signature-auth, token B2B Access Token Request, dan signature-service
X-SIGNATURE String Mandatory Signature untuk QR Query Payment hasil dari generate Signature Service.
X-PARTNER-ID String Mandatory Client ID Merchant/Partner yang didapat dari AstraPay
X-EXTERNAL-ID String Mandatory Numeric string unik yang hanya dapat digunakan satu kali dalam satu hari.
Format yang digunakan adalah:
36 Random Numeric String
CHANNEL-ID String Mandatory ID dari service QR Query Payment (00551)

Request Body

Name Type Requirement Description
originalReferenceNo String Mandatory Id transaksi dari AstraPay Ketika generate qr mpm berhasil (AstraPay Bill Number)
originalPartnerReferenceNo String Mandatory Id transaksi dari Merchant/Partner Ketika generate qr mpm berhasil (Merchant/Partner Bill Number)
originalExternalId String Optional External- ID pada header message
serviceCode String Mandatory Indikasi tipe transaksi (service code dari original transaction request)
merchantId String Mandatory ID Merchant
additionalInfo Object Optional Informasi Tambahan. Terdapat subfield yang bisa dilihat di kolom di bawah.
tip String Mandatory (ISO4217) Jumlah Net dari tip. Contoh: jika total tip IDR10.000, maka harus ditulis 10000.00 (2 nol di belakang koma). Jika tip tidak ada maka cantumkan “0.00”.

Response Body

Contoh Response

{
    "responseCode": "2005100",
    "responseMessage": "Successful",
    "originalReferenceNo": "ZSE44L79LN",
    "originalPartnerReferenceNo": "2020102900000000006695",
    "originalExternalId": null,
    "serviceCode": "47",
    "latestTransactionStatus": "00",
    "transactionStatusDesc": "SUCCESS",
    "paidTime": "2022-10-12T11:09:10.912333",
    "amount": {
        "value": "1.00",
        "currency": "IDR"
    },
    "terminalId": "5142",
    "additionalInfo": {
        "tip": "0.00"
        "customerPan": "9360082230001999476"
        "customerReferenceNumber": "497217068001"
        "issuerName": "ASTRAPAY"
    }
}
Field Type Requirement Description
responseCode String Mandatory Lihat response list
responseMessage String Mandatory Lihat response list
originalReferenceNo String Mandatory Id transaksi dari AstraPay Ketika generate qr mpm berhasil (AstraPay Bill Number)
originalPartnerReferenceNo String Mandatory Id transaksi dari Merchant/Partner Ketika generate qr mpm berhasil (Merchant/Partner Bill Number)
originalExternalId String Optional External- ID pada header message
serviceCode String Mandatory Indikasi tipe transaksi (service code dari original transaction request)
latestTransactionStatus String Mandatory 00 - Success
01 - Initiated
02 - Paying
03 - Pending
04 - Refunded
05 - Canceled
06 - Failed
07 - Not found
transactionStatusDesc String Optional Description status transaction
paidTime String Conditional Tanggal transaksi
amount Object Optional Jumlah Transaksi Net yang diberikan. Amount memiliki dua sub-field yang tertera di dua kolom di bawah.
value String Mandatory Jumlah Net dari transaksi. Contoh: total transaksi IDR10.000, menjadi 10000.00 (2 nol di belakang koma)
currency String Mandatory Kode mata uang berdasarkan ISO (IDR)
terminalId String Optional Terminal ID dari merchant
additionalInfo Object Optional Informasi Tambahan. Terdapat subfield yang bisa dilihat di kolom di bawah.
tip String Mandatory (ISO4217) Jumlah Net dari tip. Contoh: jika total tip IDR10.000, maka harus ditulis 10000.00 (2 nol di belakang koma). Jika tip tidak ada maka cantumkan “0.00”.
customerPan String Mandatory Identifikasi nomor pelanggan yang melakukan pembayaran melalui QRIS
customerReferenceNumber String Mandatory Nomor transaksi yang di-generate oleh pihak Issuer
issuerName String Mandatory Informasi nama issuer.

Payment Notification (Callback)

Parameter callback pada request akan digunakan oleh AstraPay untuk konfirmasi pembayaran yang telah dilakukan oleh customer Anda. Pada saat customer berhasil melakukan pembayaran, AstraPay akan mengirimkan HTTP POST yang menyertakan hasil pembayaran suatu tagihan dari customer. Anda perlu menyediakan halaman untuk menerima request callback tersebut. Agar dapat memproses hasil transaksi yang telah dilakukan oleh customer.

img

Request Header

Name Type Requirement Description
Content-Type String Mandatory Tipe konten, data yang dikirim harus selalu application/json
Authorization String Mandatory Bearer token dari hasil generate dari API Token B2B Access Token Request
X-TIMESTAMP String Mandatory Waktu lokal Merchant/Partner dalam format yyyy-MM-ddTHH:mm:ssTZD. Value yang digunakan harus sama dengan value pada signature-auth, token B2B Access Token Request, dan signature-service
X-SIGNATURE String Mandatory Signature untuk QR Query Payment hasil dari generate Signature Service.
X-PARTNER-ID String Mandatory Client ID Merchant/Partner yang didapat dari Partner/Merchant
X-EXTERNAL-ID String Mandatory Numeric string unik yang hanya dapat digunakan satu kali dalam satu hari.
Format yang digunakan adalah:
36 Random Numeric String
CHANNEL-ID String Mandatory ID dari service QR Query Payment (00752)

Protocol dan Service Address

Item Value
Service Code 52
Channel ID 00752
Protocol HTTPS
Verb POST
URL [host]:[port]/snap/v1.0/qr/qr-mpm-notify

Request Body

Contoh cURL Callback

POST …/snap/v1.0/qr/qr-mpm-notify HTTP/1.2
Content-type: application/json
Authorization: Bearer gp9HjjEj813Y9JGoqwOeOPWbnt4CUpvIJbU1mMU4a11MNDZ7Sg5u9a"
X-TIMESTAMP: 2020-12-23T08:46:11+07:00
X-SIGNATURE:
85be817c55b2c135157c7e89f52499bf0c25ad6eeebe04a986e8c8625
61b19a5
X-PARTNER-ID: 82150823919040624621823174737537
X-EXTERNAL-ID: 41807553358950093184162180797837
CHANNEL-ID: 00752
{
 "originalReferenceNo":"2020102977770000000009",
 "originalPartnerReferenceNo":"2020102900000000000001",
 "latestTransactionStatus":"00",
 "transactionStatusDesc":"SUCCESS",
 "amount":{
 "value":"12345678.00",
 "currency":"IDR"
 },
 "additionalInfo":{
 "tip": "100.00"
 }
}
Field Type Requirement Description
originalPartnerReferenceNo String Mandatory Id transaksi dari Merchant/Partner (Merchant/Partner Transaction Id)
originalReferenceNo String Mandatory AstraPay Transaction ID
latestTransactionStatus String Mandatory 00 - Success
01 - Initiated
02 - Paying
03 - Pending
04 - Refunded
05 - Canceled
06 - Failed
07 - Not found
transactionStatusDesc String Optional Deskripsi status transaksi
amount Object Optional Jumlah Transaksi Net yang diberikan. Amount memiliki dua sub-field yang tertera di dua kolom di bawah.
value String Mandatory Jumlah Net dari transaksi. Contoh: total transaksi IDR10.000, menjadi 10000.00 (2 nol di belakang koma)
currency String Mandatory Kode mata uang berdasarkan ISO (IDR)
additionalInfo Object Optional Informasi Tambahan. Terdapat subfield yang tertera di kolom di bawah.
tip String Mandatory (ISO4217) Jumlah Net dari tip. Contoh: jika total tip IDR10.000, maka harus di tulis 10000.00 (2 nol di belakang koma). Jika tip tidak ada maka cantumkan “0.00”.

Response Body

Contoh Response

{
 "responseCode":"2005200",
 "responseMessage":"Request has been processed successfully",
 "additionalInfo":{
    "tip":"10.00",
 }
}
Field Type Requirement Description
responseCode String Mandatory Lihat response list
responseMessage String Mandatory Lihat response list
additionalInfo Object Optional Informasi Tambahan. Terdapat subfield yang bisa dilihat di kolom di bawah.
tip String Mandatory (ISO4217) Jumlah Net dari tip. Contoh: jika total tip IDR10.000, maka harus ditulis 10000.00 (2 nol di belakang koma). Jika tip tidak ada maka cantumkan “0.00”.

Response List

Response Code Service Code Case Code Response Message Description
200 OK any 00 Successful Sukses melakukan request.
400 Bad Request any 01 Invalid Field Format Format field tidak benar.
400 Bad Request any 02 Invalid mandatory field {fieldName} Data yang dibutuhkan tidak ada atau tidak lengkap.
409 Duplicate 47 01 Duplicate partnerReferenceNo partnerReferenceNo sudah ada pada sistem.
404 Not Found 47 17 Invalid Terminal Terminal code tidak ada di sistem.
404 Not Found 51 08 Invalid Merchant Merchant id tidak ada di sistem atau status merchant abnormal.
500 Internal Server Error Respons tidak valid dari Back-end atau Kesalahan Tidak Terdefinisi

Paylater

Selamat datang di dokumentasi Astrapay Paylater

Auto-Preferred User Classic

Flow Diagram Auto-Preferred

Berikut adalah alur gambaran proses auto-preferred customer Astrapay

img

Authorization

Credential yang dibutuhkan yaitu :

API Paylater Registration

API yang digunakan untuk melakukan update status registrasi paylater di Astrapay

URL for Request

Contoh cURL Registration Paylater

curl --location 'https://paylatersvc.astrapay.com/paylater-service/partners/links' \
--header 'x-client-id: xxx14f325-x5x5-xx7x-bxxb-8xxxf6x1x12a' \
--header 'Content-Type: application/json' \
--data '{
    "phoneNumber" : "081234567890",
    "status" : "ACTIVE",
    "rejectReason" : "Data telah sesuai",
    "reapplyDate" : "2022-10-17"
}'
Method Environment Value
POST Testing https://paylatersvc-uat.astrapay.com/paylater-service/partners/links
Production https://paylatersvc.astrapay.com/paylater-service/partners/links

Header for Request

Key Description Environment
x-client-id Testing Identifier yang diberikan oleh Astrapay
Production

JSON Body

Sample Response 200 OK

    {
      "phoneNumber" : "081234567890",
      "status" : "ACTIVE",
      "rejectReason" : "Data telah sesuai",
      "reapplyDate" : "2022-10-17"
    }

Sample Response 400 FAILED

    {
      "phoneNumber" : "081234567890",
      "message" : "User status is unknown",
      "error" : null
    }

Body for request *field required

No Field Type Length Description
1 phoneNumber* String 13 No telepon yang digunakan oleh customer untuk registrasi
2 status String 255 Status paylater customer (ACTIVE/REJECTED/BLOCKED)
3 rejectReason String 255 Alasan registrasi customer ditolak/diblock
4 reapplyDate Date Tanggal customer dapat melakukan registrasi kembali

Keterangan value field 'message' di Response 400

No Message Description
1 User status is unknown Request status yang dikirim tidak sesuai

API Callback Registrasion

API ini digunakan untuk mengirimkan NIK dan status registrasi user ke Astrapay

(will be updated soon)

API Share Data Customer ke Astrapay Auto-Preferred

API untuk mengirimkan data KYC customer yang pengajuan paylaternya telah di approved oleh Maucash

URL for Request

Method Environment Value
POST Testing https://kyc-uat-api.astrapay.com/kyc-service/kycs-partner
Production https://kyc-api.astrapay.com/kyc-service/kycs-partner

Header for Request

Key Environment Description
x-client-id Testing Identifier yang diberikan oleh Astrapay
Production

JSON Body

Body for request *field required

Contoh cURL Share Data

curl --location --request POST 'https://kyc-uat-api.astrapay.com/kyc-service/kycs-partner' \
--header 'x-client-id: 8174f325-2565-4b7b-be1b-888df662367c' \
--header 'Content-Type: application/json' \
--data-raw '{
    "phoneNumber"                  : "082112344321", 
    "name"                         : "BERN RIANTOSE",
    "identificationDocumentType"   : "KTP",
    "identificationDocumentNumber" : "321423912332",
    "placeOfBirth"                 : "Jakarta",
    "dateOfBirth"                  : "1991-10-28",
    "nationality"                  : "WNI",
    "gender"                       : "LAKI-LAKI",
    "profession"                   : "Wiraswasta",
    "country"                      : "Indonesia",
    "province"                     : "Jawa Tengah",
    "city"                         : "Jepara",
    "district"                     : "Kalinyamatan",
    "village"                      : "Kriyan",
    "address"                      : "Jalan Makmur Raya",
    "rtNumber"                     : "04",
    "rwNumber"                     : "05",
    "postalCode"                   : "59462",
    "regionId"                     : "1102",
    "kycPhoto" : [
        {
            "type" : "KTP",
            "file" : base64
        },
        {
            "type" : "KTP",
            "file" : base64
        }
    ]
}'
No Field Type Length Description
1 phoneNumber* String 13 No Telepon yang digunakan customer untuk registrasi
2 name* String 225 Nama customer sesuai KTP
3 identificationDocumentType* String 225 Tipe dokumen (diisi: KTP)
4 identificationDocumentNumber* String 225 Nomor KTP customer
5 placeOfBirth* String 255 Tempat lahir sesuai KTP
6 dateOfBirth* 255 String Tanggal lahir sesuai KTP
7 nationality* String 255 Kewarganegaraan (diisi: WNI)
8 gender* String 225 Jenis kelamin customer sesuai KTP (PEREMPUAN/LAKI-LAKI)
9 profession* String 255 Pekerjaan/profesi customer
10 country* String 255 Negara sesuai KTP
11 province* String 255 Provinsi sesuai KTP
12 city String 255 Kota sesuai KTP
13 district* String 255 Kecamatan sesuai KTP
14 village* String 255 Provinsi sesuai KTP
15 address* String 255 Kelurahan/Desa sesuai KTP
16 rtNumber* String 255 Alamat sesuai KTP
17 rwNumber* String 255 Nomor RT sesuai KTP
18 postalCode* String 255 Nomor RT sesuai KTP
19 regionId* String 255 Kode Pos customer sesuai alamat KTP
20 kycPhoto* ArrayObject File KTP dan SELFIE customer
21 file* Base64 Tipe foto/dokumen yang dikirim (KTP/SELFIE)
22 type* String 255 Foto yang sudah di convert menjadi base64

Response (JSON String)

Response ini berupa informasi tentang berhasil tidaknya auto-preferred customer yang bersangkutan di Astrapay

Sample Response 200 OK

    {
      "phoneNumber" : "082112344321", 
      "status" : "SUCCESS",
      "note" : "",
      "upgradeMethod" : "MAUCASH"
    }

Sample Response 400 FAILED

    {
      "phoneNumber" : "082112344321", 
      "status" : "FAILED",
      "note" : "NIK already exist",
      "upgradeMethod" : "MAUCASH"
    }
No Field Type Description
1 phoneNumber* String No Telepon yang digunakan customer untuk registrasi
2 status* String Status auto-preferred (SUCCESS/FAILED)
3 note String Informasi alasan gagalnya auto-preferred di Astrapay (*field ini hanya akan berisi jika autopreferred gagal)
4 upgradeMethod* String Informasi tentang partner yang telah mengirimkan data KYC (MAUCASH)

Keterangan value field 'note' di Response 400

No Note Description
1 NIK already exist Nomor KTP yang dikirimkan sudah digunakan oleh customer lain di Astrapay
2 Region Not Found Data region yang dikirimkan tidak ditemukan di Astrapay
3 Profession Not Found Data profession yang dikirimkan tidak ditemukan di Astrapay
4 User Not Found Nomor telepon customer yang dikirimkan tidak ditemukan di Astrapay
5 Mandatory field must be filled Salah satu field mandatory tidak diisi atau kosong

API Reminder Repayment

API yang digunakan untuk mengirimkan notifikasi reminder pembayaran tagihan MauPaylater

URL for request

Method Environment Value
POST Testing https://paylatersvc-uat.astrapay.com/paylater-service/notification
Production https://paylatersvc.astrapay.com/paylater-service/notification

Header for request

Key Description Environment
x-client-id Testing Identifier yang diberikan oleh Astrapay
Production

JSON Body

Sample Body Request

    {
      "action" : "REPAYMENT_REMINDER", 
      "phoneNumber" : "087888784321", 
      "data" : [
                {
                  "key": "status",
                  "value": "LATE" }
      ]
    }

Sample Response Body

    {
      "phoneNumber" : "087888784321",
      "action" : "REPAYMENT_REMINDER"
    }

Body for request *field required

No Field Type Length Description
1 action String 255 Keterangan untuk tipe notifikasi (*permanent : REPAYMENT_REMINDER)
2 phoneNumber String 13 No telepon yang digunakan oleh customer untuk registrasi
3 data ArrayObject
key String 255 Kategory dari value (*permanent : status )
value String 255 Status reminder tagihan user;
1. TODAY,
2. ONE_DAY,
3. TWO_DAYS,
4. LATE

Customer Top Up

SNAP Introduction

Selamat datang di dokumentasi AstraPay Customer Top Up yang sesuai SNAP BI.

Dokumentasi ini menjelaskan procedure acceptance untuk implementasi API Customer Top Up dari perspektif Merchant.

Saat ini, AstraPay Customer Top Up menyediakan metode integrasi melalui SNAP AstraPay API. Dimana SNAP (Standar Nasional Open API Pembayaran) adalah standar Open API yang ditetapkan Bank Indonesia agar menciptakan industri sistem pembayaran yang lebih maju di Indonesia. Dokumen integrasi API Customer Top Up yang digunakan AstraPay merujuk pada bagian Transfer Kredit dalam dokumentasi SNAP BI.

Berikut adalah beberapa API yang disediakan, yaitu:

  1. SNAP Keamanan (Authorization)
  2. API Account Inquiry - Customer Top Up (Inquiry)
  3. API Customer Top Up (Payment)
  4. API Customer Top Up Inquiry Status (Check Status)

Update terakhir : 31 Maret 2024

Quick Start

Pada bagian ini dijelaskan mengenai tahapan integrasi dengan Merchant mulai dari Merchant mengajukan kerjasama hingga produk sudah bisa live di production.
img Keterangan:
1. Merchant yang ingin terintegrasi dengan AstraPay perlu melakukan pengajuan terlebih dahulu dengan partnership AstraPay untuk dapat mengetahui apa saja yang diperlukan untuk dapat memenuhi requirements yang dibutuhkan.

2. Merchant menyiapkan dokumen yang diminta oleh partnership AstraPay dan mengirimkannya untuk dapat didaftarkan.

3. Dokumen yang dikirim oleh Merchant perlu di verifikasi oleh partnership AstraPay agar dapat memenuhi requirements pendaftaran.

4. Tim partnership AstraPay akan berkoordinasi dengan tim developer AstraPay untuk dapat memberi panduan integrasi.

5. Merchant melakukan development untuk integrasi sesuai dengan panduan yang diberikan AstraPay.

6. Merchant perlu menginfokan pihak AstraPay apabila telah menyelesaikan proses development untuk integrasi.

7. Pihak AstraPay akan mengirimkan dokumen terkait proses integrasi yang perlu dilengkapi oleh Merchant sebagai alat dokumentasi.

8. Dokumen yang telah dilengkapi oleh Merchant akan dilakukan pengecekan oleh tim AstraPay untuk memastikan proses integrasi telah dilakukan oleh tim Merchant sesuai dengan panduan yang telah dibuat.

9. Tim AstraPay akan menginfokan terkait kelanjutan proses integrasi untuk environment production & akses dashboard yang akan diberikan kepada Merchant.

10. Setelah menyelesaikan proses integrasi, Merchant perlu menentukan bersama pihak AstraPay terkait jadwal live production.

11. Aplikasi live production sesuai kesepakatan kedua pihak.

Environment

Item Value
Development https://sandbox.astrapay.com
Production URL production akan diinfokan setelah UAT selesai dilakukan

Tahap Integrasi Development

Dibawah ini adalah hal yang perlu disiapkan dan diketahui sebelum melakukan development untuk melakukan integrasi. Berikut persiapan credential yang diperlukan untuk komunikasi antar penyedia (AstraPay) dan pengguna (Merchant/Partner):

  1. Client ID (X-Client-Key), dibuat oleh penyedia dan diberikan kepada pengguna. Dibutuhkan untuk menandakan Merchant yang mengirim request.
  2. Client Secret, dibuat oleh penyedia dan diberikan kepada pengguna. Dibutuhkan untuk menandakan Merchant yang mengirim request

  3. Cara mendapatkan Client ID dan Client Secret:
    1. Menghubungi pihak AstraPay
    2. Merchant mendapatkan credential Client ID dan Client Secret melalui email yang tertera di formulir pendaftaran.
  4. Public Key, dibuat oleh pengguna dan diberikan kepada penyedia.
  5. Private Key, dibuat oleh pengguna dan disimpan oleh pengguna sendiri.
  6. Cara Generate Public Key dan Private Key
  7. API yang membutuhkan Signature Auth, Signature Service, Token B2B, dan Token B2B2C sesuai pada sequence diagram, implementasinya dapat dilihat disini

SNAP Keamanan (Authorization)

Klik disini untuk detail informasi SNAP Keamanan AstraPay.

Penggunaan

Pada bagian ini menjelaskan mengenai penggunaan dari API Customer Top Up.

Use Case Diagram

Berikut adalah use case diagram untuk menggambarkan flow service Customer Top Up: img

Header Request
Authorization : Bearer gp9HjjEj813Y9JGoqwOeOPWbnt4CUpvIJbU1mMU4a11MNDZ7Sg5u9a
X-SIGNATURE : 010cb949c2d087859b1d5ce96cbcc2be599d38c98da227dce6385792868cbdcb
X-TIMESTAMP : 2023-09-20T17:00:00.939
X-PARTNER-ID : 19e51b86-c5ae-4994-8a68-5ad251e86bac
X-EXTERNAL-ID  : 2023092000000001
CHANNEL-ID : APMART
Parameter Requirement Description
Authorization Mandatory Access token yang diberikan oleh AstraPay ketika partner melakukan generate token.
X-SIGNATURE Mandatory Signature yang dibuat oleh partner.
X-TIMESTAMP Mandatory Merupakan timestamp user melakukan topup dengan menggunakan format ISO8601.
X-PARTNER-ID Mandatory Merupakan kode partner yang diberikan oleh AstraPay.
X-EXTERNAL-ID Mandatory Kode transaksi partner yang bersifat unik setiap harinya.
CHANNEL-ID Mandatory Kode channel yang ada pada partner dan terdaftar pada sistem AstraPay.
X-LATITUDE Optional Kode latitude darimana request berasal.
X-LONGITUDE Optional Kode longitude darimana request berasal.
Header Response
Content-Type : application/json
X-TIMESTAMP : 2023-09-20T17:00:00.939
Parameter Requirement Description
Content-Type Mandatory Diisi application/json sesuai dengan ketentuan SNAP.
X-TIMESTAMP Mandatory Timestamp dengan format ISO8601 dan dalam format waktu UTC.

API Account Inquiry - Customer Top Up

img

Protocol & Service Address

Item Value
Name Account Inquiry - Customer Top Up
Description Request yang dikirim oleh Partner untuk memperoleh informasi customer
URI [hostname]/disbursement-service/snap/v1.0/emoney/account-inquiry
Transport Protocol / HTTP Method HTTPS / POST
Message Format JSON
Service Code 37
Account Inquiry - Customer Top Up Request Body
{
    "partnerReferenceNo": "23092915000075679102", 
    "customerNumber": "087878878878",
    "amount": {
        "value": "11000.00",
        "currency": "IDR"
    },
    "transactionDate": "2023-09-29T15:00:00+07:00",
    "additionalInfo": {}
}
Parameter Type Length Requirement Description
partnerReferenceNo String 64 Mandatory Kode Identifikasi yang dikirimkan oleh partner / pengguna API.
Kode ini digunakan sebagai kode unik untuk melakukan payment.
customerNumber String 32 Mandatory Nomor HP Customer
amount Object Mandatory Informasi terkait nominal yang akan dibayarkan ketika melakukan top up.
value String 16,2 Mandatory Value transaksi, jika currency dalam IDR maka tambahkan 2 digit desimal.
ex : IDR10.000 → 10000.00
currency String 3 Mandatory ex : IDR
transactionDate String 25 Optional Tanggal transaksi dilakukan dengan format ISO-8601
additionalInfo Object Optional Informasi tambahan jika ada.
Account Inquiry - Customer Top Up Response Body
{
  "responseCode":"2003700",
  "responseMessage":"Successful",
  "referenceNo":"24032813211419996331",
  "partnerReferenceNo":"23092915000075679102",
  "customerNumber":"087878878878",
  "customerName":"ASTRAPAY CUSTOMER",
  "amount":{
    "value":"11000.00",
    "currency":"IDR"
  },
  "feeAmount":{
    "value":"1000.00",
    "currency":"IDR"
  },
  "minAmount":{
    "value":"10000.00",
    "currency":"IDR"
  },
  "maxAmount":{
    "value":"10000000.00",
    "currency":"IDR"
  },
  "customerMonthlyInLimit": 40000000.00,
  "feeType":"Admin Fee",
  "additionalInfo":{  
  } 
}
Parameter Type Length Requirement Description
responseCode String 7 Mandatory Response Code, untuk deskripsi dapat dilihat pada tabel response code di bawah.
responseMessage String 150 Mandatory Merupakan deskripsi dari response code yang diberikan.
referenceNo String 64 Optional Kode identifikasi transaksi yang akan diberikan Astrapay.
partnerReferenceNo String 64 Mandatory Kode identifikasi yang dikirimkan oleh partner / pengguna, akan dikembalikan jika partner / pengguna mengirimkan valuenya ketika request.
Kode ini digunakan sebagai kode unik untuk melakukan payment.
sessionId String 25 Optional Session Id untuk transaksi tersebut
customerNumber Sting 64 Mandatory Informasi Nomor HP Customer yang terdaftar.
customerName Sting 255 Mandatory Informasi nama customer, untuk saat ini akan mengembalikan ASTRAPAY CUSTOMER.
amount Object Optional Informasi terkait nominal yang akan dibayarkan ketika melakukan top up.
value String 16,2 Mandatory Value transaksi, jika currency dalam IDR maka tambahkan 2 digit desimal.
ex : IDR10.000 → 10000.00
currency String 3 Mandatory ex : IDR
feeAmount Object Optional Informasi terkait biaya administrasi yang akan dikenakan kepada customer untuk setiap transaksi top up yang dilakukannya.
value String 16,2 Mandatory Value transaksi, jika currency dalam IDR maka tambahkan 2 digit desimal.
ex : IDR10.000 → 10000.00
currency String 3 Mandatory ex : IDR
minAmount Object Optional Informasi terkait limit minimal top up customer.
value String 16,2 Mandatory Value transaksi, jika currency dalam IDR maka tambahkan 2 digit desimal.
ex : IDR10.000 → 10000.00
currency String 3 Mandatory ex : IDR
maxAmount Object Optional Informasi terkait limit maksimal top up yang dapat dilakukan terhadap seorang customer.
value String 16,2 Mandatory Value transaksi, jika currency dalam IDR maka tambahkan 2 digit desimal.
ex : IDR10.000 → 10000.00
currency String 3 Mandatory ex : IDR
customerMonthlyInLimit Numeric 17 Optional Informasi terkait limit maksimal customer melakukan top up setiap bulan.
feeType String 25 Optional Tipe fee yang dikenakan
additionalInfo Object Optional Informasi Tambahan yang dibutuhkan partner / pengguna API

API Customer Top Up

img

Protocol & Service Address

Item Value
Name Customer Top-Up
Description Request yang dikirim oleh Partner untuk melakukan top up saldo customer
URI [hostname]/disbursement-service/snap/v1.0/emoney/topup
Transport Protocol / HTTP Method HTTPS / POST
Message Format JSON
Service Code 38
Customer Top Up Request Body
{
  "partnerReferenceNo":"23092915000075679102",
  "customerNumber":"087878878878",
  "customerName":"ASTRAPAY CUSTOMER",
  "amount":{
    "value":"11000.00",
    "currency":"IDR"
  },
  "feeAmount":{
    "value":"1000.00",
    "currency":"IDR"
  },
  "transactionDate":"2023-09-29T15:00:59+07:00", 
  "notes":"notes test", 
  "additionalInfo":{ 
  } 
}
Parameter Type Length Requirement Description
partnerReferenceNo String 64 Mandatory Kode Identifikasi yang dikirimkan oleh partner / pengguna API.
Kode yang dikirimkan adalah kode unik yang didapatkan setelah partner berhasil melakukan inquiry.
customerNumber String 32 Mandatory Infomasi Nomor HP Customer yang terdaftar.
customerName String 255 Optional Informasi nama customer, untuk saat ini akan berisi ASTRAPAY CUSTOMER.
amount Object Mandatory Informasi terkait nominal yang akan dibayarkan ketika melakukan top up.
Object harus sama dengan response amount yang diberikan saat inquiry.
value String 16,2 Mandatory Value transaksi, jika currency dalam IDR maka tambahkan 2 digit desimal.
ex : IDR10.000 → 10000.00
currency String 3 Mandatory ex : IDR
feeAmount Object Mandatory Informasi terkait biaya administrasi yang akan dikenakan kepada customer untuk setiap transaksi top up yang dilakukannya.
Object harus sama dengan response feeAmount yang diberikan saat inquiry.
value String 16,2 Mandatory Value transaksi, jika currency dalam IDR maka tambahkan 2 digit desimal.
ex : IDR10.000 → 10000.00
currency String 3 Mandatory ex : IDR
transactionDate String 25 Optional Tanggal transaksi dilakukan dengan format ISO-8601
sessionId String 25 Optional Session Id untuk transaksi tersebut
categoryId Numeric 10 Optional -
notes String 255 Optional Informasi terkait notes transaksi tersebut.
additionalInfo Object Optional Informasi tambahan jika ada.
Customer Top Up Response Body
{
  "responseCode":"2003800",
  "responseMessage":"Successful",
  "referenceNo":"24032813211419996331",
  "partnerReferenceNo":"23092915000075679102",
  "customerNumber":"087878878878",
  "amount":{
    "value":"10000.00",
    "currency":"IDR"
  },
  "additionalInfo":{
  }
}
Parameter Type Length Requirement Description
responseCode String 7 Mandatory Response Code, untuk Deskripsi dapat dilihat pada tabel response code di bawah.
responseMessage String 150 Mandatory Merupakan deskripsi dari response code yang diberikan.
referenceNo String 64 Optional Kode identifikasi transaksi yang akan diberikan astrapay.
partnerReferenceNo String 64 Mandatory Kode identifikasi yang dikirimkan oleh partner / pengguna, akan dikembalikan jika partner / pengguna mengirimkan valuenya ketika request.
sessionId String 25 Optional Session Id untuk transaksi tersebut
customerNumber Sting 64 Mandatory Informasi Nomor HP Customer yang terdaftar.
amount Object Mandatory Informasi terkait saldo yang akan diterima oleh customer ketika melakukan top up.
value String 16,2 Mandatory Value transaksi, jika currency dalam IDR maka tambahkan 2 digit desimal.
ex : IDR10.000 → 10000.00
currency String 3 Mandatory ex : IDR
additionalInfo Object Optional Informasi tambahan yang dibutuhkan partner / pengguna API

API Customer Top Up Inquiry Status

img

Protocol & Service Address

Item Value
Name Customer Top Up Inquiry Status
Description Request yang dikirim oleh Partner untuk melakukan check status top up saldo customer
URI [hostname]/disbursement-service/snap/v1.0/emoney/topup-status
Transport Protocol / HTTP Method HTTPS / POST
Message Format JSON
Service Code 39
Customer Top Up Inquiry Status Request Body
{
  "originalPartnerReferenceNo":"23092915000075679102",
  "serviceCode":"38",
  "additionalInfo":{ 
  } 
}
Parameter Type Length Requirement Description
originalPartnerReferenceNo String 64 Mandatory Kode Identifikasi yang dikirimkan oleh partner / pengguna API pada request inquiry atau payment.
originalReferenceNo String 64 Optional Kode Identifikasi yang diterima oleh partner / pengguna API pada saat melakukan inquiry atau payment.
originalExternalId String 64 Optional Header X-EXTERNAL-ID yang dikirim oleh partner / pengguna API ketika melakukan inquiry atau payment.
serviceCode String 2 Mandatory Service code yang ingin dilakukan pengecekan, dalam kasus ini maka:
38 → Pengecekan request payment
additionalInfo Object Optional Informasi Tambahan dari Partner / Pengguna API
Customer Top Up Inquiry Status Response Body
{
  "responseCode":"2003900",
  "responseMessage":"Successful",
  "originalPartnerReferenceNo":"23092915000075679102",
  "originalReferenceNo":"24032813211419996331",
  "serviceCode":"38",
  "amount":{
    "value":"10000.00",
    "currency":"IDR"
  },
  "latestTransactionStatus":"00",
  "additionalInfo":{
  } 
}
Parameter Type Length Requirement Description
responseCode String 7 Mandatory Response Code, untuk Deskripsi dapat dilihat pada tabel response code dibawah.
responseMessage String 150 Mandatory Merupakan deskripsi dari response code yang diberikan.
originalPartnerReferenceNo String 64 Mandatory Kode Identifikasi yang dikirimkan oleh partner / pengguna API pada request inquiry atau payment.
originalReferenceNo String 64 Optional Kode Identifikasi yang diterima oleh partner / pengguna API pada saat melakukan inquiry atau payment.
originalExternalId String 64 Optional Header X-EXTERNAL-ID yang dikirim oleh partner / pengguna API ketika melakukan inquiry atau payment.
serviceCode String 2 Mandatory Service code yang ingin dilakukan pengecekan, dalam kasus ini maka :
38 → Pengecekan request payment
amount Object Optional Infromasi terkait saldo yang akan diterima oleh customer ketika melakukan topup.
value String 16,2 Optional Value transaksi, jika currency dalam IDR maka tambahkan 2 digit desimal.
ex : IDR10.000 → 10000.00
currency String 3 Optional ex : IDR
latestTransactionStatus String 2 Mandatory Adapun code transaction status yang akan dikembalikan oleh Astrapay adalah sebagai berikut:
00 → Success

01 → Initiated

03 → Pending

06 → Failed

07 → Not Found
transactionStatusDesc String 50 Optional Deskripsi atau notes terkait status transaksi.
additionalInfo Object Optional Informasi tambahan jika ada

Response Code

Response status terdiri dari 2 komponen, yaitu kode (response code) dan deskripsinya (response message).

Daftar Response Code

HTTP Code Service Code Case Code Response Message Description
200 any 00 Successful Successful request.
202 any 00 Request In Progress Transaction still on process
400 any 00 Bad Request General request failed error, including message parsing failed.
400 any 01 Invalid Field Format {field name} Invalid format.
400 any 02 Invalid Mandatory Field {field name} Missing or invalid format on mandatory field.
401 any 00 Unauthorized. [reason] General unauthorized error (No Interface Def, API is Invalid, Oauth Failed, Verify Client Secret Fail, Client Forbidden Access API, Unknown Client, Key not Found).
401 any 01 Invalid Token (B2B) Token found in request is invalid (Access Token Not Exist, Access Token Expiry).
403 any 15 Transaction Not Permitted.[reason] Transaction Not Permitted.
403 any 18 Inactive Card/Account/Customer Indicates inactive account.
404 any 01 Transaction Not Found Transaction Not Found
404 any 08 Invalid Merchant Merchant does not exist or status abnormal.
404 any 11 Invalid Card/Account/Customer [info]/Virtual Account Card information may be invalid, or the card account may be blacklisted, or Virtual Account number maybe invalid.
404 any 12 Invalid Bill/Virtual Account [Reason] The bill is blocked/ suspended/not found.
404 any 13 Invalid Amount The amount doesn't match with what supposed to.
404 any 14 Paid Bill The bill has been paid
404 any 16 Partner Not Found Partner number can't be found.
404 any 19 Invalid Bill/Virtual Account The bill is expired.
409 any 00 Conflict Cannot use same X-EXTERNAL-ID in same day.
409 any 01 Duplicate partnerReferenceNo Transaction has previously been processed indicates the same partnerReferenceNo already success.
500 any 00 General Error General Error.
500 any 01 Internal Server Error Unknown Internal Server Failure, Please retry the process again.
504 any 00 Timeout Timeout from the issuer.

Biller

1. Introduction Biller

Selamat datang di dokumentasi AstraPay Biller.

Dokumentasi ini menjelaskan procedur acceptance untuk implementasi API produk Biller dari perspektif Merchant.

Berikut adalah alur gambaran proses keseluruhan API secara umum: "Sequence Diagram mengakses Produk Biller secara umum"

1.1 Glosarium

Sebelum melakukan integrasi, mari kita bahas terlebih dahulu beberapa definisi dari istilah yang akan muncul pada dokumentasi ini. Penjelasan dari istilah tersebut adalah sebagai berikut:

Istilah Deskripsi
Merchant Pihak Ketiga yang ingin melakukan integrasi dengan AstraPay
API Application Programming Interface
Database Kumpulan data yang telah terorganisasi dan terstruktur
User Pengguna atau Customer Jasa

2. Inquiry

API pada bagian ini digunakan untuk melakukan inquiry.

2.1 Protocol & Service Address

Item Value
Protocol HTTPS
Method POST
URL Sandbox /v1/mitra-service/inquiries

2.2 Request Header

Name Type Requirement Description
X-PARTNER-ID String Mandatory Client ID Merchant/Partner yang didapat dari AstraPay
X-TIMESTAMP String Mandatory Waktu lokal Merchant/Partner dalam format yyyy-MM-ddTHH:mm:ssTZD
X-SIGNATURE String Mandatory Signature untuk mengakses API AstraPay hasil dari generate Signature Service
X-EXTERNAL-ID String Mandatory Numeric string unik yang hanya dapat digunakan satu kali dalam satu hari. Format yang digunakan adalah: 36 Random Numeric String
Authorization String Mandatory Bearer token hasil generate dari API Access Token B2B
Content-Type String Mandatory Tipe konten, data yang dikirim harus selalu application/json

2.3 Request Body

contoh cURL request body pada produk biller BPJS Kesehatan

curl --location 'https://sandbox.astrapay.com/v1/mitra-service/inquiries' \
--header 'x-partner-id: f37e5edf-8d99-40ab-b8f0-f0f0f12f41b5' \
--header 'x-timestamp: 2011-12-03T10:15:30' \
--header 'x-signature: 1111111' \
--header 'x-external-id: 111111' \
--header 'Authorization: Bearer DlHTC8U5urS6VDsWkNMv3ealeldgjR8H5CvYYfD8n5xxx' \
--header 'Content-Type: application/json' \
--data '{
    "beneficiaryNumber": "8888802883963273",
    "productCode": "ASPOBPJ0000",
    "periodStart": "2024-03-07",
    "periodEnd": "2024-03-07"   
}'
Name Type Requirement Description
beneficiaryNumber String Mandatory Data yang diinput di form field (Contoh: Nomor telepon, Token listrik, dst.)
productCode String Mandatory Kode unik pada tiap produk
periodStart String Mandatory pada produk BPJS dan PBB BPJS: Rentang waktu batasan awal yang dimulai pada saat melakukan inquiry/tanggal melakukan inquiry; PBB: Rentang tahun dalam melakukan inquiry
periodEnd String Mandatory pada produk BPJS Rentang waktu batasan akhir dalam melakukan inquiry untuk mendapatkan jumlah bulan yang ingin dibayar

2.4 Response Body

Contoh Response pada produk BPJS Kesehatan

    {
    "id": 1422,
    "type": "BPJS_KESEHATAN",
    "productCode": "ASPOBPJ0000",
    "totalPrice": 72500.0000,
    "margin": 0,
    "grandTotal": 72500.0000,
    "message": null,
    "status": "SUCCESS",
    "paymentType": "STATIC",
    "detailAdditionalData": [
        {
            "key": "transactionType",
            "value": "BPJS Kesehatan",
            "label": "Jenis Pembayaran"
        },
        {
            "key": "beneficiaryNumber",
            "value": "8888802883963273",
            "label": "No. BPJS Kesehatan"
        },
        {
            "key": "beneficiaryName",
            "value": "Jarister Edwins Silalahi",
            "label": "Nama Pemilik"
        },
        {
            "key": "totalMembers",
            "value": "2 orang",
            "label": "Anggota Keluarga"
        },
        {
            "key": "totalPeriods",
            "value": "1 bulan",
            "label": "Periode Bayar"
        },
        {
            "key": "basicPrice",
            "value": "Rp70.000",
            "label": "Jumlah Tagihan"
        }
    ]
}
Field Type Requirement Description
id Int Mandatory Kode unik hasil inquiry
type String Mandatory Kode untuk kategori produk (Contoh: PULSA)
productCode String Mandatory Kode untuk produk (Contoh: PUPRTEL011K)
totalPrice Int Mandatory Nominal harga jual dari AstraPay
margin Int Mandatory Keuntungan yang didapatkan Merchant
grandTotal Int Mandatory Nominal harga jual yang ditambahkan margin (Rumus: totalPrice + margin)
message String Optional Pesan yang dimunculkan ketika terjadi error
status String Mandatory Status Transaksi (SUCCESS / PENDING / VOID )
paymentType String Mandatory Pembayaran dengan nominal yang sesuai (STATIC) dan pembayaran yang dapat ditentukan jumlah nominal yang ingin dibayar (DYNAMIC)
detailAdditionalData Object Mandatory Data tambahan dari inquiry
detailAdditionalData.key String Optional Kata kunci untuk penunjuk data
detailAdditionalData.value String Optional Response data
detailAdditionalData.label String Optional Label keterangan data

3. Transaksi

API pada bagian ini digunakan untuk melakukan transaksi.

3.1 Protocol & Service Address

Item Value
Protocol HTTPS
Method POST
URL Sandbox /v1/mitra-service/transactions

3.2 Request Header

Name Type Requirement Description
X-PARTNER-ID String Mandatory Client ID Merchant/Partner yang didapat dari AstraPay
X-TIMESTAMP String Mandatory Waktu lokal Merchant/Partner dalam format yyyy-MM-ddTHH:mm:ssTZD
X-SIGNATURE String Mandatory Signature untuk mengakses API AstraPay hasil dari generate Signature Service
X-EXTERNAL-ID String Mandatory Numeric string unik yang hanya dapat digunakan satu kali dalam satu hari. Format yang digunakan adalah: 36 Random Numeric String
Authorization String Mandatory Bearer token hasil generate dari API Access Token B2B
Content-Type String Mandatory Tipe konten, data yang dikirim harus selalu application/json

3.3 Request Body

contoh cURL request body pada produk biller BPJS Kesehatan

curl --location 'https://sandbox.astrapay.com/v1/mitra-service/transactions' \
--header 'x-partner-id: f37e5edf-8d99-40ab-b8f0-f0f0f12f41b5' \
--header 'x-timestamp: 2020-01-01T00:00:00' \
--header 'x-signature: aa' \
--header 'x-external-id: aa' \
--header 'Authorization: Bearer DlHTC8U5urS6VDsWkNMv3ealeldgjR8H5CvYYfD8n5xxx' \
--header 'Content-Type: application/json' \
--data '{
    "inquiryId": "1422",
    "partnerRefenceNo": "12345"
}'
Name Type Requirement Description
inquiryId String Mandatory Kode unik hasil inquiry untuk transaksi
partnerReferenceNo String Mandatory ID transaksi pada Merchant/Partner

3.4 Response Body

Contoh Response pada produk BPJS Kesehatan

{
                "id": 1762,
                "transactionNumber": "INV/BIL/ASU/240314/008OORD2ATP",
                "type": "BPJS_KESEHATAN",
                "productCode": "ASPOBPJ0000",
                "beneficiaryNumber": "8888802883963273",
                "totalPrice": 72500.00,
                "margin": 0.00,
                "grandTotal": 72500.00,
                "message": null,
                "status": "PENDING",
                "inquiryId": 1422,
                "partnerReferenceNo": "cropdrdevtest1",
                "detailAdditionalData": [
                    {
                        "key": "transactionNumber",
                        "value": "INV/BIL/ASU/240314/008OORD2ATP",
                        "label": "No. Transaksi"
                    },
                    {
                        "key": "referenceNumberProvider",
                        "value": "8BC3CC22FE669563",
                        "label": "No. Referensi"
                    },
                    {
                        "key": "transactionType",
                        "value": "BPJS Kesehatan",
                        "label": "Jenis Pembayaran"
                    },
                    {
                        "key": "beneficiaryNumber",
                        "value": "8888802883963273",
                        "label": "No. BPJS Kesehatan"
                    },
                    {
                        "key": "beneficiaryName",
                        "value": "Jarister Edwins Silalahi",
                        "label": "Nama Pemilik"
                    },
                    {
                        "key": "totalMembers",
                        "value": "2 orang",
                        "label": "Anggota Keluarga"
                    },
                    {
                        "key": "totalPeriods",
                        "value": "1 bulan",
                        "label": "Periode Bayar"
                    },
                    {
                        "key": "basicPrice",
                        "value": "Rp70.000",
                        "label": "Jumlah Tagihan"
                    }
                ]
            }
Field Type Requirement Description
id Int Mandatory Kode unik hasil transaksi
transactionNumber Int Mandatory Kode unik transaksi yang di generate oleh AstraPay
type String Mandatory Kode untuk kategori produk (Contoh: PULSA)
productCode String Mandatory Kode untuk produk (Contoh: PUPRTEL011K)
totalPrice Int Mandatory Nominal harga jual dari AstraPay
margin Int Mandatory Keuntungan yang didapatkan Merchant
grandTotal Int Mandatory Nominal harga jual yang ditambahkan margin (Rumus: totalPrice + margin)
message String Optional Pesan yang dimunculkan ketika terjadi error
status String Mandatory Status Transaksi (SUCCESS / PENDING / VOID )
inquiryId String Mandatory Kode unik hasil inquiry untuk transaksi
partnerReferenceNo String Mandatory ID transaksi pada Merchant/Partner
detailAdditionalData Object Mandatory Data tambahan dari inquiry
detailAdditionalData.key String Optional Kata kunci untuk penunjuk data
detailAdditionalData.value String Optional Response data
detailAdditionalData.label String Optional Label keterangan data

4. Mendapatkan Status

API pada bagian ini digunakan untuk mendapatkan status transaksi.

4.1 Protocol & Service Address

Item Value
Protocol HTTPS
Method GET
URL Sandbox v1/mitra-service/transactions

4.2 Request Header

Name Type Requirement Description
X-PARTNER-ID String Mandatory Client ID Merchant/Partner yang didapat dari AstraPay
X-TIMESTAMP String Mandatory Waktu lokal Merchant/Partner dalam format yyyy-MM-ddTHH:mm:ssTZD
X-SIGNATURE String Mandatory Signature untuk mengakses API AstraPay hasil dari generate Signature Service
X-EXTERNAL-ID String Mandatory Numeric string unik yang hanya dapat digunakan satu kali dalam satu hari. Format yang digunakan adalah: 36 Random Numeric String
Authorization String Mandatory Bearer token hasil generate dari API Access Token B2B
Content-Type String Mandatory Tipe konten, data yang dikirim harus selalu application/json

contoh cURL request body pada produk biller BPJS Kesehatan

curl --location 'https://sandbox.astrapay.com/v1/mitra-service/transactions/1762' \
--header 'x-partner-id: f37e5edf-8d99-40ab-b8f0-f0f0f12f41b5' \
--header 'x-timestamp: 2024-02-22T10:39:30' \
--header 'x-signature: ede31' \
--header 'x-external-id: 12d' \
--header 'Authorization: Bearer DlHTC8U5urS6VDsWkNMv3ealeldgjR8H5CvYYfD8n5xxx' \
--header 'Content-Type: application/json'

4.3 Response Body

Contoh Response pada produk BPJS Kesehatan

{
    "id": 1762,
    "transactionNumber": "INV/BIL/ASU/240314/008OORD2ATP",
    "type": "BPJS_KESEHATAN",
    "productCode": "ASPOBPJ0000",
    "beneficiaryNumber": "8888802883963273",
    "totalPrice": 72500.00,
    "margin": 0.00,
    "grandTotal": 72500.00,
    "message": null,
    "status": "SUCCESS",
    "inquiryId": 1422,
    "partnerReferenceNo": "cropdrdevtest1",
    "detailAdditionalData": [
        {
            "key": "transactionNumber",
            "value": "INV/BIL/ASU/240314/008OORD2ATP",
            "label": "No. Transaksi"
        },
        {
            "key": "referenceNumberProvider",
            "value": "8BC3CC22FE669563",
            "label": "No. Referensi"
        },
        {
            "key": "transactionType",
            "value": "BPJS Kesehatan",
            "label": "Jenis Pembayaran"
        },
        {
            "key": "beneficiaryNumber",
            "value": "8888802883963273",
            "label": "No. BPJS Kesehatan"
        },
        {
            "key": "beneficiaryName",
            "value": "Jarister Edwins Silalahi",
            "label": "Nama Pemilik"
        },
        {
            "key": "totalMembers",
            "value": "2 orang",
            "label": "Anggota Keluarga"
        },
        {
            "key": "totalPeriods",
            "value": "1 bulan",
            "label": "Periode Bayar"
        },
        {
            "key": "basicPrice",
            "value": "Rp70.000",
            "label": "Jumlah Tagihan"
        }
    ]
}
Field Type Requirement Description
id Int Mandatory Kode unik hasil transaksi
transactionNumber Int Mandatory Kode unik transaksi yang di generate oleh AstraPay
type String Mandatory Kode untuk kategori produk (Contoh: PULSA)
productCode String Mandatory Kode untuk produk (Contoh: PUPRTEL011K)
beneficiaryNumber String Mandatory Data yang diinput di form field (Contoh: Nomor telepon, Token listrik, dst.)
totalPrice Int Mandatory Nominal harga jual dari AstraPay
margin Int Mandatory Keuntungan yang didapatkan Merchant
grandTotal Int Mandatory Nominal harga jual yang ditambahkan margin (Rumus: totalPrice + margin)
message String Optional Pesan yang dimunculkan ketika terjadi error
status String Mandatory Status Transaksi (SUCCESS / PENDING / VOID )
partnerReferenceNo String Mandatory ID transaksi pada Merchant/Partner
detailAdditionalData Object Mandatory Data tambahan dari inquiry
detailAdditionalData.key String Optional Kata kunci untuk penunjuk data
detailAdditionalData.value String Optional Response data
detailAdditionalData.label String Optional Label keterangan data

FAQ

Payment Channel

No Pertanyaan Jawaban
1. Apa saja yang harus merchant lakukan sebelum memulai integrasi? Merchant melakukan pendaftaran ke [email_partnership] kemudian memberikan informasi berupa data PIC (nama, brand bisnis, alamat, SIUP, NPWP untuk proses Know Your Business(KYB).
2. Bagaimana saya bisa mendapatkan credential merchant? Merchant dapat mendaftarkan Nama, e-mail, Callback URL, Default URL development kepada Tim AstraPay. Kemudian Tim AstraPay akan memberikan Credential berupa clientId dan clientSecret untuk melakukan development integrasi.
3. Bagaimana saya bisa melakukan integrasi? Setelah mendapatkan Credential dari Tim AstraPay, Merchant mulai dapat melakukan development integrasi menggunakan Credential yang diberikan
4. Apa yang perlu saya siapkan untuk deploy ke Production setelah development integrasi selesai? Merchant dapat memberikan data sesuai Jawaban no.2 untuk versi production ke Tim AstraPay. Setelah itu Tim AstraPay akan memberikan clientId dan clientSecret untuk Production Environment
5. Apa itu Callback di AstraPay? Callback kami definisikan sebagai proses notifikasi dari sistem AstraPay kepada sistem Merchant bahwa suatu proses yang dilakukan merchant (Payment, Account Link) telah berhasil

Maintenance and Support

Overview QRIS SDK

Dokumen ini menjelaskan kebijakan maintenance untuk penggunaan Software Development Kit (SDK) AstraPay QRIS. AstraPay secara berkala memperbarui SDK dan API yang terintegrasi untuk memperkenalkan fitur baru, melakukan perbaikan, dan melakukan pemeliharaan pada fitur yang sudah ada. Setiap versi QRIS SDK akan dipublikasikan di Maven (Android) dan CocoaPods (iOS) serta didokumentasikan di dokumentasi API kami.

Partner SDK adalah pihak yang menggunakan SDK QRIS AstraPay dengan mengintegrasikan layanan pembayaran QRIS AstraPay ke dalam aplikasi/brand. Kami sangat menyarankan partner SDK untuk tetap memantau perkembangan rilis SDK agar dapat memanfaatkan perkembangan fitur terbaru.

Versioning

Versi rilis SDK AstraPay QRIS mengikuti format X.Y.Z (Major.Minor.Patch).

Catatan : Atas peningkatan versi minor maupun patch, partner SDK tetap disarankan untuk menggunakan versi terbaru dan memperbarui versi SDK mereka dengan seksama.

Phases

Setiap versi minor SDK AstraPay dibagi menjadi tiga fase:

Communication Method

Kami akan mengkomunikasikan rilis kami melalui beberapa metode:

Releases

iOS

Slate: API Documentation Generator

Android

Slate: API Documentation Generator