[php/xml] username en wachtwoord posten

Pagina: 1
Acties:
  • 147 views sinds 30-01-2008
  • Reageer

  • TangLeFuzZ
  • Registratie: Juni 2001
  • Laatst online: 23-08 15:45
Hey lui,

ik ben met het Bibit betaalsysteem bezig, en als ik een betaling wil doen dan moet ik de gegevens van die betaling (order en dergelijke) posten op een url op de bibit server met een xml file, ik krijg dan ook een xml response en moet daar mee verder werken.

Ik post mijn xml file op:
https://secure.bibit.com/jsp/merchant/xml/paymentService.jsp

Maar als ik dat doe moet ik mezelf ook 'authen' met mijn bibit username en wachtwoord.

Nu is mijn vraag, hoe kan ik mijn username en wachtwoord meegeven in die xml file (maar wel beschermd zodat anderen het niet zomaar kunnen uitlezen) die ik post zodat hij automatisch auth? (dat moet op die manier, maar in de manual wordt het niet uitgelegd).

Alvast bedankt....

  • TangLeFuzZ
  • Registratie: Juni 2001
  • Laatst online: 23-08 15:45
In java kan het op de volgende manier kwam ik ook achter, maar ik kan totaal niks met java.....het moet echt in php:
code:
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
    /*
     * Sends a xml message using a secure connection and username password authentication
     */
    public static String sendXml(String theXMLMessage) {
        StringBuffer response = new StringBuffer();
        try{
            URL url = new URL(location);
            huc = (HttpURLConnection)url.openConnection();
            huc.setRequestMethod("POST");
            huc.setRequestProperty("Authorization", "Basic "+encodeBase64((userName+":"+passWord).getBytes()));
            huc.setRequestProperty("Host", url.getHost());
            huc.setDoOutput(true);
            PrintWriter writer = new PrintWriter(huc.getOutputStream());
            writer.println(theXMLMessage);
            writer.flush();
            writer.close();
            BufferedReader br = new BufferedReader(new InputStreamReader(huc.getInputStream()));
            String line;
            while((line = br.readLine()) != null){
                response.append(line);
                response.append("\n");
            }
        }catch(MalformedURLException mfue){ 
            response.append("The URL is incorrect : ");
            response.append(location);
        }catch(IOException ioe){ 
            response.append("A connection problem has occured, this could be caused by:\n");
            response.append(" - The userName is not correct : "+ userName+ "; Check with bibit support at support@bibit.com\n");
            response.append(" - The password is not correct ; Check with bibit support at support@bibit.com\n");
            response.append(" - The URL is not correct : "+ location +" ; Review the documentation\n");
            response.append(" - You are behind a firewall that does not allow secure connections; Contact your network administrator\n");
        }
        return response.toString().trim();
    }
    
    /*
     * encodes a string to Base 64
     */
    public static String encodeBase64(byte[] d){
        if (d == null) return null;
        byte data[] = new byte[d.length+2];
        System.arraycopy(d, 0, data, 0, d.length);
        byte dest[] = new byte[(data.length/3)*4];

        // 3-byte to 4-byte conversion
        for (int sidx = 0, didx=0; sidx < d.length; sidx += 3, didx += 4){
            dest[didx]   = (byte) ((data[sidx] >>> 2) & 077);
            dest[didx+1] = (byte) ((data[sidx+1] >>> 4) & 017 | (data[sidx] << 4) & 077);
            dest[didx+2] = (byte) ((data[sidx+2] >>> 6) & 003 | (data[sidx+1] << 2) & 077);
            dest[didx+3] = (byte) (data[sidx+2] & 077);
        }

        // 0-63 to ascii printable conversion
        for (int idx = 0; idx <dest.length; idx++)
        {
            if (dest[idx] < 26)     dest[idx] = (byte)(dest[idx] + 'A');
            else if (dest[idx] < 52)  dest[idx] = (byte)(dest[idx] + 'a' - 26);
            else if (dest[idx] < 62)  dest[idx] = (byte)(dest[idx] + '0' - 52);
            else if (dest[idx] < 63)  dest[idx] = (byte)'+';
            else dest[idx] = (byte)'/';
        }

        // add padding
        for (int idx = dest.length-1; idx > (d.length*4)/3; idx--){
            dest[idx] = (byte)'=';
        }
        return new String(dest);
    }

  • tomato
  • Registratie: November 1999
  • Niet online
Zo te zien moet je ze meegeven in het Authorization header field van je Request (base64 encoded).

  • TangLeFuzZ
  • Registratie: Juni 2001
  • Laatst online: 23-08 15:45
Ok thnx, klopt ja.....
Ik weet zo alleen niet precies hoe (nog nooit eerder gedaan), maar dat zal ik wel ff uitzoeken...

  • TangLeFuzZ
  • Registratie: Juni 2001
  • Laatst online: 23-08 15:45
Als je zoiets onge-encrypt doet, moet dat dan op de volgende manier?

header("Authorization: Basic username==wachtwoord");

  • tomato
  • Registratie: November 1999
  • Niet online
Maar dan met een : en de header() functie kun je hier niet gebruiken, die stuurt die header namelijk mee met de response naar de client (stdout als het goed is).

  • TangLeFuzZ
  • Registratie: Juni 2001
  • Laatst online: 23-08 15:45
Ah ok thnx.....maar welke functie moet ik dan gebruiken?

  • tomato
  • Registratie: November 1999
  • Niet online
Hoe bouw je nu je HTTP Request?

  • tomato
  • Registratie: November 1999
  • Niet online
Volgens mij is het toch vrij triviaal om Authorization header field mee te geven als het je al lukt om een HTTP Request te sturen... :?

  • TangLeFuzZ
  • Registratie: Juni 2001
  • Laatst online: 23-08 15:45
Op dinsdag 27 november 2001 21:50 schreef tomato het volgende:
Volgens mij is het toch vrij triviaal om Authorization header field mee te geven als het je al lukt om een HTTP Request te sturen... :?
Hmm eerlijk gezegd heb ik het nog niet in praktijk gebracht, ben de stappen eerst aan het opzetten en straks zet ik het in elkaar, ik dacht de info op een of andere manier met een form te posten, ik weet zoals ik al zei niet echt veel van headers :)

  • tomato
  • Registratie: November 1999
  • Niet online
Ok, om je dan iets op weg te helpen. Waarschijnlijk zul je dit in PHP het best met sockets kunnen gaan doen.

Eerste een fsockopen($url, bla bala) en vervolgens de rest van de request sturen met een fwrite() oid.

Zoek voor voorbeelden in online docs of bijvoorbeeld in de 'gratis SMS service' topics die hier een tijd terug rondzwierven.

  • chem
  • Registratie: Oktober 2000
  • Laatst online: 27-08 13:53

chem

Reist de wereld rond

en waarom niet 'gewoon' via CURL?

Klaar voor een nieuwe uitdaging.


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Er zijn volgens mij behoorlijk wat mensen bezig met de bibit XML betalingen. Als nu eens 1 iemand een goede API in elkaar zet in PHP (en eventueel nog andere talen zoals Java) dan bespaart dat veel werk :) .

Tip Bibit voor een linkje op de info site en je bent gelijk populair.

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • tomato
  • Registratie: November 1999
  • Niet online
chem: en waarom niet 'gewoon' via CURL?
Naja, 'gewoon'.... maar daar heb je gelijk in, al doe je in principe niets anders (er zit alleen een leuke lib omheen) :)

  • tomato
  • Registratie: November 1999
  • Niet online
mbravenboer: Er zijn volgens mij behoorlijk wat mensen bezig met de bibit XML betalingen.
Nee hoor, het is steeds Tangletje :+

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
tomato: Nee hoor, het is steeds Tangletje :+
[topic=333273/1/25]
:P

oh,when? is er ook nog mee bezig :P

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • TangLeFuzZ
  • Registratie: Juni 2001
  • Laatst online: 23-08 15:45
Haha.....klopt ja, ik werd nl best wel gek, ik ben een tijdje geleden begonnen met het maken van een shop en wist toen nog niet eens van Bibit af, ik had ook niet verwacht dat het nog zo 'lastig' zou worden om de shop af te ronden vandaar dat ik de datum dat de shop af zou zijn verkeerd heb ingeschat en dat is een beetje lullig voor de klant.

Maar goed, ben al weer wat verder....ik zal 's gaan kijken naar die sockets en curl (ben uit bovenstaande discussie nog niet echt wijzer geworden welke manier ik nou het beste kan gebruiken, met CURL klinkt het makkelijkst eerlijk gezegd ;))

  • TangLeFuzZ
  • Registratie: Juni 2001
  • Laatst online: 23-08 15:45
Hmm, wat moet ik precies doen met 'errno' en 'errstr' in de fsockopen functie?

Ik heb het al wel gevonden trouwens, als m'n voorbeeld klaar is zal ik hem hier posten.

  • chem
  • Registratie: Oktober 2000
  • Laatst online: 27-08 13:53

chem

Reist de wereld rond

* chem is er (indirect) ook mee bezig

Klaar voor een nieuwe uitdaging.


  • TangLeFuzZ
  • Registratie: Juni 2001
  • Laatst online: 23-08 15:45
Op woensdag 28 november 2001 09:40 schreef chem het volgende:
* chem is er (indirect) ook mee bezig
Met bibit of met zo'n voorbeeld?

  • TangLeFuzZ
  • Registratie: Juni 2001
  • Laatst online: 23-08 15:45
De header moet er in ieder geval zo uit zien:
PHP:
1
2
3
4
5
6
7
<?
$header = "POST /jsp/merchant/xml/paymentService.jsp HTTP/1.0\r\nAuthorization: Basic"; 
$header .= base64_encode("$username:$password") . "\r\n";
$header .= "Content-type: application/x-www-form-urlencoded\r\n"; 
$header .= "Content-length: " . strlen($request) . "\r\n\r\n";
$header .= "Connection: close\r\n\r\n";
?>

  • Joror
  • Registratie: Augustus 2001
  • Laatst online: 11-03-2017

Joror

the eternal lurker

Ik (collega van chem) ben hier ook met die nieuwe bibit-xml betalingen bezig voor een klant, en ik kwam ook al tot de zelfde header in combinatie met fsockopen, alleen om daarna te beseffen dat het geheel natuurlijk in SSL moet voor bibit. :)

Dus fsockopen() is helaas niet te gebruiken denk ik, en dat maakt curl eigenlijk de makkelijkste manier. (tenzij ik ergens kan vinden hoe je met php je data kan encrypten volgens de SSL wijze ;)).

Zal wel even wat posten als ik iets heb gevonden..

nada aka zilch, formerly known as zip


  • TangLeFuzZ
  • Registratie: Juni 2001
  • Laatst online: 23-08 15:45
Je hoeft toch niet via SSL te posten?
Dat dacht ik tenminste......

alleen plaatjes die je gebruikt moeten op een SSL server staan.....

  • Joror
  • Registratie: Augustus 2001
  • Laatst online: 11-03-2017

Joror

the eternal lurker

Ik geloof dat je bij Bibit de hele transactie encrypted moet doen (je opent immers een SSL socket).
Eerst liet je dit door de browser van je client afhandelen door hem door te sturen naar een bepaalde https url, nu moet je het zelf doen.

nada aka zilch, formerly known as zip


  • tomato
  • Registratie: November 1999
  • Niet online
Zeker als het via SSL moet denk ik dat je toch het makkelijkst Curl kunt gebruiken, het moet dan niet zo moeilijk meer zijn.

  • TangLeFuzZ
  • Registratie: Juni 2001
  • Laatst online: 23-08 15:45
Op woensdag 28 november 2001 13:47 schreef Joror het volgende:
Ik geloof dat je bij Bibit de hele transactie encrypted moet doen (je opent immers een SSL socket).
Eerst liet je dit door de browser van je client afhandelen door hem door te sturen naar een bepaalde https url, nu moet je het zelf doen.
Nee dat is niet waar, het kan/moet nog steeds met die bepaalde https url....

Je moet een XML file met de inhoud van je order en wat andere gegevens posten op https://secure.bibit.com/jsp/merchant/xml/paymentService.jsp

  • Joror
  • Registratie: Augustus 2001
  • Laatst online: 11-03-2017

Joror

the eternal lurker

Hmm kan wel ja.. je zou een formpje kunnen maken met method="post", target="https://enzo", en alle gegevens in velden.
Alleen probleem is dat je om de die post te submitten je een username en password moet geven, zie voorbeeld asp code van bibit side:
code:
1
    xmlhttp.Open "POST",sURL, false, sUser, sPass

Wat dus de username en password zijn van je Merchant account, iets wat de klant niet heeft/kan weten.

Is echt bedoelt dus voor server-to-server communicatie via SSL.

nada aka zilch, formerly known as zip


  • TangLeFuzZ
  • Registratie: Juni 2001
  • Laatst online: 23-08 15:45
Hmm ja, ff de manual weer bekeken en er staat dat je hem moet posten met HTTP-POST .....

Hoe maak je zo'n SSL server dan?
Of moet je SSL of iets dergelijks 'kopen'?

  • TangLeFuzZ
  • Registratie: Juni 2001
  • Laatst online: 23-08 15:45
Trouwens Joror, hoe verwerk jij de response die je krijgt van Bibit na het posten van je order op die server, of hoe ga je dat doen?
Je krijgt in XML antwoord, en ik wilde daar deze parser voor gebruiken:
http://www.hansanderson.com/php/xml/
Maar in de manual staat dat je dat beter niet kunt doen en die van Microsoft moet gebruiken, want ze veranderen hun DTD nogal vaak en dan werkt het niet meer goed, beetje vaag dus...... ;(

  • tomato
  • Registratie: November 1999
  • Niet online
HTTP Basic Authorization kun je waarschijnlijk ook voor elkaar krijgen door als url zoiets te nemen:
code:
1
http://user:password@www.mijnserver.nl/submit

Dus dan zou je het nog best handmatig via een formpje kunnen doen. Niet dat dat de bedoeling is natuurlijk :P

  • TangLeFuzZ
  • Registratie: Juni 2001
  • Laatst online: 23-08 15:45
Nee, want dan ziet de klant het wachtwoord :)
Als je hem geencrypt post, kan die server er dan niet achter komen?
Heeft zo'n server niet iets als auto-encrypting ofzo? (ik gok ook maar wat hoor.....)

  • TangLeFuzZ
  • Registratie: Juni 2001
  • Laatst online: 23-08 15:45
Ik heb ze een mailtje gestuurd over hoe ik de info moest posten en kreeg dit terug:
Geachte Rick,

In de documentatie staat omschreven dat de order gegevens gestuurd moeten worden met een XML parser. Er staan ook de links om deze te downloaden. De nieuwe documentatie is volledig gespits op XML. Er staan voorbeeld script in de documentatie.

Met vriendelijke groet,
Support Payment Plaza
Ik vraag me nu toch echt af of ze hier wel het juiste bedoelen, ik dacht toch echt dat je de parser moest gebruiken om hun response (die je krijgt na het posten van je eigen xml) te verwerken, hoe kun je nou met een parser iets gaan posten?
:?
Snap er weinig meer van.....

  • TangLeFuzZ
  • Registratie: Juni 2001
  • Laatst online: 23-08 15:45
Joror, jij al wat verder?

  • TangLeFuzZ
  • Registratie: Juni 2001
  • Laatst online: 23-08 15:45
Ik neem aan dat we het dan toch met CURL moeten doen.....

gelukkig krijgen we binnenkort een eigen server, dan kan ik PHP ook compileren met cURL, want op dit moment worden we gehost en die gast wil dat waarschijnlijk niet doen ;(

  • N3vS
  • Registratie: Augustus 2001
  • Laatst online: 15-09 09:31
Weet iemand al iets meer? Mijn collega is er ook mee bezig, maar die komt er ook niet meer uit. Die technical manual is erg onduidelijk.

Hoezo zou het komen dat er wel voorbeelden zijn voor ASP en Java maar niet voor PHP? Bibit zal toch zo veel mensen mislopen, grotendeel van alle websites draaien toch op Linux machines?

  • Joror
  • Registratie: Augustus 2001
  • Laatst online: 11-03-2017

Joror

the eternal lurker

Jah ben op het moment al een stuk verder, ben al bezig met een BibitXML classje, gebruikt curl & xml + een xml class XPath.

Als je nog wil weten hoe je het met curl moet doen:
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
<?
    function sendXML( $xml, $timeout=10 )
    {
        $this->orderData = $orderdata;

        if (function_exists("curl_init") )
        {
            // php builtin curl

            $curl = curl_init($this->$sURL);
            // results into variable
            curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
            if ( $debug)
                curl_setopt($curl, CURLOPT_VERBOSE, 1);
            // set an useragent
            curl_setopt($curl, CURLOPT_USERAGENT, '');
            // set our contenttype to xml
            curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: text/xml'));
            // set post usage on
            curl_setopt($curl, CURLOPT_POST, 1);
            // set the post data
            curl_setopt($curl, CURLOPT_POSTFIELDS, $xml);
            // enable header output
            curl_setopt($curl, CURLOPT_HEADER, 1);
            // timeout (the -1 is because timeout in curl has a buggy 1 sec delay)
            if ($timeout)
                curl_setopt($curl, CURLOPT_TIMEOUT, ($timeout == 1 ? 1 : $timeout - 1));
            // set authorization stuff
            if ($this->sUser &amp;&amp; $this->sPass)
                curl_setopt($curl, CURLOPT_USERPWD, $this->sUser.":".$this->sPass);

            $result = curl_exec($curl);
            curl_close($curl);
        }
    }
?>

Hoor later meer ;)

nada aka zilch, formerly known as zip


  • TangLeFuzZ
  • Registratie: Juni 2001
  • Laatst online: 23-08 15:45
Ah cool.... dat is zeker handig ja,

maar euhm, jij maakt dus ook gewoon een eigen parser classje?

  • TangLeFuzZ
  • Registratie: Juni 2001
  • Laatst online: 23-08 15:45
Beter, ik kan het nu ook met cURL doen....nu zal het wel niet zoveel moeite meer kosten.

  • N3vS
  • Registratie: Augustus 2001
  • Laatst online: 15-09 09:31
Weet iemand al wat meer over dit onderwerp? Heeft iemand het al voor elkaar om met PHP/XML betalingen af te handelen via Bibit?

  • TangLeFuzZ
  • Registratie: Juni 2001
  • Laatst online: 23-08 15:45
Voor het verwerken van XML wilde ik het als volgt doen:

Ik gebruik de parser van Hans Anderson, en die gebruik ik dan ongeveer als volgt:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?
$file = "./terug.xml";
$data = implode("", file($file));
$array = xmlize($data);

$paymentService = $array["paymentService"]["#"]["reply"];

for($i = 0; $i < sizeof($paymentService); $i++) {
  $error_id = $paymentService[$i]["#"]["error"]["0"]["@"]["code"];
  $error = $paymentService[$i]["#"]["error"]["0"]["#"];
  $order_id = $paymentService[$i]["#"]["orderStatus"]["0"]["@"]["orderCode"];
  $reference_url = $paymentService[$i]["#"]["orderStatus"]["0"]["#"]["reference"]["0"]["#"];
  $reference_id = $paymentService[$i]["#"]["orderStatus"]["0"]["#"]["reference"]["0"]["@"]["id"];
}

echo "
<b>Order ID:</b> $order_id<br>
<b>Reference ID:</b> $reference_id<br>
<b>Reference URL:</b> $reference_url<br>
<b>Error ID:</b> $error_id<br>
<b>Error:</b> $error";
?>

  • TangLeFuzZ
  • Registratie: Juni 2001
  • Laatst online: 23-08 15:45
Joror, jij al wat verder?

  • Joror
  • Registratie: Augustus 2001
  • Laatst online: 11-03-2017

Joror

the eternal lurker

Wel wat ja, alleen die bibit gastjes zijn tering langzaam met het openzetten van de testaccount...

nada aka zilch, formerly known as zip


  • ThaDude
  • Registratie: December 2000
  • Laatst online: 17:01

ThaDude

Hang Loose

Joror heb je hem al werkende???
want het testaccount is online ....!

:)

We're machines just like everything else in nature. (gasloos sinds 01-10-2020, WP: SW75YAA/ERSD-VM2D, DJG WPS 300, 18 hp CPC, 11,1 kWp


  • TangLeFuzZ
  • Registratie: Juni 2001
  • Laatst online: 23-08 15:45
Pff, mijn test-account is ook up, maar wat ik ook probeer met cURL, ik krijg geen results... :(

  • TangLeFuzZ
  • Registratie: Juni 2001
  • Laatst online: 23-08 15:45
Toch nog even; Joror, heb je je shop al aan de praat met Bibit?

  • oh,when?
  • Registratie: April 2000
  • Niet online

oh,when?

...

Op dinsdag 27 november 2001 22:40 schreef mbravenboer het volgende:

[..]

[topic=333273/1/25]
:P

oh,when? is er ook nog mee bezig :P
mwouah..niet echt meer. prototype heeft de xml-bibit class geschreven en werkend, in zoverre dat hij wel werkt op joror zijn ding, maar niet op het account van mijn opdrachtgever :(

De server returned een Bibit error 4: Acces Denied oid, wat inhoud dat het IP niet klopt, waar wij dus niks van snappen. En de support bij Bibit is ook niet echt handig, die willen alleen via email alles afhandelen. Volgens mij zijn ze daar een beetje mensenschuw, want zelfs als ik ze opbel is het enige wat ze kunnen brabbelen:

"..email..alleen email...nee..stuur een emailtje naar...ja stuur het in een email...nee alleen email.."

Dat is wat ik na 15 minuten zo wijzer was geworden. Maar goed...hopelijk komen we eruit.

"You're only as good, as what you did last week."


  • TangLeFuzZ
  • Registratie: Juni 2001
  • Laatst online: 23-08 15:45
Op vrijdag 04 januari 2002 23:28 schreef oh,when? het volgende:
De server returned een Bibit error 4: Acces Denied oid, wat inhoud dat het IP niet klopt, waar wij dus niks van snappen.
Bij Bibit moet het ip ingesteld staan van de server waar jullie je scripts hebben staan, anders krijg je dus die error...

  • oh,when?
  • Registratie: April 2000
  • Niet online

oh,when?

...

Op zaterdag 05 januari 2002 21:59 schreef Tangletje het volgende:

[..]

Bij Bibit moet het ip ingesteld staan van de server waar jullie je scripts hebben staan, anders krijg je dus die error...
:D

ja zover waren wij ook al. Maar na 15 emailtjes over en weer, en telefoongesprekken van een half uur werkt het nog steeds niet.
Op vrijdag 04 januari 2002 23:28 schreef oh,when? het volgende:

...in zoverre dat hij wel werkt op joror zijn ding, maar niet op het account van mijn opdrachtgever :(
dat dus. De php-xml class werkt wel op een ander account, maar niet op deze. Dat is dus gek.

"You're only as good, as what you did last week."


  • TangLeFuzZ
  • Registratie: Juni 2001
  • Laatst online: 23-08 15:45
Op zondag 06 januari 2002 00:03 schreef oh,when? het volgende:

[..]

:D

ja zover waren wij ook al. Maar na 15 emailtjes over en weer, en telefoongesprekken van een half uur werkt het nog steeds niet.
[..]

dat dus. De php-xml class werkt wel op een ander account, maar niet op deze. Dat is dus gek.
Das kloten...
Ik probeer het ook met cURL maar mijn probleem is gewoon dat ik totaal geen verbinding kan krijgen.
Het ip verstellen heeft m'n opdrachtgever aangevraagd bij Bibit en binnen een half uur stond het goed ingesteld.
Pagina: 1