Bitrix-D7 23.9
 
Загрузка...
Поиск...
Не найдено
service.php
1<?php
2
4
5use Bitrix\Main\Entity\EntityError;
14use Bitrix\Sale;
23
24Loc::loadMessages(__FILE__);
25
31{
32 public const EVENT_ON_BEFORE_PAYMENT_PAID = 'OnSalePsServiceProcessRequestBeforePaid';
33 public const EVENT_ON_AFTER_PROCESS_REQUEST = 'OnSaleAfterPsServiceProcessRequest';
34
35 public const EVENT_BEFORE_ON_INITIATE_PAY = 'onSalePsBeforeInitiatePay';
36 public const EVENT_INITIATE_PAY_SUCCESS = 'onSalePsInitiatePaySuccess';
37 public const EVENT_INITIATE_PAY_ERROR = 'onSalePsInitiatePayError';
38
39 public const PAY_SYSTEM_PREFIX = 'PAYSYSTEM_';
40
42 private $handler = null;
43
45 private $fields = array();
46
48 protected $isClone = false;
49
51 protected $context;
52
59 public function __construct($fields)
60 {
61 [$className, $handlerType] = Manager::includeHandler($fields['ACTION_FILE']);
62
63 $this->fields = $fields;
64 $this->handler = new $className($handlerType, $this);
65
66 $this->context = new Context();
67 }
68
75 public function initiatePay(Payment $payment, Request $request = null, $mode = BaseServiceHandler::STREAM)
76 {
77 $onBeforeInitResult = $this->callEventOnBeforeInitiatePay($payment);
78 if (!$onBeforeInitResult->isSuccess())
79 {
80 $error = implode("\n", $onBeforeInitResult->getErrorMessages());
81 Logger::addError(get_class($this->handler) . '. OnBeforeInitiatePay: ' . $error);
82
83 $this->markPayment($payment, $onBeforeInitResult);
84
85 return $onBeforeInitResult;
86 }
87
88 $this->handler->setInitiateMode($mode);
89 $initResult = $this->handler->initiatePay($payment, $request);
90
91 $psData = $initResult->getPsData();
92 if ($psData)
93 {
94 $setResult = $payment->setFields($psData);
95 if ($setResult->isSuccess())
96 {
97 $order = $payment->getCollection()->getOrder();
98 if ($order)
99 {
100 $saveResult = $order->save();
101 if (!$saveResult->isSuccess())
102 {
103 $initResult->addErrors($saveResult->getErrors());
104 }
105 }
106 }
107 else
108 {
109 $initResult->addErrors($setResult->getErrors());
110 }
111 }
112
113 if ($initResult->isSuccess())
114 {
115 $this->callEventOnInitiatePaySuccess($payment);
116 }
117 else
118 {
119 $error = implode("\n", $initResult->getErrorMessages());
120 Logger::addError(get_class($this->handler) . '. InitiatePay: ' . $error);
121
122 $this->markPayment($payment, $onBeforeInitResult);
123
124 $this->callEventOnInitiatePayError($payment, $initResult);
125 }
126
127 return $initResult;
128 }
129
130 private function callEventOnBeforeInitiatePay(Payment $payment): ServiceResult
131 {
132 $result = new ServiceResult();
133
134 $event = new Event(
135 'sale',
136 self::EVENT_BEFORE_ON_INITIATE_PAY,
137 [
138 'payment' => $payment,
139 'service' => $this
140 ]
141 );
142
143 $event->send();
144
145 foreach($event->getResults() as $eventResult)
146 {
147 if ($eventResult->getType() === EventResult::ERROR)
148 {
149 $parameters = $eventResult->getParameters();
150 $error = $parameters['ERROR'] ?? null;
151
152 $result->addError(
153 $error instanceof Error
154 ? $error
155 : Sale\PaySystem\Error::create(
156 Loc::getMessage('SALE_PS_SERVICE_ERROR_ON_BEFORE_INITIATE_PAY')
157 )
158 );
159 }
160 }
161
162 return $result;
163 }
164
165 private function callEventOnInitiatePaySuccess(Payment $payment)
166 {
167 $event = new Event(
168 'sale',
169 self::EVENT_INITIATE_PAY_SUCCESS,
170 [
171 'payment' => $payment
172 ]
173 );
174
175 $event->send();
176 }
177
178 private function callEventOnInitiatePayError(Payment $payment, ServiceResult $result)
179 {
180 $event = new Event(
181 'sale',
182 self::EVENT_INITIATE_PAY_ERROR,
183 [
184 'payment' => $payment,
185 'errors' => $result->getErrorMessages(),
186 ]
187 );
188
189 $event->send();
190 }
194 public function isRefundable()
195 {
196 if ($this->handler instanceof IRefundExtended)
197 {
198 return $this->handler->isRefundableExtended();
199 }
200
201 return $this->handler instanceof IRefund;
202 }
203
211 public function refund(Payment $payment, $refundableSum = 0)
212 {
213 if ($this->isRefundable())
214 {
215 $result = new Result();
216
217 if (!$payment->isPaid())
218 {
219 $result->addError(new ResultError(Loc::getMessage('SALE_PS_SERVICE_PAYMENT_NOT_PAID')));
220 return $result;
221 }
222
223 if ($refundableSum == 0)
224 $refundableSum = $payment->getSum();
225
227 $result = $this->handler->refund($payment, $refundableSum);
228 if (!$result->isSuccess())
229 {
230 Logger::addError(get_class($this->handler).': refund: '.implode("\n", $result->getErrorMessages()));
231 }
232
233 return $result;
234 }
235
236 throw new SystemException();
237 }
238
250 public function processRequest(Request $request)
251 {
252 $processResult = new Result();
253
254 if (!($this->handler instanceof ServiceHandler))
255 {
256 return $processResult;
257 }
258
259 $debugInfo = http_build_query($request->toArray(), "", "\n");
260 if (empty($debugInfo))
261 {
262 $debugInfo = file_get_contents("php://input");
263 }
264 Logger::addDebugInfo(
265 get_class($this->handler)." ProcessRequest. paySystemId=".$this->getField("ID").", request=".($debugInfo ? $debugInfo : "empty")
266 );
267
268 $paymentId = $this->handler->getPaymentIdFromRequest($request);
269
270 if (empty($paymentId))
271 {
272 $processResult->addError(new Error(Loc::getMessage('SALE_PS_SERVICE_PAYMENT_ERROR_EMPTY')));
273
274 Logger::addError(
275 get_class($this->handler).'. ProcessRequest: '.Loc::getMessage('SALE_PS_SERVICE_PAYMENT_ERROR_EMPTY')
276 );
277
278 return $processResult;
279 }
280
281 [$orderId, $paymentId] = Manager::getIdsByPayment($paymentId, $this->getField('ENTITY_REGISTRY_TYPE'));
282
283 if (!$orderId)
284 {
285 $errorMessage = str_replace('#ORDER_ID#', $orderId, Loc::getMessage('SALE_PS_SERVICE_ORDER_ERROR'));
286 $processResult->addError(new Error($errorMessage));
287
288 Logger::addError(get_class($this->handler).'. ProcessRequest: '.$errorMessage);
289
290 return $processResult;
291 }
292
293 $registry = Registry::getInstance($this->getField('ENTITY_REGISTRY_TYPE'));
295 $orderClassName = $registry->getOrderClassName();
296
297 $order = $orderClassName::load($orderId);
298 if (!$order)
299 {
300 $errorMessage = str_replace('#ORDER_ID#', $orderId, Loc::getMessage('SALE_PS_SERVICE_ORDER_ERROR'));
301 $processResult->addError(new Error($errorMessage));
302
303 Logger::addError(get_class($this->handler).'. ProcessRequest: '.$errorMessage);
304
305 return $processResult;
306 }
307
308 if ($order->isCanceled())
309 {
310 $errorMessage = str_replace('#ORDER_ID#', $orderId, Loc::getMessage('SALE_PS_SERVICE_ORDER_CANCELED'));
311 $processResult->addError(new Error($errorMessage));
312
313 Logger::addError(get_class($this->handler).'. ProcessRequest: '.$errorMessage);
314
315 return $processResult;
316 }
317
319 $collection = $order->getPaymentCollection();
320
322 $payment = $collection->getItemById($paymentId);
323
324 if (!$payment)
325 {
326 $errorMessage = str_replace('#PAYMENT_ID#', $paymentId, Loc::getMessage('SALE_PS_SERVICE_PAYMENT_ERROR'));
327 $processResult->addError(new Error($errorMessage));
328
329 Logger::addError(get_class($this->handler).'. ProcessRequest: '.$errorMessage);
330
331 return $processResult;
332 }
333
335 $serviceResult = $this->handler->processRequest($payment, $request);
336 if ($serviceResult->isSuccess())
337 {
338 $status = null;
339 $operationType = $serviceResult->getOperationType();
340
341 if ($operationType === ServiceResult::MONEY_COMING)
342 {
343 $status = 'Y';
344 }
345 else if ($operationType === ServiceResult::MONEY_LEAVING)
346 {
347 $status = 'N';
348 }
349
350 if ($status !== null)
351 {
352 $event = new Event('sale', self::EVENT_ON_BEFORE_PAYMENT_PAID,
353 array(
354 'payment' => $payment,
355 'status' => $status,
356 'pay_system_id' => $this->getField('ID')
357 )
358 );
359 $event->send();
360
361 if ($status === 'N')
362 {
363 $payment->setFieldsNoDemand([
364 'IS_RETURN' => Payment::RETURN_PS,
365 'PAY_RETURN_DATE' => new Date(),
366 ]);
367 }
368
369 $paidResult = $payment->setPaid($status);
370 if (!$paidResult->isSuccess())
371 {
372 $error = 'PAYMENT SET PAID: '.join(' ', $paidResult->getErrorMessages());
373 Logger::addError(get_class($this->handler).'. ProcessRequest: '.$error);
374
375 $serviceResult->setResultApplied(false);
376 }
377 }
378
379 $psData = $serviceResult->getPsData();
380 if ($psData)
381 {
382 $res = $payment->setFields($psData);
383 if (!$res->isSuccess())
384 {
385 $error = 'PAYMENT SET PAID: '.join(' ', $res->getErrorMessages());
386 Logger::addError(get_class($this->handler).'. ProcessRequest: '.$error);
387
388 $serviceResult->setResultApplied(false);
389 }
390 }
391
392 $saveResult = $order->save();
393
394 if (!$saveResult->isSuccess())
395 {
396 $error = 'ORDER SAVE: '.join(' ', $saveResult->getErrorMessages());
397 Logger::addError(get_class($this->handler).'. ProcessRequest: '.$error);
398
399 $serviceResult->setResultApplied(false);
400 }
401
402 PullManager::onSuccessfulPayment($payment);
403 }
404 else
405 {
406 $serviceResult->setResultApplied(false);
407 $processResult->addErrors($serviceResult->getErrors());
408
409 $error = implode("\n", $serviceResult->getErrorMessages());
410 Logger::addError(get_class($this->handler).'. ProcessRequest Error: '.$error);
411
412 $this->markPayment($payment, $serviceResult);
413
414 PullManager::onFailurePayment($payment);
415 }
416
417 $event = new Event(
418 'sale',
419 self::EVENT_ON_AFTER_PROCESS_REQUEST,
420 [
421 'payment' => $payment,
422 'serviceResult' => $serviceResult,
423 'request' => $request,
424 ]
425 );
426 $event->send();
427
428 $this->handler->sendResponse($serviceResult, $request);
429
430 return $processResult;
431 }
432
436 public function getConsumerName()
437 {
438 $id = $this->fields['ID'] ?? 0;
439
440 return static::PAY_SYSTEM_PREFIX.$id;
441 }
442
446 public function getHandlerDescription()
447 {
448 return $this->handler->getDescription();
449 }
450
454 public function isBlockable()
455 {
456 return $this->handler instanceof IHold || $this->handler instanceof IPartialHold;
457 }
458
464 public function cancel(Payment $payment)
465 {
466 if ($this->isBlockable())
467 {
468 return $this->handler->cancel($payment);
469 }
470
471 throw new SystemException(Loc::getMessage('SALE_PS_SERVICE_ERROR_HOLD_IS_NOT_SUPPORTED'));
472 }
473
480 public function confirm(Payment $payment, $sum = 0)
481 {
482 if ($this->isBlockable())
483 {
484 if ($this->handler instanceof IPartialHold)
485 {
486 return $this->handler->confirm($payment, $sum);
487 }
488 else if ($sum > 0)
489 {
490 throw new SystemException(Loc::getMessage('SALE_PS_SERVICE_ERROR_PARTIAL_CONFIRM_IS_NOT_SUPPORTED'));
491 }
492
493 return $this->handler->confirm($payment);
494 }
495
496 throw new SystemException(Loc::getMessage('SALE_PS_SERVICE_ERROR_HOLD_IS_NOT_SUPPORTED'));
497 }
498
503 public function getField($name)
504 {
505 return $this->fields[$name] ?? null;
506 }
507
511 public function getCurrency()
512 {
513 return $this->handler->getCurrencyList();
514 }
515
521 public function getClientTypeFromHandler()
522 {
523 return $this->handler->getClientType(
524 $this->fields['PS_MODE'] ?? null
525 );
526 }
527
533 public function getClientType()
534 {
535 return (string)($this->fields['PS_CLIENT_TYPE'] ?? $this->getClientTypeFromHandler());
536 }
537
541 public function isCash()
542 {
543 return $this->fields['IS_CASH'] === 'Y';
544 }
545
549 public function canPrintCheck(): bool
550 {
551 return $this->fields['CAN_PRINT_CHECK'] === 'Y';
552 }
553
558 public function canPrintCheckSelf(Payment $payment): bool
559 {
560 $service = $payment->getPaySystem();
561 if (!$service || !$this->isSupportPrintCheck() || !$this->canPrintCheck())
562 {
563 return false;
564 }
565
567 $cashboxClass = $this->getCashboxClass();
568 $kkm = $cashboxClass::getKkmValue($service);
569
570 return (bool)Cashbox\Manager::getList([
571 'select' => ['ID'],
572 'filter' => [
573 '=ACTIVE' => 'Y',
574 '=HANDLER' => $cashboxClass,
575 '=KKM_ID' => $kkm,
576 ],
577 ])->fetch();
578 }
579
584 public function creditNoDemand(Payment $payment)
585 {
586 return $this->handler->creditNoDemand($payment);
587 }
588
593 public function debitNoDemand(Payment $payment)
594 {
595 return $this->handler->debitNoDemand($payment);
596 }
597
601 public function isPayable()
602 {
603 if ($this->handler instanceof IPayable)
604 return true;
605
606 if (method_exists($this->handler, 'isPayableCompatibility'))
607 return $this->handler->isPayableCompatibility();
608
609 return false;
610 }
611
615 public function isAffordPdf()
616 {
617 return $this->handler instanceof IPdf;
618 }
619
624 {
625 return $this->handler instanceof IDocumentGeneratePdf;
626 }
627
633 public function getPdfContent(Payment $payment)
634 {
635 if ($this->isAffordPdf())
636 {
637 return $this->handler->getContent($payment);
638 }
639
640 throw new NotSupportedException('Handler is not implemented interface '.IPdf::class);
641 }
642
648 public function getPdf(Payment $payment)
649 {
650 if ($this->isAffordPdf())
651 {
652 return $this->handler->getFile($payment);
653 }
654
655 throw new NotSupportedException('Handler is not implemented interface '.IPdf::class);
656 }
657
664 public function registerCallbackOnGenerate(Payment $payment, $params)
665 {
666 if ($this->isAffordDocumentGeneratePdf())
667 {
668 return $this->handler->registerCallbackOnGenerate($payment, $params);
669 }
670
671 throw new NotSupportedException('Handler is not implemented interface '.IDocumentGeneratePdf::class);
672 }
673
679 public function isPdfGenerated(Payment $payment)
680 {
681 if ($this->isAffordPdf())
682 {
683 return $this->handler->isGenerated($payment);
684 }
685
686 throw new NotSupportedException('Handler is not implemented interface '.IPdf::class);
687 }
688
693 public function getPaymentPrice(Payment $payment)
694 {
695 if ($this->isPayable())
696 return $this->handler->getPrice($payment);
697
698 return 0;
699 }
700
704 public function setTemplateParams(array $params)
705 {
706 $this->handler->setExtraParams($params);
707 }
708
714 public function showTemplate(Payment $payment = null, $templateName)
715 {
716 return $this->handler->showTemplate($payment, $templateName);
717 }
718
722 public function isPrePayable()
723 {
724 return $this->handler instanceof IPrePayable;
725 }
726
732 public function initPrePayment(Payment $payment = null, Request $request)
733 {
734 if ($this->isPrePayable())
735 return $this->handler->initPrePayment($payment, $request);
736
737 throw new NotSupportedException;
738 }
739
744 public function getPrePaymentProps()
745 {
746 if ($this->isPrePayable())
747 return $this->handler->getProps();
748
749 throw new NotSupportedException;
750 }
751
757 public function basketButtonAction(array $orderData = array())
758 {
759 if ($this->isPrePayable())
760 return $this->handler->basketButtonAction($orderData);
761
762 throw new NotSupportedException;
763 }
764
770 public function setOrderDataForPrePayment($orderData = array())
771 {
772 if ($this->isPrePayable())
773 return $this->handler->setOrderConfig($orderData);
774
775 throw new NotSupportedException;
776 }
777
783 public function payOrderByPrePayment($orderData)
784 {
785 if ($this->isPrePayable())
786 return $this->handler->payOrder($orderData);
787
788 throw new NotSupportedException;
789 }
790
794 public function getFieldsValues()
795 {
796 return $this->fields;
797 }
798
802 public function isAllowEditPayment()
803 {
804 return $this->fields['ALLOW_EDIT_PAYMENT'] == 'Y';
805 }
806
810 public function isCheckable()
811 {
812 if ($this->handler instanceof ICheckable)
813 return true;
814
815 if (method_exists($this->handler, 'isCheckableCompatibility'))
816 return $this->handler->isCheckableCompatibility();
817
818 return false;
819 }
820
825 public function check(Payment $payment)
826 {
827 $result = new ServiceResult();
828
829 if ($this->isCheckable())
830 {
832 $paymentCollection = $payment->getCollection();
833
835 $order = $paymentCollection->getOrder();
836
837 if (!$order->isCanceled())
838 {
840 $checkResult = $this->handler->check($payment);
841 if ($checkResult instanceof ServiceResult && $checkResult->isSuccess())
842 {
843 $psData = $checkResult->getPsData();
844 if ($psData)
845 {
846 $res = $payment->setFields($psData);
847 if (!$res->isSuccess())
848 $result->addErrors($res->getErrors());
849 }
850
851 if ($checkResult->getOperationType() == ServiceResult::MONEY_COMING)
852 {
853 $res = $payment->setPaid('Y');
854 if (!$res->isSuccess())
855 $result->addErrors($res->getErrors());
856 }
857
858 $res = $order->save();
859 if (!$res->isSuccess())
860 $result->addErrors($res->getErrors());
861 }
862 elseif (!$checkResult)
863 {
864 $result->addError(new Error(Loc::getMessage('SALE_PS_SERVICE_ERROR_CONNECT_PS')));
865 }
866 }
867 else
868 {
869 $result->addError(new EntityError(Loc::getMessage('SALE_PS_SERVICE_ORDER_CANCELED', array('#ORDER_ID#' => $order->getId()))));
870 }
871 }
872
873 return $result;
874 }
875
881 public function createClone(\SplObjectStorage $cloneEntity)
882 {
883 if ($this->isClone() && $cloneEntity->contains($this))
884 {
885 return $cloneEntity[$this];
886 }
887
888 $paySystemServiceClone = clone $this;
889 $paySystemServiceClone->isClone = true;
890
891 if (!$cloneEntity->contains($this))
892 {
893 $cloneEntity[$this] = $paySystemServiceClone;
894 }
895
896 if ($handler = $this->handler)
897 {
898 if (!$cloneEntity->contains($handler))
899 {
900 $cloneEntity[$handler] = $handler->createClone($cloneEntity);
901 }
902
903 if ($cloneEntity->contains($handler))
904 {
905 $paySystemServiceClone->handler = $cloneEntity[$handler];
906 }
907 }
908
909 return $paySystemServiceClone;
910 }
911
915 public function isClone()
916 {
917 return $this->isClone;
918 }
919
923 public function isCustom()
924 {
925 return in_array($this->handler->getHandlerType(), array('CUSTOM', 'USER'));
926 }
927
932 public function getParamsBusValue(Payment $payment)
933 {
934 return $this->handler->getParamsBusValue($payment);
935 }
936
940 public function isTuned()
941 {
942 return $this->handler->isTuned();
943 }
944
948 public function getDemoParams()
949 {
950 return $this->handler->getDemoParams();
951 }
952
956 public function setTemplateMode($mode)
957 {
958 $this->handler->setInitiateMode($mode);
959 }
960
964 public function getContext(): Context
965 {
966 return $this->context;
967 }
968
973 public function isRecurring(Payment $payment): bool
974 {
975 return $this->handler instanceof IRecurring
976 && $this->handler->isRecurring($payment);
977 }
978
984 public function repeatRecurrent(Payment $payment, Request $request = null): ServiceResult
985 {
986 $result = new ServiceResult();
987
988 if ($this->isRecurring($payment))
989 {
990 return $this->handler->repeatRecurrent($payment, $request);
991 }
992
993 return $result;
994 }
995
1001 public function cancelRecurrent(Payment $payment, Request $request = null): ServiceResult
1002 {
1003 $result = new ServiceResult();
1004
1005 if ($this->isRecurring($payment))
1006 {
1007 return $this->handler->cancelRecurrent($payment, $request);
1008 }
1009
1010 return $result;
1011 }
1012
1018 public function isSupportPrintCheck(): bool
1019 {
1020 return $this->handler instanceof Sale\PaySystem\Cashbox\ISupportPrintCheck;
1021 }
1022
1029 public function getCashboxClass(): string
1030 {
1031 if ($this->isSupportPrintCheck())
1032 {
1033 $cashboxClassName = $this->handler::getCashboxClass();
1034 if (!Cashbox\Manager::isPaySystemCashbox($cashboxClassName))
1035 {
1036 throw new NotSupportedException(
1037 'Cashbox is not extended class '.Cashbox\CashboxPaySystem::class
1038 );
1039 }
1040
1041 return $cashboxClassName;
1042 }
1043
1044 throw new NotSupportedException(
1045 'Handler is not implemented interface '.Sale\PaySystem\Cashbox\ISupportPrintCheck::class
1046 );
1047 }
1048
1054 public function isFiscalizationAware(): bool
1055 {
1056 return $this->handler instanceof Sale\PaySystem\Cashbox\IFiscalizationAware;
1057 }
1058
1066 public function isFiscalizationEnabled(Payment $payment): ?bool
1067 {
1068 if ($this->isFiscalizationAware())
1069 {
1070 return $this->handler->isFiscalizationEnabled($payment);
1071 }
1072
1073 throw new NotSupportedException(
1074 'Handler does not implement interface '.Sale\PaySystem\Cashbox\IFiscalizationAware::class
1075 );
1076 }
1077
1079 {
1080 if ($this->handler instanceof Sale\Services\PaySystem\Restrictions\RestrictableServiceHandler)
1081 {
1082 return $this->handler->getRestrictionList();
1083 }
1084
1085 return (new RestrictionInfoCollection());
1086 }
1087
1088 public function getServiceId(): int
1089 {
1090 return (int)($this->getField('ID') ?? 0);
1091 }
1092
1093 private function markPayment(Payment $payment, ServiceResult $serviceResult): void
1094 {
1095 (new PaymentMarker($this, $payment))
1096 ->mark($serviceResult)
1097 ->save()
1098 ;
1099 }
1100}
static loadMessages($file)
Definition loc.php:64
static getMessage($code, $replace=null, $language=null)
Definition loc.php:29
debitNoDemand(Payment $payment)
Definition service.php:593
confirm(Payment $payment, $sum=0)
Definition service.php:480
createClone(\SplObjectStorage $cloneEntity)
Definition service.php:881
isFiscalizationEnabled(Payment $payment)
Definition service.php:1066
getPdf(Payment $payment)
Definition service.php:648
registerCallbackOnGenerate(Payment $payment, $params)
Definition service.php:664
isPdfGenerated(Payment $payment)
Definition service.php:679
cancel(Payment $payment)
Definition service.php:464
initiatePay(Payment $payment, Request $request=null, $mode=BaseServiceHandler::STREAM)
Definition service.php:75
getParamsBusValue(Payment $payment)
Definition service.php:932
repeatRecurrent(Payment $payment, Request $request=null)
Definition service.php:984
basketButtonAction(array $orderData=array())
Definition service.php:757
setOrderDataForPrePayment($orderData=array())
Definition service.php:770
cancelRecurrent(Payment $payment, Request $request=null)
Definition service.php:1001
setTemplateParams(array $params)
Definition service.php:704
isRecurring(Payment $payment)
Definition service.php:973
initPrePayment(Payment $payment=null, Request $request)
Definition service.php:732
getPaymentPrice(Payment $payment)
Definition service.php:693
showTemplate(Payment $payment=null, $templateName)
Definition service.php:714
creditNoDemand(Payment $payment)
Definition service.php:584
getPdfContent(Payment $payment)
Definition service.php:633