-
Notifications
You must be signed in to change notification settings - Fork 3
/
SoapUtils.php
129 lines (113 loc) · 4.51 KB
/
SoapUtils.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
<?php
/**
* A WebShop PHP kliens által használt utility osztály
* a kliens oldali SOAP kommunkációhoz, PHP5 környezetben.
*
* @version 4.0
*/
class SoapUtils {
/**
* @desc A banki felülethez illeszkedõ SOAP kliens létrehozása.
* A kliensen beállított socket_timeout 660 másodperc azért,
* hogy a háromszereplõs fizetésekhez kapcsolódó kommunikációs szálak
* se szakadjanak meg.
*
* @param array $properties kapcsolódási paraméterek (javasolt
* a otp_webshop_client.conf fájl teljes tartalma)
*
* @return SoapClient A banki felülethez illeszkedõ SOAP kliens.
*/
public static function createSoapClient() {
$soapClientProps = array(
'location' => 'https://www.otpbankdirekt.hu/mwaccesspublic/mwaccess',
'uri' => 'https://www.otpbankdirekt.hu/mwaccesspublic/mwaccess',
'trace' => true,
'exceptions' => 1,
'connection_timeout' => 10,
'default_socket_timeout' => 660,
'proxy_host' => null,
'proxy_port' => null,
'proxy_login' => null,
'proxy_password' => null
);
return new SoapClient(NULL, $soapClientProps);
}
/**
* @desc A banki felület Ping szolgáltatásának meghívása.
*
* @param SoapClient $soapClient SOAP kliens
* @param LoggerManager $logger log4php naplózó
* @return boolean true sikeres ping-etés esetén, egyébként false.
*/
function ping($soapClient) {
$result = false;
try {
$soapClient->__soapCall(
"ping", array(), array('soapaction' => "urn:ping"));
$result = true;
}
catch (Exception $e) {
$logger->fatal("Hiba a banki felulet elereseben [ping]: "
. $e->getMessage()
. "\n" . $e->getTraceAsString()
. "\nSOAP valasz:\n" . $soapClient->__getLastResponse());
}
return $result;
}
/**
* Tranzakció indítása.
* Ha a Bank túlterhelés miatt elutasítja a kérést, automatikus
* újraküldés történik maximum RESENDCOUNT darabszámban,
* RESENDDELAY ezredmásodperces késleltetéssel.
*
* @param SoapClient $soapClient SOAP kliens
* @param LoggerManager $logger log4php naplózó
*
* @return boolean true sikeres ping-etés esetén, egyébként false.
*/
public static function startWorkflowSynch($workflowName, $inputXml, $soapClient) {
$workflowState = NULL;
$retryCount = 0;
$resendAllowed = true;
/* A háromszereplõs fizetési tranzakció esetén
a process futási ideje a 10 percet is meghaladhatja
(10 perc a fizetési timeout, további pár másodperc
a kommunikációs overhead) */
if ($workflowName == WF_HAROMSZEREPLOSFIZETES) {
ini_set('max_execution_time','660');
}
do {
try {
$workflowState = $soapClient->__soapCall(
"startWorkflowSynch",
array(
new SoapParam(new SoapVar($workflowName, XSD_STRING), "arg0"),
new SoapParam(new SoapVar($inputXml, XSD_STRING), "arg1")),
array('soapaction' => "urn:startWorkflowSynch"));
$resendAllowed = false;
}
catch (SoapFault $sf) {
$logger->fatal("Hiba a banki felület elérésében [" . $workflowName . "]: "
. $sf->getMessage()
. "\n" . $sf->getTraceAsString()
. "\nSOAP valasz:\n" . $soapClient->__getLastResponse());
$resendAllowed = false;
if ($retryCount < RESENDCOUNT) {
if (stristr($sf->getMessage(), RESEND_ERRORPATTERN) !== false) {
// Pillanatnyi túlterhelés miatti visszautasítás a banki oldalon
$resendAllowed = true;
sleep(RESENDDELAY);
}
}
}
catch (Exception $e) {
$logger->fatal("Hiba a banki felület elérésében [" . $workflowName . "]: "
. $e->getMessage()
. "\n" . $e->getTraceAsString()
. "\nSOAP valasz:\n" . $soapClient->__getLastResponse());
$resendAllowed = false;
}
} while ($resendAllowed && $retryCount++ < RESENDCOUNT);
return $workflowState;
}
}