У меня возникла проблема с получением PayPal Payflow Gateway, который принимает мой HTTPS POST с неамериканскими символами ASCII. Не важно, что я публикую с этими специальными символами, похоже, хочет принять только закодированные в US-ASCII байты. Если я отправляю кодированные байты UTF-8, он все равно работает, но не выполняет синтаксический анализ некоторых значений запроса NVP. Я знаю, что это возможно, потому что я отправил тестовую страницу другого разработчика в мою учетную запись (NVP Quick Test), и это сообщение, похоже, сохраняет специальные символы.PayPal Payflow Gateway UTF-8 Персонажи
Вот пример. Я пробовал с МНОГО разных заголовков Content-Type и Accept/Accept-Charset, включая указание «; charset = UTF-8» или «; charset = utf-8» в Content-Type после текста/имени.
POST https://pilot-payflowpro.paypal.com/ HTTP/1.1
Content-Type: text/namevalue
User-Agent: KLMS Payflow API for Java
X-VPS-Request-ID: 36A4ED051A8B492ABF70E6BE51CB13D5
X-VPS-CLIENT-TIMEOUT: 20
Connection: close
X-VPS-VIT-INTEGRATION-PRODUCT: KLMS Payflow API for Java
X-VPS-VIT-INTEGRATION-VERSION: 2.0.008
X-VPS-VIT-PROXY: Y
X-VPS-VIT-RUNTIME-VERSION: 20.45-b01
X-VPS-VIT-OS-ARCHITECTURE: amd64
X-VPS-VIT-OS-VERSION: 6.1
X-VPS-VIT-OS-NAME: Windows 7
Cache-Control: no-cache
Pragma: no-cache
Host: pilot-payflowpro.paypal.com
Content-Length: 694
USER[8]=XXXXXXXX&VENDOR[13]=XXXXXXXXXXXXX&PARTNER[6]=PayPal&PWD[8]=XXXXXXXX&VERBOSITY[4]=HIGH&BILLTOEMAIL[28][email protected]&TRXTYPE[1]=A&TENDER[1]=C&ACCT[16]=4111111111111111&EXPDATE[4]=1117&CVV2[3]=123&BILLTOFIRSTNAME[4]=Josè&BILLTOLASTNAME[7]=Elkjærd&BILLTOSTREET[14]=123 Elm Street&BILLTOCITY[9]=Elm Creek&BILLTOSTATE[2]=VA&BILLTOZIP[5]=22203&BILLTOCOUNTRY[2]=US&BILLTOPHONENUM[12]=763-221-5593&CUSTBROWSER[108]=Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.91 Safari/537.36&CUSTHOSTNAME[12]=192.168.1.10&CUSTIP[12]=192.168.1.10&AMT[6]=600.00&CURRENCY[3]=USD&COMMENT1[26]=Law Enforcement Curriculum&COMMENT2[16]=Standard Version
HTTP/1.1 200 OK
Connection: close
Server: VPS-3.033.00
X-VPS-Request-ID: 36A4ED051A8B492ABF70E6BE51CB13D5
Date: Sun, 25 Jan 2015 17:45:05 GMT
Content-type: text/namevalue
Content-length: 199
RESULT=104&PNREF=B70P7B6EBAE7&RESPMSG=Timeout waiting for Processor response&TRANSTIME=2015-01-25 09:44:47&BILLTOFIRSTNAME=Jos &BILLTOLASTNAME=NotProvided&AMT=600.00&ACCT=1111&EXPDATE=1117&CARDTYPE=0
Игнорируйте это время ожидания 104. PayPal работает над этим. Вы можете видеть, что BILLTOFIRSTNAME - это Jos (странный персонаж, который не является), а символ æ в BILLTOLASTNAME, должно быть, заставил алгоритм синтаксического анализа NVP полностью не разбираться, потому что он говорит NotProvided.
Вот код, который преобразует строку Java в НВП отформатированный форме в байтах:
final byte[] requestBytes = requestString.getBytes(Charsets.UTF_8);
Любая идея, какой символ, кодирующий серверный НВП анализатор ищет по умолчанию, или как сказать ему, какой характер кодирование Я отправляю тело POST в?
[Payflow шлюз Документы:] (https://developer.paypal.com/webapps/developer/docs/classic/payflow/integration-guide/#supported-languages) 'Payflow шлюз поддерживает только ввод клиента и значения параметров API, которые находятся в обычных символах ASCII (английский язык). Payflow не поддерживает расширенные символы ASCII или любые другие наборы символов, отличные от обычного ASCII в это время. – EdSF