-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathSoapUtils.php
More file actions
131 lines (114 loc) · 4.51 KB
/
Copy pathSoapUtils.php
File metadata and controls
131 lines (114 loc) · 4.51 KB
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
130
131
<?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;
}
}
?>