SOAP / XML - koppeling
Voor het voltooien van maandelijkse eenmalige machtigingen werk ik met Buckaroo. Buckaroo geeft de mogelijkheid om batches door te sturen met informatie over de transacties die voltooid moeten worden via een SOAP / XML - koppeling. Ik krijg echter geen connectie met de server van Buckaroo en vroeg me af of jullie me hiermee kunnen helpen.
Het volgende script (ik heb het even in 1 bestand gepropt) zou moeten zorgen voor de verzending:
Code (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
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
<?php
class Transaction {
// Send GET/POST data through sockets
function postToHost($data, $timeout = 30)
{
$fsp = fsockopen('payment.buckaroo.nl');
$res = '';
if($fsp)
{
// echo "\n\nSEND DATA: \n\n" . $data . "\n\n";
fputs($fsp, 'POST /soap/soap.asmx HTTP/1.1' . $this->CRLF);
fputs($fsp, 'Host: payment.buckaroo.nl' . $this->CRLF);
fputs($fsp, 'Content-Type: text/xml; charset=utf-8' . $this->CRLF);
fputs($fsp, 'Content-Length: ' . strlen($data) . $this->CRLF);
fputs($fsp, 'SOAPAction: "https://payment.buckaroo.nl/EenmaligeMachtiging"' . $this->CRLF . $this->CRLF);
fputs($fsp, $data, strlen($data));
while(!feof($fsp))
{
$res .= @fgets($fsp, 128);
}
fclose($fsp);
// echo "\n\nRECIEVED DATA: \n\n" . $res . "\n\n";
}
else
{
$this->setError('Error while connecting to Buckaroo', false, __FILE__, __LINE__);
}
return $res;
}
protected function setError($sDesc, $sCode = false, $sFile = 0, $sLine = 0)
{
$this->aErrors[] = array('desc' => $sDesc, 'code' => $sCode, 'file' => $sFile, 'line' => $sLine);
}
public function getErrors()
{
return $this->aErrors;
}
public function hasErrors()
{
return (sizeof($this->aErrors) ? true : false);
}
}
$data='<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<EenmaligeMachtiging xmlns="https://payment.buckaroo.nl/">
<XMLMessage>
<Payload VersionID="1.0" xmlns="">
<Control Test="1">
<Timestamp>2011-07-06 12:10:53</Timestamp>
<MerchantID>1</MerchantID>
</Control>
<Content>
<Transaction Id="1">
<Customer>
<Gender>1</Gender>
<Firstname>Test</Firstname>
<Lastname>Test</Lastname>
<Mail>[email protected]</Mail>
</Customer>
<AccountNumber>123456789</AccountNumber>
<AccountName>Test</AccountName>
<Amount Currency="EUR">1</Amount>
<CollectDate>2011-08-01</CollectDate>
<CollectType>recurring</CollectType>
<Invoice>11080000001</Invoice>
<Reference></Reference>
<Description>Abbonnement 08/11</Description>
</Transaction>
</Content>
</Payload>
</XMLMessage>
<XMLSignature>
<Signature xmlns="">
<Fingerprint>1</Fingerprint>
<DigestMethod>MD5</DigestMethod>
<CalculateMethod>111</CalculateMethod>
<SignatureValue>1</SignatureValue>
</Signature>
</XMLSignature>
</EenmaligeMachtiging>
</soap:Body>
</soap:Envelope>';
$transaction = new Transaction;
echo $transaction->postToHost($data);
if($transaction->hasErrors()){
print_r($transaction->getErrors());
}
?>
class Transaction {
// Send GET/POST data through sockets
function postToHost($data, $timeout = 30)
{
$fsp = fsockopen('payment.buckaroo.nl');
$res = '';
if($fsp)
{
// echo "\n\nSEND DATA: \n\n" . $data . "\n\n";
fputs($fsp, 'POST /soap/soap.asmx HTTP/1.1' . $this->CRLF);
fputs($fsp, 'Host: payment.buckaroo.nl' . $this->CRLF);
fputs($fsp, 'Content-Type: text/xml; charset=utf-8' . $this->CRLF);
fputs($fsp, 'Content-Length: ' . strlen($data) . $this->CRLF);
fputs($fsp, 'SOAPAction: "https://payment.buckaroo.nl/EenmaligeMachtiging"' . $this->CRLF . $this->CRLF);
fputs($fsp, $data, strlen($data));
while(!feof($fsp))
{
$res .= @fgets($fsp, 128);
}
fclose($fsp);
// echo "\n\nRECIEVED DATA: \n\n" . $res . "\n\n";
}
else
{
$this->setError('Error while connecting to Buckaroo', false, __FILE__, __LINE__);
}
return $res;
}
protected function setError($sDesc, $sCode = false, $sFile = 0, $sLine = 0)
{
$this->aErrors[] = array('desc' => $sDesc, 'code' => $sCode, 'file' => $sFile, 'line' => $sLine);
}
public function getErrors()
{
return $this->aErrors;
}
public function hasErrors()
{
return (sizeof($this->aErrors) ? true : false);
}
}
$data='<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<EenmaligeMachtiging xmlns="https://payment.buckaroo.nl/">
<XMLMessage>
<Payload VersionID="1.0" xmlns="">
<Control Test="1">
<Timestamp>2011-07-06 12:10:53</Timestamp>
<MerchantID>1</MerchantID>
</Control>
<Content>
<Transaction Id="1">
<Customer>
<Gender>1</Gender>
<Firstname>Test</Firstname>
<Lastname>Test</Lastname>
<Mail>[email protected]</Mail>
</Customer>
<AccountNumber>123456789</AccountNumber>
<AccountName>Test</AccountName>
<Amount Currency="EUR">1</Amount>
<CollectDate>2011-08-01</CollectDate>
<CollectType>recurring</CollectType>
<Invoice>11080000001</Invoice>
<Reference></Reference>
<Description>Abbonnement 08/11</Description>
</Transaction>
</Content>
</Payload>
</XMLMessage>
<XMLSignature>
<Signature xmlns="">
<Fingerprint>1</Fingerprint>
<DigestMethod>MD5</DigestMethod>
<CalculateMethod>111</CalculateMethod>
<SignatureValue>1</SignatureValue>
</Signature>
</XMLSignature>
</EenmaligeMachtiging>
</soap:Body>
</soap:Envelope>';
$transaction = new Transaction;
echo $transaction->postToHost($data);
if($transaction->hasErrors()){
print_r($transaction->getErrors());
}
?>
Ik krijg de volgende error: Array ( [0] => Array ( [desc] => Error while connecting to Buckaroo
Moet je niet op een speciale poort verbinden? Is dit script van Buckaroo zelf of heb jij dit geschreven?
Buckaroo zegt het volgende:
Elke request dat u via deze koppeling stuurt dient de volgende URL te gebruiken:
- https://payment.buckaroo.nl/soap/soap.asmx
Wanneer ik naar deze pagina ga krijg ik het volgende:
POST /soap/soap.asmx HTTP/1.1
Host: payment.buckaroo.nl
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "https://payment.buckaroo.nl/EenmaligeMachtiging"
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<EenmaligeMachtiging xmlns="https://payment.buckaroo.nl/">
<XMLMessage />
<XMLSignature />
</EenmaligeMachtiging>
</soap:Body>
</soap:Envelope>
Toevoeging op 07/07/2011 18:22:23:
Het connectieprobleem lag inderdaad aan de port.
De volgende regel maakt in ieder geval de connectie met Buckaroo:
$fsp = fsockopen('payment.buckaroo.nl',443,$errno,$error,$timeout);
Daarna maak ik de request d.m.v.
Code (php)
Ik krijg echter geen response. Weet iemand waar dit aan kan liggen?
Gewijzigd op 09/11/2011 07:41:08 door Remco van Arkelen