(in-package :cl-user) (defpackage chatikbot.plugins.ofd (:use :cl :chatikbot.common :alexandria)) (in-package :chatikbot.plugins.ofd) (defparameter +api-root+ "https://proverkacheka.nalog.ru:9999/v1/") (defmethod poller-request ((module (eql :ofd)) method &rest params) (handler-case (json-request (concatenate 'string +api-root+ method) :basic-auth *poller-token* :headers '((:device-id . "bot") (:device-os . "lisp")) :parameters (rest-parameters params t)) (dex:http-request-failed (e) e))) (defmethod poller-validate ((module (eql :ofd)) response) (not (typep response 'dex:http-request-failed))) (defmethod poller-get-token ((module (eql :ofd)) secret) (let* ((*poller-token* secret)) (ignore-errors (poller-request :ofd "mobile/users/login") *poller-token*))) (defun auth (user pass) (poller-authenticate :ofd (cons user pass))) (defun cheque-check (fn fd fp n date sum) (handler-case (let ((res (poller-call :ofd (format nil "ofds/*/inns/*/fss/~A/operations/~A/tickets/~A" fn n fd) :|fiscalSign| fp :|date| date :|sum| sum))) (typecase res (dex:http-request-not-acceptable nil) (t (error res)))) (end-of-file () t))) (defun cheque-get (fn fd fp) (handler-case (let ((res (poller-call :ofd (format nil "inns/*/kkts/*/fss/~A/tickets/~A" fn fd) :|fiscalSign| fp :|sendToEmail| "no"))) (typecase res (list (agets res "document" "receipt")) (dex:http-request-not-acceptable nil) (t res))) (end-of-file () nil)))