php utf-8 character-encoding paypal paypal-ipn

php - Paypal IPN override charset



utf-8 character-encoding (2)

Tengo un problema con este paypal IPN. Lo vi, mucha gente lo había hecho.

Intento pagar como usuario: Árvíztűrő Tükörfúrógép En este nombre, hay todos los caracteres especiales, que están en el ABC húngaro.

Soy un desarrollador de PHP húngaro.

Ok, traté de buscar mucho en google. Lo primero fue verificar la configuración de idioma de PayPal: http://jlchereau.blogspot.hu/2006/10/paypal-ipn-with-utf8.html

Todas las configuraciones son UTF-8.

Cuando PayPal llamó a mi URL de notificación, yo (desarrollador anterior) construyo la URL de solicitud. Cuando registré esta url, vi que el conjunto de caracteres no era UTF-8, así que obligo al script a usar eso.

$req = ''cmd=_notify-validate''; foreach ($_POST as $key => $value) { if ($key == ''charset'') { $req .= "&charset=utf-8"; } else { $value = urlencode(stripslashes($value)); $req .= "&$key=$value"; }

}

Y aquí está lo interesante. Vuelvo un nombre de usuario totalmente formado. Así que lo dejo char por char.

El primer nombre será: CHARS: 193, 114, 118, 237, 122, 116, 26, 114, 26.

Chupar. Intenté todo para obtener mi nombre real de utf-8. El mb_detect_encoding es UTF-8 para ello.

Intenté usar iconv, mb_convert_encoding, utf8_encode y decodificar. Sin éxito. Trató de no urlencode el nombre, no hay éxito de nuevo.

¿Alguien puede decirme, por qué, y cómo puedo recuperar el nombre real de utf8?

La URL que envié: cmd = _notify-validate & mc_gross = 10.00 & protection_eligibility = Eligible & address_status = confirmado & payer_id = JA3YMCJFKSCNJJ / ícono de la ley + +Ancia% 3A41% 3A41% 3A41% 3A41% 3A41% 3A41% 3A41% 3A41% 3A41% 3A41% 3A41% 3A41% 3A41% 3A41% 3A41% 3A41% 3A41% 3A41% 3A41% 3A41% 3A41% 3A41% 3A41% 3A41% 3A41% 3A41% 3A41% 3A41% 3A41% 3A41% utf-8 * & address_zip = 95131 & first_name =% C1rv% EDzt% 1Ar% 1A & mc_fee = 0.59 & address_country_code =% 3B% 3B% 3B% 3BHungary% 3B% 3B% 3B% 3B% 3B% 3B y payer_status = verificado y negocio = vaso_1346830963_biz% 40mydomain.hu y address_country = Estados + Unidos y address_city = San + Jose & cantidad = 1 & verify_sign = AVVJjJNeVwHbYcMDVfj2N1DqWwUdAtNQIpb9KIP99gZ2PY-LPoOYzSCc y PAYER_EMAIL = test_1346830232_per% 40mydomain.hu y txn_id = 4J747779YW528551F y payment_type = instant & last_name = T% FCk% F6rf% FAr% F3g% E9p & address_state = CA & receiver_email = vaso_1346830963_biz% 40dominante.hu y payment_fee = tipo de juego / tipo de juego en el que se encuentra el nombre. est_ipn = 1 & handling_amount = 0.00 & transaction_subject = lolka_bolka% 3Bfalse% 3B% 3B% 3B% 3BHungary% 3B% 3B% 3B% 3B% 3B% 3B y payment_gross = 10.00 & shipping = 0.00 & ipn_track_id = 6fe12a7a34b74


Debes cambiar tu configuración en paypal.


La respuesta de Lenart es excelente y muy útil, pero pensé que agregaría algunas cosas que no encajarían en un comentario.

  • Para aclarar: configurar el juego de charset en su sitio, en su formulario de pedido (por ejemplo: mediante una entrada oculta), NO es suficiente, también debe configurar su codificación predeterminada , como se explica en la respuesta de Lenart.
    • Esto se debe a que esa opción solo se aplica a sus propios datos, mientras que la configuración predeterminada se aplica a los datos enviados por PayPal a su script de manejo de IPN.
    • por ejemplo: tal vez tenga UTF-8 como una entrada oculta en su formulario de pedido pero las IPN de PayPal todavía están en windows-1252 . Solo puede solucionarlo cambiando la configuración predeterminada en su cuenta de PayPal.
  • Para propósitos de prueba, también querrá establecer esa opción de codificación para su cuenta de comerciante de Sandbox . (Simplemente inicie sesión en https://sandbox.paypal.com con los detalles de su vendedor de Sandbox).
  • Después de configurar la codificación predeterminada, si regresa a la configuración nuevamente para verificar su valor, mostrará el valor predeterminado en lugar del valor establecido. Este es un error (y es ilustrativo de la calidad del trabajo de PayPal) y el valor que estableció previamente todavía está establecido.
    • Entonces, si desea asegurarse de que realmente es el conjunto de caracteres, hágalo dentro de su secuencia de comandos de manejo de IPN verificando el valor del charset de charset en el mensaje POST.
  • El conjunto de caracteres predeterminado utilizado por PayPal no funciona correctamente.
    • por ejemplo: Western European Languages (including English) harían que los caracteres con acento francés no funcionen.
    • Es mejor usar UTF8 en todas partes (se mostrará como UTF-8 en las IPN).

§

EDITAR. Por último, si bien no menos importante:

Si desea probar su script de manejo de IPN con caracteres especiales o acentuados , tiene (teóricamente) algunas opciones diferentes, pero la mayoría no funciona en la práctica.

Aquí hay un resumen:

  • El uso del Simulador de IPN no funcionará ya que no puede validar la solicitud (produce solicitudes falsas, no reales).
  • Lamentablemente, no es posible crear una cuenta de cliente de Sandbox de PayPal con caracteres especiales dentro del nombre o apellido.
    • La interfaz de usuario no lo admite y le pedirá que Only enter letters (sic).
    • La funcionalidad de carga masiva de la cuenta no es mejor, lo que resulta en que Something went wrong. One or more sandbox accounts could not be uploaded. Try again. Something went wrong. One or more sandbox accounts could not be uploaded. Try again.
  • La única opción que funciona: pruebe su sitio con el servidor Sandbox de PayPal y elija pagar sin una cuenta de PayPal .
    • De esta manera, podrá ingresar caracteres especiales / acentuados para los nombres y apellidos.
    • (Obtendrá el número de tarjeta de crédito, el tipo y la fecha de vencimiento de ` Developer / Sandbox Accountssu cuenta de cliente ›Profile› Funding: cualquier número será suficiente para el valor de CVV).

Informé este problema a PayPal hace meses, pero nada ha cambiado.

§

Trabajar con PayPal no es divertido y es una gran pérdida de tiempo. Espero que esto te ayude a ahorrar tiempo. Lleva tu negocio a otro lado si puedes.