Commit 54736aa1 authored by Σταύρος Παπαδάκης's avatar Σταύρος Παπαδάκης

Merge branch 'barebone' into 'master'

Barebone PHP client and sample command line php application

See merge request !2
parents 3b2d3832 db5f1404
Βιβλιοθήκη και πρόγραμμα κατανάλωσης
====================================
# Οδηγίες
Αντιγράψτε το αρχείο `settings.php.dist` σε ένα νέο αρχείο `settings.php` και
τροποποιήστε αναλόγως, για παράδειγμα εισάγοντας το όνομα χρήστη που σας έχει
αποδοθεί.
# Πρόγραμμα επίδειξης
Για την επίδειξη των διαθέσιμων λειτουργιών έχει αναπτυχθεί πρόγραμμα
[index.php](index.php) που μπορείτε να εκτελέσετε από τη γραμμή εντολών.
Το πρόγραμμα δέχεται τις παρακάτω παραμέτρους:
```
Χρήση: index.php [-v] [--list] [--listshow] [-i|-o] [--send <file>] [--attach <file>] [--show <hashid>] [--get <hashid>] [--save <hashid>]
v: παραγωγή μηνυμάτων παρακολούθησης εκτέλεσης
list: λίστα hashids των εγγράφων (των τελευταίων 5 ημερών)
listshow: λίστα αρχείων (των τελευταίων 5 ημερών)
i: να συμπεριληφθούν μόνο τα εισερχόμενα στη λίστα αρχείων
ο: να συμπεριληφθούν μόνο τα εξερχόμενα στη λίστα αρχείων
send <file>: καταχώρηση πρωτοκόλλου με αποστολή του αρχείου file
attach <file>: επισύναψη αρχείου στην καταχώρηση (πολλαπλό)
show <hash>: αναλυτικές πληροφορίες αρχείου με δεδομένο hashid
get <hash>: λήψη αρχείου με δεδομένο hashid
save <hash>: λήψη και αποθήκευση αρχείου με δεδομένο hashid
στον τρέχοντα φάκελο και με το όνομα αρχείου που επιστρέφεται
```
Το πρόγραμμα χρησιμοποιεί τη δοκιμαστική βιβλιοθήκη επίδειξης που αποτελείται
από δύο τμήματα [Gr\Gov\Minedu\Osteam\App](src/App.php) και
[Gr\Gov\Minedu\Osteam\Client](src/Client.php)
# Βιβλιοθήκη
>>>
Η δοκιμαστική βιβλιοθήκη επίδειξης περιλαμβάνει παραδείγματα αξιοποίησης όλων
των REST API κλήσεων του [minedu OpenApi της ΠΑΠΥΡΟΣ](https://git.minedu.gov.gr/itminedu/minedu-OpenApi-PapyrosDrivers)
σε καμία περίπτωση όμως δεν αποτελεί πλήρως λειτουργική βιβλιοθήκη ή πλήρως
λειτουργική εφαρμογή.
>>>
## Gr\Gov\Minedu\Osteam\App
Η κλάση [Gr\Gov\Minedu\Osteam\App](src/App.php) παρέχει μεθόδους διευκόλυνσης
για τον προγραμματιστή ώστε να μπορεί εύκολα να καταναλώσει λειτουργίες που
αφορούν την πρωτοκόλληση εγγράφων. Οι βασικές λειτουργίες είναι:
* getApiKey()
* searchDocuments($sender_id = null, $date_from = null, $date_to = null, $doc_type = null, $apikey = null)
* getDocData($hashid, $apikey = null)
* postProtocol($submission_data, $apikey = null)
* getPdf($hashid, $apikey = null)
* savePdf($hashid, $apikey = null)
**Τεκμηρίωση παρέχεται εντός του [Gr\Gov\Minedu\Osteam\App](src/App.php)**
## Gr\Gov\Minedu\Osteam\Client
Η κλάση [Gr\Gov\Minedu\Osteam\Client](src/Client.php) καταναλώνει λειτουργίες του
[minedu OpenApi της ΠΑΠΥΡΟΣ](https://git.minedu.gov.gr/itminedu/minedu-OpenApi-PapyrosDrivers)
αξιοποιώντας τη βιβλιοθήκη CURL. Παρέχει μεθόδους αφαίρεσης για κατανάλωση των
λειτουργιών που αφορούν την πρωτοκόλληση εγγράφων καθώς και βασικές μεθόδους
κλήσης GET, PUT, POST. Οι βασικές λειτουργίες είναι:
* pauth($payload)
* searchDocuments($payload, $apikey)
* getDocData($hashid, $apikey)
* getPdf($hashid, $apikey)
* postProtocol($payload, $apikey)
* _put($uri, $payload, $headers = [])_
* _post($uri, $payload, $headers = [])_
* _get($uri, $params = [], $headers = [])_
## Παραδείγματα κλήσης
### Πρωτοκόλληση εγγράφου
**Με συνημμένο αρχείο**
```sh
$ php index.php --send /tmp/test-file2.pdf --attach /tmp/test-file.pdf
Ανάκτηση API key...
Το API key είναι: eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiIxMDAwMDAwIn0.-5lgafnO-ACRSchNQQhUpx8RfuZnGQtvF9-eIl9EJsY
Αποστολή εγγράφου...
Έλεγχος για το αρχείο /tmp/test-file2.pdf... OK
Έλεγχος για το συνημμένο αρχείο /tmp/test-file.pdf... OK
Η αποστολή ολοκληρώθηκε με ΑΡ.Π.: 180042
Αναλυτικά: Array
(
[docId] => rSOTUDYNkHWBDktlAP31Hg%3D%3D
[protocolYear] => 2016
[protocolDate] => 23/12/2016
[protocolNumber] => 180042
[attachments] => Array
(
[0] => Array
(
[docId] => 7Kv7cp7J5fQRXyw7R1mEGQ%3D%3D
[description] =>
)
)
)
Done.
```
### Λίστα εγγράφων
```sh
$ php index.php --list
Ανάκτηση API key...
Το API key είναι: eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiIxMDAwMDAwIn0.h_vUGpeFjhajdlMFAwZVTnuNPwVXxHfc6ehWnpLHvik
Ανάκτηση λίστας εγγράφων...
Λίστα εγγράφων:
Bl5BEZPKGztl2lcmtEWMgQ%3D%3D
r%2BhOqWinF8U%2FPKM6RDn45g%3D%3D
ai2nYtQPsm5iWacd1NEEYw%3D%3D
69t%2FYlgsEJjQMiWkPUFpFQ%3D%3D
XJL2Whs6%2FBsu6ObQ%2FpeMlw%3D%3D
QiQ8VaRYeItETkqP%2FKjTVQ%3D%3D
ELTKEUX%2B0FLyivlIm%2Bm0uw%3D%3D
OrDAz8L9tF0AGSGutQ0Hxw%3D%3D
lmyplemnNoaMR0W6TU0uqg%3D%3D
%2F%2FvoXi7pZMVHdFvVlTTLGQ%3D%3D
GHotM8CWL%2FvGPjabwzHhqg%3D%3D
NU6CEaLymbOjqzla1iSuyQ%3D%3D
22UMz%2B55qhqJhy2AL0Ihtg%3D%3D
vhX1LPAxgI8VTHpXrXzNIQ%3D%3D
tbAP3jdzbrj%2BtB9prn1s2w%3D%3D
1Lph6VjgxqRjVhiyMNNgTg%3D%3D
L3Wwrt54uCCyAqoCN51enA%3D%3D
HN9eLwiPjsKncOxfWsFlKw%3D%3D
RLjZIIroC0WTWARa8iPxjw%3D%3D
IFFnDJWBuWhtpQhvlzPyMQ%3D%3D
K7ga1NQ2wONXb3364Q9Elg%3D%3D
OblOuYKCQEdnwH1PFBstxA%3D%3D
rSOTUDYNkHWBDktlAP31Hg%3D%3D
Done.
```
**Παράδειγμα με verbose output**
```sh
$ php index.php --list -v
Ανάκτηση API key...
getApiKey :: payload: {"username":"test","password":"123456"}
* Trying 195.251.16.162...
* Connected to protocoltest.minedu.gov.gr (195.251.16.162) port 443 (#0)
* ALPN, offering http/1.1
* Cipher selection: ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH
* successfully set certificate verify locations:
* CAfile: /etc/ssl/certs/ca-certificates.crt
CApath: /etc/ssl/certs
* SSL connection using TLSv1.2 / ECDHE-RSA-AES256-GCM-SHA384
* ALPN, server did not agree to a protocol
* Server certificate:
* subject: C=GR; ST=Athens; L=Maroussi; O=Greek Ministry of Education; OU=IT; CN=protocoltest.minedu.gov.gr
* start date: Aug 5 00:00:00 2016 GMT
* expire date: Aug 14 12:00:00 2019 GMT
* subjectAltName: protocoltest.minedu.gov.gr matched
* issuer: C=NL; ST=Noord-Holland; L=Amsterdam; O=TERENA; CN=TERENA SSL CA 3
* SSL certificate verify ok.
> PUT /openpapyros/api/pauthenticate/pauth HTTP/1.1
Host: protocoltest.minedu.gov.gr
User-Agent: OSTEAM barebone php client
Content-Type: application/json
Accept: application/json
Content-Length: 39
* upload completely sent off: 39 out of 39 bytes
< HTTP/1.1 200 OK
< Date: Fri, 23 Dec 2016 10:33:51 GMT
< Server: Apache
< X-Powered-By: Modus/Undertow/1
< Content-Type: application/json
< Content-Length: 101
< Vary: Accept-Encoding
<
* Connection #0 to host protocoltest.minedu.gov.gr left intact
Το API key είναι: eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiIxMDAwMDAwIn0.X6fRd7StTnSIq11S7IpjaMSTP3540ypEfXV6sJRWujk
Ανάκτηση λίστας εγγράφων...
searchDocuments :: payload: {"senderId":100000001,"docType":null,"startDate":"2016-12-18T00:00:00+02:00","endDate":"2016-12-23T12:33:52+02:00"}
* Hostname protocoltest.minedu.gov.gr was found in DNS cache
* Trying 195.251.16.162...
* Connected to protocoltest.minedu.gov.gr (195.251.16.162) port 443 (#0)
* ALPN, offering http/1.1
* Cipher selection: ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH
* successfully set certificate verify locations:
* CAfile: /etc/ssl/certs/ca-certificates.crt
CApath: /etc/ssl/certs
* SSL connection using TLSv1.2 / ECDHE-RSA-AES256-GCM-SHA384
* ALPN, server did not agree to a protocol
* Server certificate:
* subject: C=GR; ST=Athens; L=Maroussi; O=Greek Ministry of Education; OU=IT; CN=protocoltest.minedu.gov.gr
* start date: Aug 5 00:00:00 2016 GMT
* expire date: Aug 14 12:00:00 2019 GMT
* subjectAltName: protocoltest.minedu.gov.gr matched
* issuer: C=NL; ST=Noord-Holland; L=Amsterdam; O=TERENA; CN=TERENA SSL CA 3
* SSL certificate verify ok.
> POST /openpapyros/api/search/documents HTTP/1.1
Host: protocoltest.minedu.gov.gr
User-Agent: OSTEAM barebone php client
api_key: eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiIxMDAwMDAwIn0.X6fRd7StTnSIq11S7IpjaMSTP3540ypEfXV6sJRWujk
Content-Type: application/json
Accept: application/json
Content-Length: 115
* upload completely sent off: 115 out of 115 bytes
< HTTP/1.1 200 OK
< Date: Fri, 23 Dec 2016 10:33:52 GMT
< Server: Apache
< X-Powered-By: Modus/Undertow/1
< Content-Type: application/json
< Content-Length: 740
< Vary: Accept-Encoding
<
* Connection #0 to host protocoltest.minedu.gov.gr left intact
Λίστα εγγράφων:
Bl5BEZPKGztl2lcmtEWMgQ%3D%3D
r%2BhOqWinF8U%2FPKM6RDn45g%3D%3D
ai2nYtQPsm5iWacd1NEEYw%3D%3D
69t%2FYlgsEJjQMiWkPUFpFQ%3D%3D
XJL2Whs6%2FBsu6ObQ%2FpeMlw%3D%3D
QiQ8VaRYeItETkqP%2FKjTVQ%3D%3D
ELTKEUX%2B0FLyivlIm%2Bm0uw%3D%3D
OrDAz8L9tF0AGSGutQ0Hxw%3D%3D
lmyplemnNoaMR0W6TU0uqg%3D%3D
%2F%2FvoXi7pZMVHdFvVlTTLGQ%3D%3D
GHotM8CWL%2FvGPjabwzHhqg%3D%3D
NU6CEaLymbOjqzla1iSuyQ%3D%3D
22UMz%2B55qhqJhy2AL0Ihtg%3D%3D
vhX1LPAxgI8VTHpXrXzNIQ%3D%3D
tbAP3jdzbrj%2BtB9prn1s2w%3D%3D
1Lph6VjgxqRjVhiyMNNgTg%3D%3D
L3Wwrt54uCCyAqoCN51enA%3D%3D
HN9eLwiPjsKncOxfWsFlKw%3D%3D
RLjZIIroC0WTWARa8iPxjw%3D%3D
IFFnDJWBuWhtpQhvlzPyMQ%3D%3D
K7ga1NQ2wONXb3364Q9Elg%3D%3D
OblOuYKCQEdnwH1PFBstxA%3D%3D
rSOTUDYNkHWBDktlAP31Hg%3D%3D
Done.
```
### Λεπτομέρειες πρωτοκόλλου
```sh
$ php index.php --show "rSOTUDYNkHWBDktlAP31Hg%3D%3D"
Ανάκτηση API key...
Το API key είναι: eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiIxMDAwMDAwIn0.UD9kmeoxUiytUiKBuq6ckeRkwlGoBmwLETlpNdtbX7Q
Λεπτομέρειες εγγράφου:
Array
(
[id] => rSOTUDYNkHWBDktlAP31Hg%3D%3D
[protocolNumber] => 180042
[protocolDate] => 23/12/2016
[docType] => 7
[sender] => 100000001
[senderProtocol] =>
[senderDateProtocol] =>
[docCategory] => 20
[theme] => ΔΟΚΙΜΗ: Αυτοματοποιημένο κείμενο της 2016-12-23T12:27:06+02:00
[ada] =>
[attachedDocsDescr] => ΔΟΚΙΜΗ: Αυτοματοποιημένο κείμενο περιγραφής 20161223121227
[director] => ΔΟΚΙΜΗ: Αυτοματοποιημένο κείμενο περιγραφής 20161223121227
[attachedId] => Array
(
[0] => 7Kv7cp7J5fQRXyw7R1mEGQ%3D%3D
)
)
Done.
```
### Πληροφορίες αρχείου
```sh
$ php index.php --get "rSOTUDYNkHWBDktlAP31Hg%3D%3D"
Ανάκτηση API key...
Το API key είναι: eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiIxMDAwMDAwIn0.S70EW5ruMkAzxg4QaY0izZj0xSF_jeRrTvMiOf7DC10
Λεπτομέρειες εγγράφου:
Array
(
[document] => Array
(
[base64] => go=
)
[fileName] => test-file2.pdf
[description] => ΕΙΣ - 180042 - 2016
)
Done.
```
### Λήψη αρχείου
```sh
$ php index.php --save "7Kv7cp7J5fQRXyw7R1mEGQ%3D%3D"
Ανάκτηση API key...
Το API key είναι: eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiIxMDAwMDAwIn0.WLTS9UxlPDZw-1WsjWush7HXzYWRjazJMEYR8Q58mjo
Λεπτομέρειες αποθήκευσης εγγράφου:
Array
(
[file_name] => test-file.pdf
[description] => ΔΟΚΙΜΗ: Αποστολή συνημμένου δοκιμαστικού αρχείου /tmp/test-file.pdf
[save] => Αποθηκεύτηκε
)
Done.
```
<?php
// barebone app - autoload classes from src/ dir
spl_autoload_register(function ($class_name) {
$class_name_parts = explode('\\', $class_name);
$class_filename = __DIR__ . '/src/' . end($class_name_parts) . '.php';
if (file_exists($class_filename)) {
include $class_filename;
if (class_exists($class_name)) {
return true;
}
}
return false;
});
use Gr\Gov\Minedu\Osteam\App;
$settings = require(__DIR__ . '/settings.php');
/**
* Λήψη παραμέτρων καθορισμού λειτουργίας από τη γραμμή εντολών
* v = verbose output
* i = incoming file type
* o = outgoing file type
*/
$options = getopt('vio', ['send:', 'list', 'listshow', 'show:', 'get:', 'save:', 'attach:']);
$send = isset($options['send']);
$attach = $send && isset($options['attach']);
$list = isset($options['list']) || isset($options['listshow']);
$listdetails = isset($options['listshow']);
$show = isset($options['show']);
$get = isset($options['get']) || isset($options['save']);
$save = isset($options['save']);
$incoming_only = isset($options['i']);
$outgoing_only = isset($options['o']);
if ($attach) {
$files = $options['attach'];
if (!is_array($files)) {
$files = [$files];
}
} else {
$files = [];
}
/**
* Αρχικοποίηση εφαρμογής
*/
$app = new App($settings);
$app->setDebug(isset($options['v']));
/**
* Έλεγχος παραμέτρων
*/
if (!$send && !$list && !$show && !$get) {
echo "Χρήση: {$argv[0]} [-v] [--list] [--listshow] [-i|-o] [--send <file>] [--attach <file>] [--show <hashid>] [--get <hashid>] [--save <hashid>]", PHP_EOL,
" v: παραγωγή μηνυμάτων παρακολούθησης εκτέλεσης", PHP_EOL,
" list: λίστα hashids των εγγράφων (των τελευταίων 5 ημερών)", PHP_EOL,
" listshow: λίστα αρχείων (των τελευταίων 5 ημερών)", PHP_EOL,
" i: να συμπεριληφθούν μόνο τα εισερχόμενα στη λίστα αρχείων", PHP_EOL,
" ο: να συμπεριληφθούν μόνο τα εξερχόμενα στη λίστα αρχείων", PHP_EOL,
" send <file>: καταχώρηση πρωτοκόλλου με αποστολή του αρχείου file", PHP_EOL,
"attach <file>: επισύναψη αρχείου στην καταχώρηση (πολλαπλό)", PHP_EOL,
" show <hash>: αναλυτικές πληροφορίες αρχείου με δεδομένο hashid", PHP_EOL,
" get <hash>: λήψη αρχείου με δεδομένο hashid", PHP_EOL,
" save <hash>: λήψη και αποθήκευση αρχείου με δεδομένο hashid", PHP_EOL,
" στον τρέχοντα φάκελο και με το όνομα αρχείου που επιστρέφεται", PHP_EOL,
exit(0);
}
/**
* If any work is to be done, an api key is required
*/
echo "Ανάκτηση API key...", PHP_EOL;
try {
$apikey = $app->getApiKey();
echo "Το API key είναι: ", $apikey, PHP_EOL;
} catch (\Exception $e) {
echo 'ΛΑΘΟΣ: Αδυναμία ανάκτησης API key. ', PHP_EOL, $e->getMessage(), PHP_EOL;
exit(-1);
}
/**
* Αποστολή αρχείου για πρωτοκόλληση
*/
if ($send) {
echo "Αποστολή εγγράφου...", PHP_EOL;
echo "Έλεγχος για το αρχείο {$options['send']}... ";
if ($app->loadFile($options['send'])) {
echo "OK", PHP_EOL;
} else {
echo PHP_EOL, "ΛΑΘΟΣ: Το αρχείο δεν είναι αναγνώσιμο.", PHP_EOL;
exit(-1);
}
if ($attach) {
foreach ($files as $filename) {
echo "Έλεγχος για το συνημμένο αρχείο {$filename}... ";
if ($app->loadFile($filename)) {
echo "OK", PHP_EOL;
} else {
echo PHP_EOL, "ΛΑΘΟΣ: Το αρχείο δεν είναι αναγνώσιμο.", PHP_EOL;
exit(-1);
}
}
}
try {
// καθορισμός παραμέτρων σε πίνακα για απλοποίηση
// το παράδειγμα δεν περιλαμβάνει συνημμένα αρχεία
// και ορισμένες επιπλέον παραμέτρους
// senderId, senderProtocol, senderProtocolDate, ada
$submission_data = [
'theme' => 'ΔΟΚΙΜΗ: Αυτοματοποιημένο κείμενο της ' . date('c'),
'description' => 'ΔΟΚΙΜΗ: Αυτοματοποιημένο κείμενο περιγραφής ' . date('Ymdhmi'),
'docCategory' => 20,
];
// προσθήκη κυρίως αρχείου
$submission_data['mainDoc'] = [
'document' => $options['send'],
// document: μπορεί να είναι
// string = αναφορά σε αρχείο που έχει ήδη φορτωθεί με την $app->loadFile()
// array = associative array me key "base64" και value το base64 encoding του περιεχομένου του αρχείου
'fileName' => $options['send'],
'description' => "ΔΟΚΙΜΗ: Αποστολή δοκιμαστικού αρχείου {$options['send']}"
];
// προσθήκη συνημμένων
if ($attach) {
$submission_data['attachedDoc'] = [];
foreach ($files as $filename) {
$submission_data['attachedDoc'][] = [
'document' => $filename,
// document: μπορεί να είναι
// string = αναφορά σε αρχείο που έχει ήδη φορτωθεί με την $app->loadFile()
// array = associative array me key "base64" και value το base64 encoding του περιεχομένου του αρχείου
'fileName' => $filename,
'description' => "ΔΟΚΙΜΗ: Αποστολή συνημμένου δοκιμαστικού αρχείου {$filename}"
];
}
}
$doc_info = $app->postProtocol($submission_data, $apikey);
echo "Η αποστολή ολοκληρώθηκε με ΑΡ.Π.: ", $doc_info["protocolNumber"], PHP_EOL;
echo "Αναλυτικά: ", print_r($doc_info, true), PHP_EOL;
} catch (\Exception $e) {
echo 'ΛΑΘΟΣ: Αδυναμία αποστολής εγγράφου. ', PHP_EOL, $e->getMessage(), PHP_EOL;
exit(1);
}
}
/**
* Λειτουργία λήψης λίστας των καταχωρημένων πρωτοκόλλων.
* Εάν έχει ζητηθεί επιστρέφονται και οι αναλυτικές πληροφορίες των εγγράφων.
*/
if ($list) {
echo "Ανάκτηση λίστας εγγράφων...", PHP_EOL;
try {
$now = date(DATE_W3C);
$fivedaysbefore = date(DATE_W3C, mktime(0, 0, 0, date("m"), date("d") - 5, date("Y")));
$doc_type = ($incoming_only ? App::DOCUMENT_INCOMING : null);
$doc_type = ($incoming_only ? App::DOCUMENT_OUTGOING : $doc_type);
$doc_hash_ids = $app->searchDocuments(null, $fivedaysbefore, $now, $doc_type, $apikey);
if ($listdetails) {
$doc_details = array_map(function ($hashid) use ($app, $apikey) {
try {
$details = $app->getDocData($hashid, $apikey);
} catch (Exception $ex) {
return [
'id' => $hashid,
'error' => $ex->getCode()
];
}
return $details;
}, $doc_hash_ids);
echo "Λεπτομέρειες εγγράφων: ", PHP_EOL, print_r($doc_details, true), PHP_EOL;
} else {
echo "Λίστα εγγράφων: ", PHP_EOL, implode(PHP_EOL, $doc_hash_ids), PHP_EOL;
}
} catch (\Exception $e) {
echo 'ΛΑΘΟΣ: Αδυναμία ανάκτησης λίστας εγγράφων. ', PHP_EOL, $e->getMessage(), PHP_EOL;
exit(1);
}
}
/**
* Λειτουργία ανάκτησης πληροφοριών αρχείου με δεδομένο hash id $options['show']
*/
if ($show) {
try {
$doc_details = $app->getDocData($options['show'], $apikey);
echo "Λεπτομέρειες εγγράφου: ", PHP_EOL, print_r($doc_details, true), PHP_EOL;
} catch (\Exception $e) {
echo 'ΛΑΘΟΣ: Αδυναμία ανάκτησης λεπτομερειών εγγράφων. ', PHP_EOL, $e->getMessage(), PHP_EOL;
exit(1);
}
}
/**
* Λειτουργία λήψης αρχείου με δεδομένο hash id $options['save'] ή $options['get']
*/
if ($get) {
if ($save) {
$doc_details = $app->savePdf($options['save'], $apikey);
echo "Λεπτομέρειες αποθήκευσης εγγράφου: ", PHP_EOL, print_r($doc_details, true), PHP_EOL;
} else {
$doc_details = $app->getPdf($options['get'], $apikey);
echo "Λεπτομέρειες εγγράφου: ", PHP_EOL, print_r($doc_details, true), PHP_EOL;
}
}
echo "Done.", PHP_EOL;
exit(0);
<?php
return [
// username and password to authenticate
'username' => 'test',
'password' => '123456',
// sender id for test lookups
'sender_id' => 100000001
];
<?php
//
namespace Gr\Gov\Minedu\Osteam;
use Gr\Gov\Minedu\Osteam\Client;
/**
* Description of app
*
* @author spapad
*/
class App
{
// Εισερχόμενο
const DOCUMENT_INCOMING = 1;
// Εξερχόμενο
const DOCUMENT_OUTGOING = 2;
private $client = null;
private $_settings = [];
private $_debug = false;
private $_files = [];
/**
*
* @param array $settings is an array of configuration parameters
*/
function __construct($settings = [])
{
$this->_settings = array_merge($this->_settings, $settings);
$this->client = new Client();
}
protected function setting($name)
{
return (isset($this->_settings["$name"]) ?
$this->_settings["$name"] :
null);
}
/**
* Λήψη κλειδιού πιστοποίησης.
*
* @return string The api key
* @throws \Exception
*/
public function getApiKey()
{
$payload = json_encode([
'username' => $this->setting('username'),
'password' => $this->setting('password')
]);
if ($this->_debug) {
echo "getApiKey :: payload: {$payload}", PHP_EOL;
}
$response = json_decode($this->client->pauth($payload));
return $response->apiKey;
}
/**
* Αναζήτηση εγγράφων.
*
* @param int $sender_id Κωδικός αποστολέα, π.χ. 10000001
* Η προκαθορισμένη τιμή του senderId προέρχεται από τα settings
* @param date $date_from Ημερομηνία αναζήτησης - Από
* @param date $date_to Ημερομηνία αναζήτησης - Έως
* @param int $doc_type Δείτε App::DOCUMENT_INCOMING, App::DOCUMENT_OUTGOING
* @param type $apikey Κλειδί αυθεντικόποίησης
* @return string[] Πίνακας με hashids
* @throws \Exception
*/
public function searchDocuments($sender_id = null, $date_from = null, $date_to = null, $doc_type = null, $apikey = null)
{
$payload = json_encode([
'senderId' => $sender_id === null ? $this->setting('sender_id') : null,
'docType' => $doc_type,
'startDate' => $date_from,
'endDate' => $date_to
]
);
if ($this->_debug) {
echo "searchDocuments :: payload: {$payload}", PHP_EOL;
}
$response = json_decode($this->client->searchDocuments($payload, $apikey === null ? $this->getApiKey() : $apikey));
return $response;
}
/**
* Ανάκτηση πληροφοριών εγγράφου.
*
* @param type $hashid Το μοναδικό hashid του εγγράφου
* @param type $apikey Κλειδί αυθεντικόποίησης
* @return string[]
* @throws \Exception
*/
public function getDocData($hashid, $apikey = null)
{
if ($this->_debug) {
echo "getDocData:: hash id: {$hashid}", PHP_EOL;
}
$response = json_decode($this->client->getDocData($hashid, $apikey === null ? $this->getApiKey() : $apikey), true);
return $response;
}
public function postProtocol($submission_data, $apikey = null)