Paypal IPN переопределяет кодировку
У меня проблема с этим paypal IPN.
Я видел много людей.
Я стараюсь платить как пользователь: Árvíztűrő Tükörfúrógép
В этом названии есть все специальные символы, что в венгерской ABC.
Я - венгерский PHP-разработчик.
Хорошо, я пытался много искать в Google.
Первое, что нужно было проверить настройки языка PayPal:
http://jlchereau.blogspot.hu/2006/10/paypal-ipn-with-utf8.html
Каждое значение - UTF-8.
Когда paypal назвал мой urify, я (предыдущий разработчик) построит URL-адрес запроса.
Когда я зарегистрировал этот URL-адрес, я увидел, что кодировка не была UTF-8, поэтому я принудительно использовал script.
$req = 'cmd=_notify-validate';
foreach ($_POST as $key => $value) {
if ($key == 'charset') {
$req .= "&charset=utf-8";
} else {
$value = urlencode(stripslashes($value));
$req .= "&$key=$value";
}
}
И вот интересная вещь. Я возвращаю полностью измененное имя пользователя.
Поэтому я дам char char.
Первое имя будет:
CHARS: 193, 114, 118, 237, 122, 116, 26, 114, 26
Suck.
Я пробовал все, чтобы получить свое настоящее имя utf-8
Для этого mb_detect_encoding является UTF-8.
Я попытался использовать iconv, mb_convert_encoding, utf8_encode и декодировать.
Нет успеха. Пытался не указывать имя, не добиваться успеха.
Может кто-нибудь сказать мне, почему это так, и как я могу вернуть реальное имя utf8?
URL, который я отправил:
CMD = _notify-Validate & mc_gross = 10,00 & protection_eligibility = Приемлемые & address_status = подтверждены & payer_id = JA3YMCJFKSCNJ & налог = 0.00 & address_street = 1 + Главная + St & PAYMENT_DATE = 07% 3A41% 3A40 + сентября + 05% 2C + 2012 + ФДТ & payment_status = Завершенный * & кодировка = UTF-8 * & address_zip = 95131 & first_name =% C1rv% EDzt% 1AR% 1A & mc_fee = 0,59 & address_country_code = US & address_name =% C1rv% EDzt% 1AR % 1A + T% FCK% F6rf% FAr% F3G% E9p & notify_version = 3,6 & пользовательские = lolka_bolka% 3Bfalse% 3B% 3B% 3B% 3BHungary% 3B% 3B% 3B% 3B% 3B% 3B & payer_status = проверено & бизнес = vaso_1346830963_biz% 40mydomain.hu & address_country = United + States & address_city = San + Jose & количество = 1 & verify_sign = AVVJjJNeVwHbYcMDVfj2N1DqWwUdAtNQIpb9KIP99gZ2PY-LPoOYzSCc & payer_email = test_1346830232_per% 40mydomain.hu & txn_id = 4J747779YW528551F & payment_type = мгновенная & last_name = T% FCK% F6rf% FAr% F3G% E9p & address_state = СА & receiver_email = vaso_1346830963_biz% 40mydomain.hu & payment_fee = 0,59 & receiver_id = TGEHBCM G336WE & txn_type = web_accept & item_name = 510 + шелк & mc_currency = USD & ITEM_NUMBER = & residence_country = US & test_ipn = 1 & handling_amount = 0,00 & transaction_subject = lolka_bolka% 3Bfalse% 3B% 3B% 3B% 3BHungary% 3B% 3B % 3B% 3B% 3B% 3B & payment_gross = 10,00 & доставка = 0,00 & ipn_track_id = 6fe12a7a34b74
Ответы
Ответ 1
Вы должны изменить свои настройки в Paypal.
![End page]()
Ответ 2
Ответ Lenart велик и очень полезен, но я подумал, что добавлю несколько вещей, которые не вписывались бы в комментарий.
- Чтобы уточнить: установка
charset
на вашем сайте, в вашей форме заказа (например: через скрытый ввод), недостаточно, вам также необходимо установить кодировку по умолчанию - как объяснено в ответ Ленарта.
- Это потому, что эта опция применяется только к вашим собственным данным, в то время как параметр по умолчанию применяется к данным, отправленным PayPal для вашей обработки IPN script.
- Например: возможно, у вас есть
UTF-8
как скрытый ввод в вашей форме заказа, но IPN PayPal все еще находятся в windows-1252
. Вы можете исправить это, изменив настройку по умолчанию в своей учетной записи PayPal.
- Для целей тестирования вы хотите, чтобы установил эту опцию кодирования для вашей учетной записи продавца Sandbox! (Просто войдите в https://sandbox.paypal.com с подробными сведениями о продавце Sandbox.)
- После установки кодировки по умолчанию, если вы снова вернетесь к настройке, чтобы проверить его значение, оно покажет значение по умолчанию вместо установленного вами значения. Это ошибка (и иллюстрирует качество работы PayPal), и значение, которое вы установили ранее, на самом деле все еще установлено.
- Итак, если вы хотите убедиться в том, что такое кодировка, сделайте это внутри своей IPN-обработки script, проверив значение
charset
в сообщении POST.
- Кодировка по умолчанию, используемая PayPal, не работает должным образом.
- Например:
Western European Languages (including English)
приведет к тому, что символы с французским акцентом не будут работать.
- Вам лучше использовать UTF8 везде (показывается как
UTF-8
в IPN.)
п
ИЗМЕНИТЬ. И последнее, но не менее важное:
Если вы хотите протестировать свою IPN-обработку script со специальными или подчеркнутыми символами, у вас есть (теоретически) несколько разных вариантов, но большинство из них не работают на практике.
Здесь recap:
- Использование IPN Simulator не будет работать, поскольку он не может подтвердить запрос (он производит поддельные запросы, а не реальные).
- Создание учетной записи клиента Sandbox PayPal со специальными символами внутри имени или фамилии, к сожалению, невозможно.
- Пользовательский интерфейс не поддерживает его и попросит вас
Only enter letters
(sic).
- Функция массовой загрузки аккаунта не лучше, в результате
Something went wrong. One or more sandbox accounts could not be uploaded. Try again.
- Один из вариантов, который работает: протестируйте свой сайт с помощью Sandbox сервера PayPal и выберите оплатить без учетной записи PayPal.
- Таким образом, вы сможете вводить специальные или специальные символы для имени и фамилии.
- (Вы получите номер кредитной карты, тип и срок действия от Учетные записи разработчика /Sandbox > ваш аккаунт клиентa > Профиль > Финансирование - любое количество будет делать для значения CVV.)
Я сообщил об этой проблеме PayPal несколько месяцев назад, но ничего не изменилось.
п
Работа с PayPal - не забава и большая трата времени. Надеюсь, это поможет вам сэкономить время. Возьмите свой бизнес в другом месте, если сможете.