Pergunta

Eu sou um novato em PHP relativo implementando um ouvinte do PayPal IPN e tudo parece estar funcionando bem, exceto que eu realmente não sei como verificar um código de resposta.

Eu tentei algo feio com Curl, mas não funciona (não estou entendendo o CRO).

Eu tentei este código que peguei de algum lugar da rede:

$fp = fsockopen('ssl://www.sandbox.paypal.com', 443, $errno, $errstr, 30);
$response_headers = get_headers($fp);
$response_code = (int)substr($response_headers[0], 9, 3);

... mas não está funcionando (retorna $ resposta_code = 0).

Então, agora, estou depurando meu código IPN sem verificar uma resposta 200.

Alguém pode me aconselhar mais experiente sobre qual é a maneira adequada/simples de verificar isso?

Obrigado

Foi útil?

Solução

É get_headers ($ url), não get_headers ($ fp). A menos que eu esteja lendo totalmente errado (e há outro modo que eu nunca vi), você precisa passar o URL do qual está lendo, não uma alça de soquete. Na verdade, aparentemente faz o seu próprio, então seria inútil para sua tarefa atual.

fsockopen (...) é uma função de nível mais baixo (TCP/IP). Ele retorna uma alça de soquete, não uma alça de curto. É por isso que você não pode usar Curl_getInfo (...) nele. Você quer algo assim ...

$fp = curl_init('https://www.sandbox.paypal.com/cgi-bin/webscr');
curl_setopt($fp, CURLOPT_POST, true);
curl_setopt($fp, CURLOPT_POSTFIELDS, $_POST);
curl_setopt($fp, CURLOPT_RETURNTRANSFER, true);

$response = curl_exec($fp);

$response_code = curl_getinfo($fp, CURLINFO_HTTP_CODE);

Exceto como me lembro, você precisa adicionar 'cmd = _notify-validate' aos campos post.

Não use fsockopen (...). Sim, eu sei, é isso que o código de amostra do PayPal faz. Mas ele deve correr em todos os lugares e não pode confiar na instalação do CRO. Você pode, então use -o.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top