2010-03-25 14 views
10

Ich brauche eine Funktion, die NVP korrekt in PHP Array parsen wird. Ich habe Code verwendet, der von Paypal zur Verfügung gestellt wurde, aber es funktionierte nicht, wenn die Stringlänge neben dem Namen angegeben wurde.Was ist der beste Weg, Paypal NVP in PHP zu analysieren?

Hier ist was ich bisher habe.

private function parseNVP($nvpstr) 
{ 
    $intial=0; 
    $nvpArray = array(); 

    while(strlen($nvpstr)) 
    { 
     //postion of Key 
     $keypos= strpos($nvpstr,'='); 
     //position of value 
     $valuepos = strpos($nvpstr,'&') ? strpos($nvpstr,'&'): strlen($nvpstr); 

     /*getting the Key and Value values and storing in a Associative Array*/ 
     $keyval=substr($nvpstr,$intial,$keypos); 
     $vallength=$valuepos-$keypos-1; 
     // check if the length is explicitly specified 
     if($braketpos = strpos($keyval,'[')) 
     { 
      // override value length 
      $vallength = substr($keyval,$braketpos+1,strlen($keyval)-$braketpos-2); 
      // get rid of brackets from key name 
      $keyval = substr($keyval,0,$braketpos); 
     } 
     $valval=substr($nvpstr,$keypos+1,$vallength); 
     //decoding the respose 
     if (isValidXMLString("<".urldecode($keyval).">".urldecode($valval)."</".urldecode($keyval).">")) 
      $nvpArray[urldecode($keyval)] =urldecode($valval); 
     $nvpstr=substr($nvpstr,$keypos+$vallength+2,strlen($nvpstr)); 
    } 
    return $nvpArray; 
} 

Diese Funktion funktioniert die meiste Zeit.

Antwort

15

Der beste Weg ist die parse_str Funktion. Es wird eine URL-codierte Zeichenfolge in ein PHP-Array analysieren.

So würde der Code wie folgt aussehen:

private function parseNVP($nvpstr) 
{ 
    $paypalResponse = array(); 
    parse_str($nvpstr,$paypalResponse); 
    return $paypalResponse; 
} 
+0

Dies ist falsch, da parse_str auf "note [6] = aaaaa Zeug = 2" in Array führen ('note' => Array (5 => 'aaaaa '),' Zeug' => 2) das Ergebnis sollte array sein ('notieren' => 'aaaaa', 'stuff' => 2) –

+4

Nein. Das Ergebnis sollte nicht 'array (' notieren '=>' aaaaa ',' stuff '=> 2) 'sein . Dafür hättest du "note = aaaaa & stuff = 2". Meine Antwort ist nicht falsch. Ich habe eine Paypal Payment Gateway Integration in PHP mit dem Code, den ich gesendet habe, aufgebaut. Es verarbeitet Tausende von Transaktionen pro Monat gut. – Josh

+2

Die Zeichenfolge Länge sollte nicht neben der Zeichenfolge wie folgt angegeben werden. PayPal NVP funktioniert nicht. Lesen Sie ihr Handbuch. "Die Anfrage und die Antwort sind URL-codiert" https://cms.paypal.com/us/cgi-bin/?cmd=_render-content&content_ID=developer/e_howto_api_nvp_NVPAPIOverview – Josh

0

viel Googeln ich das gefunden habe:

function deformatNVP($nvpstr) { 

    $intial=0; 
    $nvpArray = array(); 


    while(strlen($nvpstr)){ 
     //postion of Key 
     $keypos= strpos($nvpstr,'='); 
     //position of value 
     $valuepos = strpos($nvpstr,'&') ? strpos($nvpstr,'&'): strlen($nvpstr); 

     /*getting the Key and Value values and storing in a Associative Array*/ 
     $keyval=substr($nvpstr,$intial,$keypos); 
     $valval=substr($nvpstr,$keypos+1,$valuepos-$keypos-1); 
     //decoding the respose 
     $nvpArray[urldecode($keyval)] =urldecode($valval); 
     $nvpstr=substr($nvpstr,$valuepos+1,strlen($nvpstr)); 
    } 
    return $nvpArray; 
} 

Source.

Ich habe diesen Code nicht und ich habe es nicht getestet, also verwenden Sie es mit Vorsicht.