Modul Integrasi Jurnal (API)

Last updated: November 04th, 2019

Download

Sebelum memulai Integerasi sebaiknya Developer mendownload Guzzle terlebih dahulu untuk membuat REST API di sisi Client. keterangannya bisa anda lihat di dokumentasi Guzzle tersebut dan Guzzle ini akan bermanfaat sekali untuk berinteraksi dengan REST SERVER.

Untuk menguji / Test sebuah API menggunakan aplikasi Postman, bisa anda download di https://www.getpostman.com/

Download Guzzle Download Postman

Pengenalan name_function pada API

untuk terhubung dengan API nya, silakan gunakan Link URL https://cloud.neraca.id/{Name_function}. Untuk {Name_function} bisa anda lihat dibawah ini :

# name_function nama_parameter ketentuan penjelasan
1 api_code data wajib berisi value yang sudah di json_encode()
2 api_code/checkLockAccount id wajib berisi value id periode fiskal
3 api_code/ledgerapi dc, cg, rb, prefix opsional, opsional, wajib, wajib Untuk penjelasannya silakan klik Example legder list
4 api_code/generateEncrypt serialize wajib berisi value yang sebelumnya dalam bentuk array, lalu di ubah menggunakan serialize()
5 api_code/getKodePeriodeFiskal username wajib Menampilkan beberapa Id yang cocok dengan username

Load api (GET & POST)


<?php
require ("/guzzle/autoload.php");

use GuzzleHttp\Client;

class ... extends ...
{
	private $_client;
	public function __construct(){
		parent::__construct();

// Load base_uri
		$this->_client = new Client([
			'base_uri' => "https://cloud.neraca.id/"
		]);
	}
...
}
                                            
Pengiriman dengan metode GET

<?php
require ("/guzzle/autoload.php");

use GuzzleHttp\Client;

class ... extends ...
{
	private $_client;
	public function __construct(){
		...
	}

	public function ...(){
		$respons 	= $this->_client->request('GET','{name_function}',[
			'query' => [
				{nama_parameter} 	=> 1,
				{nama_parameter} 	=> "dll"
			]
		]);
		$result 	= json_decode($respons->getBody()->getContents(),true);
		return $result;
	}
...
}
                                        
Pengiriman dengan metode POST

<?php
require ("/guzzle/autoload.php");

use GuzzleHttp\Client;

class ... extends ...
{
	private $_client;
	public function __construct(){
		...
	}

	public function ...(){
		$respons	= $this->_client->request('POST','{name_function}',[
			'form_params' => [{nama_parameter} => {value}]
		]);

		$result 	= json_decode($respons->getBody()->getContents(),true);
		return $result;
	}
...
}
                                        

api_code/checkLockAccount


<?php
require ("/guzzle/autoload.php");

use GuzzleHttp\Client;

class ... extends ...
{
	private $_client;
	public function __construct(){
		...
	}

	public function ...($id){
		// account_locked
		$respons	= $this->_client->request('GET','api_code/checkLockAccount',[
			'query' => ['id' => $id]
		]);

		$result 	= json_decode($respons->getBody()->getContents(),true);
		return $result['status'];
	}

	}
...
}
                                        

checkLockAccount berfungsi untuk memeriksa apakah periode fiskal yang anda pilih masih bisa digunakan atau sudah terkunci, {name_function} mengeluarkan output array :

['status'] = TRUE / FALSE
['message'] = isi pesan

api_code/ledgerapi


<?php
require ("/guzzle/autoload.php");

use GuzzleHttp\Client;

class ... extends ...
{
	private $_client;
	public function __construct(){
		...
	}

	public function getLedgerSettings($prefix){
		$respons 	= $this->_client->request('GET','api_code/ledgerapi',[
			'query' => [
				'dc' 	=> {value}, // opsional
				'cg' 	=> {value}, // opsional
				'rb' 	=> {value}, // wajib
				'prefix' => {value} // wajib
			]
		]);
		$result 	= json_decode($respons->getBody()->getContents(),true);
		return $result;
	}
...
}
                                            

ledgerapi berfungsi untuk mengambil data / list ledger di periode fiskal aktif, {name_function} mengeluarkan output array si ledger

api_code/generateEncrypt


<?php
require ("/guzzle/autoload.php");

use GuzzleHttp\Client;

class ... extends ...
{
	private $_client;
	public function __construct(){
		...
	}

// $data disini merupakan array yang berisi data yang akan
// dikirimkan ke cloud akuntansi
public function ...($data){
		$respons 	= $this->_client->request('GET','api_code/generateEncrypt',[
			'query' => [
				'serialize' => serialize($data)
			]
		]);
		$result 	= $respons->getBody()->getContents();
		return $result;
	}
...
}
                                            

generateEncrypt berfungsi untuk mengambil data yang sudah di serialize() lalu di generate kembali menggunakan json_encode()

api_code/getKodePeriodeFiskal


<?php
require ("/guzzle/autoload.php");

use GuzzleHttp\Client;

class ... extends ...
{
	private $_client;
	public function __construct(){
		...
	}

public function ...(){
		$respons 	= $this->_client->request('GET','api_code/getKodePeriodeFiskal',[
			'query' => [
				'username' => ''
			]
		]);
		$result 	= $respons->getBody()->getContents();
		return $result;
	}
...
}
                                        

getKodePeriodeFiskal berfungsi untuk menampilkan nama_prefix sebagai tujuan pengiriman data ke Periode Fiskal. namun tidak sembarang orang memiliki prefix.

Struktur pengiriman data

Perlu diketahui, bahwa setiap action CRUD memiliki struktur ARRAY yang berbeda antara POST, UPDATE & DELETE. ini akan mempermudah anda dalam mengirimkan data / mengintegerasikan data ke modules atau aplikasi anda.

Meskipun menggunakan POST, UPDATE & DELETE tetap saja pengiriman data menggunakan METHOD POST, yang menentukan apakah POST, UPDATE & DELETE ada di parameternya. Berikut Struktur kami tampilkan di bawah :

Struktur POST

 // ================= Struktur Data POST =================
 $array = [
   'prefix'    => "",
   'method'    => "_post",
   'data'      => [
       'date'          => "",
       'notes'         => "",
       'entryitems'    => [
               [
                   "ledger_code" => "",
                   "amount"    => "",
                   "dc"        => "D/C"
               ],
               [
                   "ledger_code" => "",
                   "amount"    => "",
                   "dc"        => "D/C"
               ],
               [
                   "ledger_code" => "",
                   "amount"    => "",
                   "dc"        => "D/C"
               ],
               [dst]
           ],
       'amount'        => "",
       'entrytype_id'  => ""   // Berisi Id di table {prefix}_entrytypes
       ]
 ]
                                        
Struktur UPDATE

 // ================= Struktur Data UPDATE =================
$array = [
   'prefix'    => "",
   'method'    => "_update",
   'data'      => [
       'id'            => "",  // (WAJIB) Id ini merupakan id table_entries
       'date'          => "",
       'notes'         => "",
       'entryitems'    => [
               [
                   "ledger_code" => "",
                   "amount"    => "",
                   "dc"        => "D/C"
               ],
               [
                   "ledger_code" => "",
                   "amount"    => "",
                   "dc"        => "D/C"
               ],
               [
                   "ledger_code" => "",
                   "amount"    => "",
                   "dc"        => "D/C"
               ],
               [dst]
           ],
       'amount'        => "",
       'entrytype_id'  => ""   // Berisi Id di table_entrytypes
       ]
]
                                        
Struktur DELETE

 // ================= Struktur Data DELETE =================
$array = [
  'prefix'    => "",
  'method'    => "_delete",
  'data'      => [ 'id' => "" ] // (WAJIB) Id ini merupakan id table_entries
]
                                        

Tutorial

Agar tidak membingungkan anda, sudah kami sediakan tutorial ini agar anda dapat memahaminya. Dengan syarat anda sudah terdaftar, bila belum silakan daftar di Daftar

Mengetahui Kode Periode Fiskal (wajib)


<?php
require_once('guzzle/autoload.php');

use GuzzleHttp\Client;

class tutor_ledger
{
	private $_client;
	function __construct()
	{
		$this->_client = new Client([
			'base_uri' => "https://cloud.neraca.id/"
		]);
	}
	
	public function getId($username){
		$respons 	= $this->_client->request('GET','api_code/getKodePeriodeFiskal',[
			'query' => [
				'username' => $username
			]
		]);
		$result 	= $respons->getBody()->getContents();
		return $result;
	}
}

	$tutor 		= new tutor_ledger();
	$resultId 	= $tutor->getId('your_username');
// "your_username" diambil dari username administratornya AKUNTANSI

	print_r($resultId);

/*
| Output yang dikeluarkan dalam bentuk JSON
|
| {
| "status"	: true,
| "message"	: "Data telah ditemukan",
| "data"		: [
| 		{
| 			"kode"	: "administrator1_",
| 			"label"	: "Akuntan_2019_11",
| 			"name"	: "NW Coorp"
| 		},
| 		{
| 			"kode"	: "administrator2_",
| 			"label"	: "Budgeting_2019_11",
| 			"name"	: "NW Coorp"
| 		}
| 	]
| }
*/
?>
                                        

Mengapa saya katakan wajib, karena ini akan menentukan Data anda dikirim ke Periode Fiskal yang mana

Mengambil list ledger


<?php
// pemanggilan ledger

require_once('guzzle/autoload.php');

use GuzzleHttp\Client;

class tutor_ledger
{
	private $_client;
	function __construct()
	{
		$this->_client = new Client([
			'base_uri' => "https://cloud.neraca.id/"
		]);
	}
	
	public function getId($username){
		$respons 	= $this->_client->request('GET','api_code/getKodePeriodeFiskal',[
			'query' => [
				'username' => $username
			]
		]);
		$result 	= $respons->getBody()->getContents();
		return $result;
	}

/*
| Yang wajib diisi paramnya yaitu = rb, prefix
| Yang opsional diisi paramnya yaitu = dc, cg
|
| =========== Set rb : restriction_bankcash ===========
|
| Khusus rb, terdapat 6 pilihan,
| disetiap nilainya memiliki arti tersendiri, yaitu :
|
| nilai 1 : Tidak dibatasi
| nilai 2 : Setidaknya satu Akun Kas atau Bank harus ada di sisi DEBIT
| nilai 3 : Setidaknya satu Akun Kas atau Bank harus ada di sisi KREEDIT
| nilai 4 : Hanya Akun Kas atau Bank yang boleh berada di sisi DEBIT dan KREDIT
| nilai 5 : Hanya Akun BUKAN kas atau Bank yang boleh berada di sisi DEBIT dan KREDIT
|
| =========== Set dc : Debit, Credit or NULL ===========
|
| Pada params dc terdapat 3 value
| nilai D : Khusus dengan ledger yang bertipe D
| nilai C : Khusus dengan ledger yang bertipe C
| nilai NULL : Params dc tidak ditampilkan (berarti menampilkan semuanya D / C)
|
| =========== Set cg : Code Group ===========
|
| nilai 01 : Harta
| nilai 02 : Hutang & Modal
| nilai 03 : Pendapatan
| nilai 04 : Beban
| nilai NULL : Params cg jangan ditampilkan (ALL)
*/

	public function ledger_list($prefix){
		$respons 	= $this->_client->request('GET','api_code/ledgerapi',[
			'query' => [
				'rb' 	=> 1, // wajib
				'prefix'=> $prefix // wajib
			]
		]);
		$result = json_decode($respons->getBody()->getContents(),true);
		return $result;
	}
}

	$tutor 		= new tutor_ledger();
	$resultId 	= $tutor->getId('your_username');
// "your_username" diambil dari username administratornya AKUNTANSI

	$decode 	= json_decode($resultId, true);

	$hasil 		= $tutor->ledger_list($decode['data'][0]['kode']);
?>

<select>
	<option value="">PILIH</option>
	<?php
	foreach ($hasil as $key => $value) { ?>
		<option value="<?= $key ?>" <?= ($key < 0) ? "disabled" : "" ?>><?= $value ?></option>
	<?php } ?>
</select>
                                        

Example Jurnal (POST)


<?php
require_once('guzzle/autoload.php');

use GuzzleHttp\Client;

class tutor_ledger
{
	private $_client;
	function __construct()
	{
		$this->_client = new Client([
			'base_uri' => "https://cloud.neraca.id/"
		]);
	}
	
	public function getId($username){
		$respons 	= $this->_client->request('GET','api_code/getKodePeriodeFiskal',[
			'query' => [
				'username' => $username
			]
		]);
		$result 	= $respons->getBody()->getContents();
		return $result;
	}

	public function sendData($kode){
		$sendApi = [
                    'prefix'    => $kode,
                    'method'    => "_post",
                    'data'      => [
                        'date'      => date('Y-m-d'),
                        'notes'     => "Your notes",
                        'entryitems'=> [
                                [
                                    "ledger_code" => "",
                                    "amount"    => 20000,
                                    "dc"        => 'D' // valuenya yaitu D/C = Debit/Credit
                                ],
                                [
                                    "ledger_code" => "",
                                    "amount"    => 40000,
                                    "dc"        => 'C'
                                ],
                                [
                                    "ledger_code" => "",
                                    "amount"    => 20000,
                                    "dc"        => 'D'
                                ]
                            ],
                        'amount'        => 40000, // Merupakan total dari penjumlahan amount diatas, pilih salah satu tipenya D atau C, disini saya mengambil tipe D (Debit), jadi 20000 + 20000 = 40000
                        'entrytype_id'  => 1 // merupakan Id pada entrytype
                        ]
                ];
            $sendResult     = $this->getResult($sendApi);
            $sendDataApi    = $this->crudDataApi($sendResult);
            return $sendDataApi;
	}

	protected function getResult($data){
		$respons 	= $this->_client->request('GET','api_code/generateEncrypt',[
			'query' => [
				'serialize' => serialize($data)
			]
		]);
		$result 	= $respons->getBody()->getContents();
		return $result;
	}

	protected function crudDataApi($data){
		$respons = $this->_client->request('POST','api_code',[
			'form_params' => ['data' => $data]
		]);

		$result = $respons->getBody()->getContents();
		return $result;
	}
}

	$tutor 		= new tutor_ledger();
	$resultId 	= $tutor->getId('Your_username');
// "your_username" diambil dari username administratornya AKUNTANSI

	$decode		= json_decode($resultId, true);
	// $decode['data'][0]['kode'] artinya ia mengambil kode pada array pertama
	$sendData 	= $tutor->sendData($decode['data'][0]['kode']);
	print_r($sendData);

/*
| Output yang dikeluarkan dalam bentuk JSON
| {
| "status": true,
| "message": "Data berhasil dibuat",
| "id_entries": 9, // id_entries ini dari hasil proses input tadi

| "data": {
| 	"date": "2019-11-05",
| 	"notes": "Your notes",
| 	"entryitems": [
| 		{
| 		"ledger_id": 1,
| 		"amount": 20000,
| 		"dc": "D"
| 		},
| 		{
| 		"ledger_id": 16,
| 		"amount": 40000,
| 		"dc": "C"
| 		},
| 		{
| 		"ledger_id": 1,
| 		"amount": 20000,
| 		"dc": "D"
| 		},
| 	],
| 	"amount": 40000,
| 	"entrytype_id": 1
| 	}
| }
*/
?>
                                        

Example Jurnal (UPDATE)


<?php
require_once('guzzle/autoload.php');

use GuzzleHttp\Client;

class tutor_ledger
{
	private $_client;
	function __construct()
	{
		$this->_client = new Client([
			'base_uri' => "https://cloud.neraca.id/"
		]);
	}
	
	public function getId($username){
		$respons 	= $this->_client->request('GET','api_code/getKodePeriodeFiskal',[
			'query' => [
				'username' => $username
			]
		]);
		$result 	= $respons->getBody()->getContents();
		return $result;
	}

	public function sendData($kode){
		$sendApi = [
                    'prefix'    => $kode,
                    'method'    => "_update",
                    'data'      => [
                    	'id'		=> 9, // id_entries merupakan hasil proses input tadi "Contoh Jurnal (POST)"
                        'date'      => date('Y-m-d'),
                        'notes'     => "Your notes Edited",
                        'entryitems'=> [
                                [
                                    "ledger_code" => "",
                                    "amount"    => 56000,
                                    "dc"        => 'C' // valuenya yaitu D/C = Debit/Credit
                                ],
                                [
                                    "ledger_code" => "",
                                    "amount"    => 56000,
                                    "dc"        => 'D'
                                ]
                            ],
                        'amount'        => 56000,
                        'entrytype_id'  => 1 // merupakan Id pada entrytype
                        ]
                ];
            $sendResult     = $this->getResult($sendApi);
            $sendDataApi    = $this->crudDataApi($sendResult);
            return $sendDataApi;
	}

	protected function getResult($data){
		$respons 	= $this->_client->request('GET','api_code/generateEncrypt',[
			'query' => [
				'serialize' => serialize($data)
			]
		]);
		$result 	= $respons->getBody()->getContents();
		return $result;
	}

	protected function crudDataApi($data){
		$respons = $this->_client->request('POST','api_code',[
			'form_params' => ['data' => $data]
		]);

		$result = $respons->getBody()->getContents();
		return $result;
	}
}

	$tutor 		= new tutor_ledger();
	$resultId 	= $tutor->getId('Your_username');
// "your_username" diambil dari username administratornya AKUNTANSI

	$decode		= json_decode($resultId, true);
	// $decode['data'][0]['kode'] artinya ia mengambil kode pada array pertama
	$tutor->sendData($decode['data'][0]['kode']);

/*
| tidak ada Output yang ditampilkan, namun Proses update berhasil
*/
?>
                                        

Example Jurnal (DELETE)


<?php
require_once('guzzle/autoload.php');

use GuzzleHttp\Client;

class tutor_ledger
{
	private $_client;
	function __construct()
	{
		$this->_client = new Client([
			'base_uri' => "https://cloud.neraca.id/"
		]);
	}
	
	public function getId($username){
		$respons 	= $this->_client->request('GET','api_code/getKodePeriodeFiskal',[
			'query' => [
				'username' => $username
			]
		]);
		$result 	= $respons->getBody()->getContents();
		return $result;
	}

	public function sendData($kode){
			$sendApi = [
                'prefix'    => $kode,
                'method'    => "_delete",
                'data'      => [ 'id' => 9 ] // merupakan data id_entries yang pernah dibuat sebelumnya, lihat pada 'Contoh Jurnal (POST)'
            ];
            $sendResult     = $this->getResult($sendApi);
            $sendDataApi    = $this->crudDataApi($sendResult);
            return $sendDataApi;
	}

	protected function getResult($data){
		$respons 	= $this->_client->request('GET','api_code/generateEncrypt',[
			'query' => [
				'serialize' => serialize($data)
			]
		]);
		$result 	= $respons->getBody()->getContents();
		return $result;
	}

	protected function crudDataApi($data){
		$respons = $this->_client->request('POST','api_code',[
			'form_params' => ['data' => $data]
		]);

		$result = $respons->getBody()->getContents();
		return $result;
	}
}

	$tutor 		= new tutor_ledger();
	$resultId 	= $tutor->getId('your_username');
// "your_username" diambil dari username administratornya AKUNTANSI

	$decode		= json_decode($resultId, true);
	// $decode['data'][0]['kode'] artinya ia mengambil kode pada array pertama
	$tutor->sendData($decode['data'][0]['kode']);

/*
| tidak ada Output yang ditampilkan, namun Proses delete berhasil
*/
?>