Perpustakaan PHP untuk berkomunikasi dengan laba AFAS secara praktis, menggunakan sabun atau istirahat.
Ini adalah kode perpustakaan, untuk digunakan oleh kode Anda sendiri/proyek lain. Siapa pun yang membaca ini, seharusnya sudah memiliki gagasan tentang apa yang ingin mereka capai dan apa AFA itu, jadi kami tidak akan mengatasinya di sini. (http://www.afas.nl/ - dokumentasi mereka saat ini adalah di https://static-kb.afas.nl/datafiles/help/2_9_7/se/en/index.htm meskipun url itu tidak diragukan lagi akan berubah.)
Kode ini dibentuk melalui tiga prinsip:
Prinsip pertama (dan ketiga) berarti kode yang dapat dimengerti lebih disukai daripada ekstensibilitas tahan masa depan yang menciptakan kelas terpisah untuk setiap hal kecil dan memperkenalkan banyak kode pelat boiler. Itu berarti kode yang dikomentari dengan baik. Dan itu berarti tidak ada perilaku yang tidak terduga / tidak berdokumen. (Validasi argumen input, dan hasil yang diterima dari sistem jarak jauh, mencakup situasi yang tidak terduga untuk programmer, dan melempar pengecualian yang terdokumentasi.)
Yang mengatakan: Prinsip kedua / ketiga, ditambah fungsionalitas AFAS yang berkembang ditambah pertimbangan kompatibilitas mundur, telah membuat koneksi :: getData () argumen tidak logis dalam beberapa aspek. Tetapi kodenya masih cukup mudah dibaca (karena tidak ada banyak metode yang berbeda) dan mudah dipanggil untuk kasus penggunaan 'sederhana'.
Versi 2 perpustakaan berfungsi dengan php5 (5.4 dan atas) dan php7.
Kelas Klien untuk Istirahat dan SOAP Gunakan ekstensi standar CURL + JSON dan SOAP + SIMPLEXML PHP; Jika ini tidak berhasil untuk Anda, PR dengan klien baru / yang dimodifikasi dipersilakan.
Pengujian otomatis dilakukan pada Php5.6, 7.1 dan 7.2 untuk kelas UpdateConnector. (Saat ini saya tidak mempertimbangkan kelas klien yang membutuhkan tes. Mungkin ada beberapa tes ringan untuk koneksi di masa depan tetapi tidak ada dalam daftar saya.)
Meskipun PHP5.6 tidak didukung secara resmi lagi, perpustakaan ini akan tetap kompatibel dengannya sampai ada alasan nyata untuk memperkenalkan konstruksi bahasa hanya Php7.
Ada beberapa bagian dari perpustakaan ini yang tidak semuanya ditambah dengan erat:
Kelas klien dapat digunakan mandiri untuk melakukan panggilan ke konektor AFAS. Anda harus mengetahui parameter persis yang diharapkan AFAS untuk istirahat atau API SOAP mereka; Ada klien untuk keduanya. Jika Anda ingin menjaga hal -hal yang dekat dengan struktur AFAS sendiri, klien istirahat tampaknya paling cocok. Gunakan RestCurlClient (lihat contoh di bawah) dan lupakan kelas lain. Yang perlu Anda ketahui adalah ada satu metode publik, callafas (), yang mengembalikan string (json) dengan hasil panggilan yang berhasil, atau melempar pengecualian.
Kelas koneksi membungkus di sekitar klien SOAP atau istirahat dan abstrak beberapa parameter yang tidak mudah ditangani. Gunakan jika Anda misalnya
UpdateObject (plus kelas anak) dapat digunakan untuk membuat muatan XML atau JSON untuk konektor pembaruan, dan memvalidasi isinya. Output mereka adalah string, yang dapat digunakan dengan cara apa pun yang Anda inginkan (misalnya mengirim data string melalui kelas klien, atau melalui koneksi :: sendData (), atau gunakan updateObjects dengan kode khusus Anda sendiri).
Ada juga kelas pembantu dengan beberapa metode statis ekstra yang dapat berguna untuk beberapa programmer, tetapi yang saya tidak ingin membebani klien / koneksi. ;
Pertama -tama kita akan membahas klien dan memberikan contoh panggilan untuk tujuan perbandingan dengan koneksi. Anda dapat melewatkan ini, kecuali Anda ingin tahu tentang perbedaannya.
Ini dapat digunakan mandiri untuk membuat panggilan sabun / istirahat untuk keuntungan AFAS, jika Anda tahu struktur panggilan. Kelas klien hanya berurusan dengan:
Pengaturan koneksi dan otentikasi diteruskan ke konstruktor; bukan untuk panggilan AFA setiap individu.
Anda hanya akan menggunakan satu metode publik: callafas (). (Ada metode publik kedua: static getClientType () - tetapi ini tidak diperlukan untuk penggunaan mandiri.) Kelas klien membuat (hampir) tidak ada asumsi tentang panggilan API jarak jauh; Metode dan argumen jarak jauh (jenis) yang tepat perlu diteruskan ke sana, dan itu akan mengembalikan tubuh hasil sebagai string.
Opsi yang diperlukan ada di konstruktor di bawah ini; Lihat kode untuk opsi lain.
use PracticalAfas Client RestCurlClient ;
$ client = new RestCurlClient ( [ ' customerId ' => 12345 , ' appToken ' => ' 64CHARS ' ] );
$ result_as_json_string = $ client -> callAfas (
' GET ' ,
' connectors/MyGetConnectorName ' ,
[ ' take ' => 1000 ,
' filterfieldids ' => ' SomeCategory,Updated ' ,
' filtervalues ' => ' CategName,2017-01-01T16:00:00 ' ,
' operatortypes ' => ' 1,4 ' ,
' orderbyfieldids ' => ' -Updated '
]
);
$ attachment = $ client -> callAfas ( ' GET ' , ' subjectconnector/123 ' );
// This is inserting a new organisation with only its name filled:
$ client ->callAfas( ' POST ' , ' connectors/KnOrganisation ' , [], ' {"KnOrganisation":{"Element":{ "Fields":{"MatchOga":0,"Nm":MyCompany Ltd."}}}} ' Di bawah ini (hampir) setara dengan contoh istirahat di atas (kecuali mengembalikan string XML alih -alih string JSON). Perhatikan bahwa ini bukan kelas php 'soapclient'; Ini pembungkus di sekitar sabun.
use PracticalAfas Client SoapAppClient ;
$ client = new SoapAppClient ( [ ' customerId ' => 12345 , ' appToken ' => ' 64CHARS ' ] );
$ result_as_xml_string = $ client -> callAfas (
' get ' ,
' GetDataWithOptions ' ,
[ ' connectorId ' => ' MyGetConnectorName ' ,
' take ' => 1000 ,
' filtersXml ' => ' <Filters><Filter><Field FieldId="SomeCategory" OperatorType="1">CategName</Field>
<Field FieldId="Updated" OperatorType="4">2017-01-01T16:00:00</Field></Filter></Filters> ' ,
' options ' => ' <options><Index><Field FieldId="Updated" OperatorType="0"/></Index>
<Outputoptions>3</Outputoptions><Outputmode>1</Outputmode><Metadata>0</Metadata></options> ' ,
]
);
$ attachment = $ client -> callAfas ( ' subject ' , ' GetAttachment ' , [ ' subjectID ' => 123 ] );
$ client ->callAfas( ' update ' , ' Execute ' , [ ' connectorType ' => ' KnOrganisation ' , ' dataXml => ' <KnOrganisation xmlns:xsi="http: //www.w3.org/2001/XMLSchema-instance"><Element><Fields Action="insert"><MatchOga>0</MatchOga><Nm>MyCompany Ltd.</Nm></Fields></Element></KnOrganisation>' ] );Koneksi membungkus klien dan abstrak semua validasi argumen / pemrosesan data yang tidak spesifik klien. Ini memiliki sintaksnya sendiri untuk filter. Ini memiliki dua metode penting: sendData () yang membungkus konektor pembaruan AFAS, dan getData () yang membungkus semua konektor lainnya. (Semua metode lain adalah getter dan setter yang mungkin tidak pernah Anda butuhkan.)
Yang setara dengan contoh di atas adalah:
use PracticalAfas Connection ;
use PracticalAfas Client RestCurlClient ;
$ client = new RestCurlClient ( [ ' customerId ' => 12345 , ' appToken ' => ' 64CHARS ' ] );
$ connection = new Connection ( $ client );
// A (more common) example for a Get connector with simple filter, returning an
// array of rows:
$ result_as_array = $ connection -> getData ( ' MyGetConnectorName ' , [ ' SomeCategory ' => ' CategName ' ] );
// The equivalent of above:
$ result_as_string = $ connection -> getData (
' MyGetConnectorName ' ,
[ ' SomeCategory ' => ' CategName ' ,
[ ' Updated ' => ' 2017-01-01T16:00:00 ' , ' #op ' => Connection:: OP_LARGER_THAN ],
],
Connection:: GET_FILTER_AND ,
[ ' take => 1000,
' orderbyfieldids' => ' -Updated ' ,
' options ' => [ ' Outputmode ' => Connection:: GET_OUTPUTMODE_LITERAL ]
]
);
$ attachment = $ connection -> getData ( 123 , [], Connection:: DATA_TYPE_SUBJECT );
$ connection -> sendData ([ ' name ' => ' MyCompany Ltd. ' ], ' KnOrganisation ' , ' insert ' );... jadi jika opsi 'OutputMode' tidak disediakan, getData () mengembalikan array baris data sebagai gantinya (yaitu string XML/JSON akan diterjemahkan untuk Anda).
Dapatkan Konektor
Update Connectors / UpdateObject Class
Petunjuk untuk pengembang
Saya suka menyumbangkan perangkat lunak open source untuk dunia dan saya suka membuka sistem underdosed yang tidak didokumentasikan. (Yang merupakan kasus dengan AFAS pada tahun 2012, tetapi sudah menjadi lebih baik.) Beri saya teriakan jika ini berguna atau jika Anda memiliki kontribusi. Hubungi saya jika Anda membutuhkan pekerjaan integrasi yang dilakukan. (Saya memiliki pengalaman dengan beberapa sistem lain.)
Perpustakaan ini dilisensikan di bawah lisensi MIT - lihat file lisensi.md untuk detailnya.
Tip Hat untuk Philip Vergunst & Nathan Vergunst -Kolozsvári @ Sumber Anda - Memproduksi versi pertama dari kode PHP yang setidaknya bertukar data yang benar, pasti tidak mudah.
Berteriak ke Yellowgrape, para profesional dalam strategi / pemasaran / desain e-commerce. Sementara saya menghasilkan perangkat lunak ini di waktu saya sendiri yang belum dibayar, saya tidak akan memiliki pengalaman AFAS tanpa mereka.