Muy buenas y saludos a todos.
función php:
function getData($data){
$lines = explode("\n", $data);
$keyarray = array();
$num = count($lines);
for($i=1; $i<$num;$i++){
//list($key,$var) = split("=",$lines[$i],2);
$works = split("=",$lines[$i]);
$keyArray[$works[0]] = $works[1];
echo("key: ".$works[0]." value: ".$works[1]);
}
return array($lines[0],$keyArray);
}
mas código:
$responsePaypal = getData($var);
if(strpos($responsePaypal[0],'SUCCESS') === 0 AND $code == 200){
echo "SUCCESS!!!";
}
texto que recive en la variable data:
SUCCESS\n
mc_gross=20.00\n
invoice=AF000001\n
protection_eligibility=Eligible\n
address_status=confirmed\n
payer_id=ADSZV7LHTCJM4\n
tax=0.00\n
address_street=Candy+Road+77\n
payment_date=12%3A04%3A18+Oct+19%2C+2010+PDT\n
payment_status=Completed\n
charset=windows-1252\n
address_zip=99501\n
first_name=Alice\n
mc_fee=0.88\n
address_country_code=US\n
address_name=Alice+Foobar\n
custom=\n
payer_status=unverified\n
business=paypal%40business.example.com\n
address_country=United+States\n
address_city=Anchorage\n
quantity=1\n
payer_email=alice.foobar%40example.com\n
txn_id=6BC88318RN685282M\n
payment_type=instant\n
last_name=Foobar\n
address_state=AK\n
receiver_email=paypal%40business.example.com\n
payment_fee=0.88\n
receiver_id=JNNUMM42GJB9U\n
txn_type=web_accept\n
item_name=Stuffed+bear\n
mc_currency=USD\n
item_number=BEAR05\n
residence_country=US\n
receipt_id=3354-8100-5749-2926\n
handling_amount=0.00\n
transaction_subject=Stuffed+bear\n
payment_gross=20.00\n
shipping=0.00\n
me imprime todo esto:
......
......
......
......
Notice: Undefined offset: 1 in /var/www/pay/index.php on line 82
key: value: key: payment_gross value: 20.00
Notice: Undefined offset: 1 in /var/www/pay/index.php on line 81
Notice: Undefined offset: 1 in /var/www/pay/index.php on line 82
key: value: key: shipping value: 0.00
Notice: Undefined offset: 1 in /var/www/pay/index.php on line 81
Notice: Undefined offset: 1 in /var/www/pay/index.php on line 82
key: value: SUCCESS!!!
Como podéis ver al final de todo me llega como si todo estuviera bien, pero me dice que esta indefinido la offset 1, pero para depurar el código hice unas impresiones como podéis ver de el contenido de el array que devuelve la función split, y el array esta ocupando el offset 0 y el 1 entonces ¿A que se debe el error?
gracias.
¿Qué código está en la línea 82 del index?
En la linea 8 del codigo php que puse en
$works = split("=",$lines[$i]);
en el For, no lo inicies desde 1 ponlo desde 0 :)
for($i=0; $i<$num;$i++){
//...
y por otro lado creyendo que es mejor usa preg_split en vez de explode (aunque bueno daría casi igual)
[Edito]
Si es el offset 1 es que no te esta haciendo el explode... pregunta... el $data viene tal cual lo muestras o sea con el \n?? si es asi intenta explode("\\n", $data) o con comillas simples explode('\n', $data);
Gracias, todo solucionado, lo solucioné cambiando en el for el inicio como me dijisteis desde 0 y cambiando el explode poniendo comillas simples quedo de la siguiente manera.
function getData($data){
$lines = explode('\n', $data);
$keyarray = array();
$num = count($lines);
for($i=0; $i<$num;$i++){
$works = split("=",$lines[$i]);
$keyArray[$works[0]] = $works[1];
}
return array($lines[0],$keyArray);
}
y otra cosa, ¿cual es la diferencia entre usar comillas simples y dobles en el caso de explode para palabras reservadas como "\n"?
en el código que yo tengo si esta "\n" porque es una simulación que estoy haciendo ha paypal, lo almaceno en una variable.
$var = <<<EOT
SUCCESS\n
mc_gross=20.00\n
invoice=AF000001\n
protection_eligibility=Eligible\n
address_status=confirmed\n
payer_id=ADSZV7LHTCJM4\n
tax=0.00\n
address_street=Candy+Road+77\n
payment_date=12%3A04%3A18+Oct+19%2C+2010+PDT\n
payment_status=Completed\n
charset=windows-1252\n
address_zip=99501\n
first_name=Alice\n
mc_fee=0.88\n
address_country_code=US\n
address_name=Alice+Foobar\n
custom=\n
payer_status=unverified\n
business=paypal%40business.example.com\n
address_country=United+States\n
address_city=Anchorage\n
quantity=1\n
payer_email=alice.foobar%40example.com\n
txn_id=6BC88318RN685282M\n
payment_type=instant\n
last_name=Foobar\n
address_state=AK\n
receiver_email=paypal%40business.example.com\n
payment_fee=0.88\n
receiver_id=JNNUMM42GJB9U\n
txn_type=web_accept\n
item_name=Stuffed+bear\n
mc_currency=USD\n
item_number=BEAR05\n
residence_country=US\n
receipt_id=3354-8100-5749-2926\n
handling_amount=0.00\n
transaction_subject=Stuffed+bear\n
payment_gross=20.00\n
shipping=0.00\n
EOT;
las comillas dobles interpretan mientras las simples no, puede probar asi y veras la diferencia:
var $proof = 'hola';
echo "$proof \r\n Otra Linea?\n";
echo '$proof \r\n Otra Linea?';
la salida seria:
hola
Otra Linea?
$proof \r\n Otra Linea?
:)
Pues todo aclarado :)