Avatar billede phrozia Juniormester
18. april 2013 - 16:58 Der er 20 kommentarer

Quickpay API - xml

Hejsa!

Jeg er ved at lave capture, status og cancel api til quickpay og følger deres dokumentation, hvori man skal sende nogle vars til deres /api og modtager så en xml tilbage.

Dog kan jeg ikke få parsed den xml...

<?
$url = "https://secure.quickpay.net/api";

$postdata = "protocol=7&msgtype=status&merchant=89898978&transaction=$transaction&md5check=$md5check";

$ch = curl_init(); // initialize curl handle
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata);
$result = curl_exec($ch);

$xml = new SimpleXMLElement($result);
echo $xml->qpstatmsg;
?>

Den returnere

Fatal error: Uncaught exception 'Exception' with message 'String could not be parsed as XML' in /htdocs/admin/pages/quickpay_status.php:53 Stack trace: #0 /htdocs/admin/pages/quickpay_status.php(53): SimpleXMLElement->__construct('') #1 {main} thrown in /htdocs/admin/pages/quickpay_status.php on line 53
Avatar billede repox Seniormester
18. april 2013 - 17:25 #1
Har du kontrolleret indholdet af $result?
Avatar billede olebole Juniormester
18. april 2013 - 18:16 #2
<ole>

Har det mon ikke noget at gøre med tegnsæt?

/mvh
</bole>
Avatar billede arne_v Ekspert
18. april 2013 - 19:21 #3
proev og udskriv $result og se om det faktisk indeholder XML
Avatar billede repox Seniormester
18. april 2013 - 20:00 #4
Jeg er ret overbevist om at det ikke er XML der returneres.
Avatar billede olebole Juniormester
18. april 2013 - 20:15 #5
Det kan godt være XML, der returneres - bare i et 'forkert' tegnsæt  =)

Hvis der f.eks. returneres XML som iso-8859-1, og PHP-dokumentet er et utf-8 dokument, skal response strengen konverteres. Ellers kan simpleXML ikke parse den og vil smide en fejl i den stil, spørger omtaler
Avatar billede arne_v Ekspert
19. april 2013 - 03:51 #6
Hvad?

Hvis servicen returnerer XML i ISO-8859-1 og XML prolog siger at encoding er ISO-8859-1 spiller det saa nogen rolle om PHP er i UTF-8 eller ISO-8859-1?

Det er da em grov overtr;delse af alle regler for XML parsing.
Avatar billede repox Seniormester
19. april 2013 - 06:35 #7
Det er nu heller ikke en oplevelse jeg kan nikke genkendende til.

En hurtig test er heller ikke noget som bekræfter at to forskellige tegnsæt har noget at sige for SimpleXML.
Avatar billede phrozia Juniormester
19. april 2013 - 09:58 #8
Det ser faktisk ud til at $result er helt tom...?
Avatar billede repox Seniormester
19. april 2013 - 10:54 #9
Det forklarer jo hvorfor at SimpleXML siger at den ikke kan parse strengen som XML ;)
Avatar billede phrozia Juniormester
19. april 2013 - 11:20 #10
True that! ;)

Men hvorfor er den så tom? Det burde være det korrekte jeg sender afsted til /api ift. dokumentation og sciptet siges at virke i anden post her på eksperten.

Jeg har sat webhotellets ip'er på api listen i maneger også. Der er vel ikke andet jeg skal gøre?
Avatar billede phrozia Juniormester
19. april 2013 - 11:28 #11
Til indholdet af de forskellige variabler, så skal jeg bruge det jeg har modtaget fra callback url'en, ik?

Jeg skal ikke lave nogen ny md5, men blot sende den afsted jeg har modtaget fra callback?
Avatar billede repox Seniormester
19. april 2013 - 11:30 #12
Nej, du skal altid genere dit md5check hver gang for at bekræfte at du er den du er.
Avatar billede phrozia Juniormester
19. april 2013 - 11:45 #13
Okay. Så i følge http://doc.quickpay.dk/api/messagetypes.html#index8h2 skal jeg lave md5 via

$protocol = "7";
$msgtype = "status";
$merchant = "89898978";
$transaction = "nummer fra callback på ordren/transaction";
$apikey = "apikey fra maneger";
$md5secret ='secreet fra maneger';

$md5check = md5($protocol.$msgtype.$merchant.$transaction.$apikey.$secret);

og så skubbe afsted med

$postdata = "protocol=$protocol&msgtype=$msgtype&merchant=$merchant&transaction=$transaction&md5check=$md5check";

Det retunerer stadig sammen parse fejl og $result er stadig tom :S
Avatar billede repox Seniormester
19. april 2013 - 11:56 #14
Jeps... Og så skal du i øvrigt sende til https://secure.quickpay.dk/api og ikke .net
Avatar billede phrozia Juniormester
19. april 2013 - 12:28 #15
Så kom der svar da jeg sendte til .dk. Dog kan den ikke echo så man kan læse det, men hvis jeg laver en view source på siden får jeg:

<?xml version="1.0" encoding="UTF-8"?>
<response><msgtype>status</msgtype><ordernumber/><amount/><balance/><currency/><time>2013-04-19T11:58:15+02:00</time><state/><qpstat>008</qpstat><qpstatmsg>md5check: a58a9f9e616f74bbe6f478ad5b2498a8, hash: 80214a98ad081b125f9fe3f26438b235</qpstatmsg><chstat/><chstatmsg/><merchant/><merchantemail/><transaction/><cardtype/><cardnumber/><splitpayment/><acquirer/><fraudprobability/><fraudremarks/><fraudreport/><md5check>94c6adedb2090466652eeeec75105e36</md5check></response>
<br><br>md5check: a58a9f9e616f74bbe6f478ad5b2498a8, hash: 80214a98ad081b125f9fe3f26438b235

qpstat er dog 008 Error in request data.

Er det pga noget af det jeg sender afsted er forkert?
Avatar billede repox Seniormester
19. april 2013 - 12:31 #16
Ifølge Quickpays dokumentation er det du sender ikke korrekt: http://quickpay.net/faq/status-codes/

Er det data du sender og dit md5check korrekt?
Avatar billede phrozia Juniormester
19. april 2013 - 15:35 #17
Ja, det vil jeg da tro. Indholdet af variablerne i postdata er som ovenstående og transaction er hentet fra callback dataen.

Kan jeg tjekke det på en eller anden måde?
Avatar billede repox Seniormester
19. april 2013 - 15:56 #18
Det gør du jo i princippet allerede, ved at du får at vide i dit svar fra QuickPay at det du sender ikke er i orden.

Det nemmeste er at gennemgå din md5check algoritme sammen med dokumentationen.
Avatar billede phrozia Juniormester
22. april 2013 - 10:48 #19
Så fandt jeg endelig frem til hvad jeg gjorde forkert...

Jeg havde inkludere apikey i mit md4check men ikke i min postdata! Så bliver den selvfølgelig utilfreds!
Avatar billede phrozia Juniormester
26. maj 2014 - 16:20 #20
Pyh, det er dårlig stil at jeg først svarer nu. Beklager alle :(

Kan i smide nogle svar så jeg kan lukke?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester