Безопасный токен Payflow Link не возвращает токен из-за Result=4 (а кто знает что еще?)
Я пытаюсь перейти от устаревшей ссылки Payflow с помощью размещенных страниц к использованию их безопасного метода токена (все еще PayFlow Link) с использованием ColdFusion и ударил стену. Я думаю, что я прошел через все вещи здесь, в стеке, и перепробовал все это, все еще без радости - оооочень.
Я создал форму, просто простой HTML, и он работает как положено
<cfscript>
variables.pfl_user="suppressed";
variables.pfl_vendor = "suppressed";
variables.pfl_partner = "PayPal";
variables.pfl_pwd = "suppressed";
variables.pfl_host_addr = "https://payflowlink.paypal.com";
//variables.pfl_gettoken_host_addr = "https://pilot-payflowpro.paypal.com";
variables.pfl_gettoken_host_addr = "https://payflowpro.paypal.com";
</cfscript>
<cfoutput>
<form method="post" action="#variables.pfl_gettoken_host_addr#">
<input type="text" name="USER" value="#variables.pfl_user#" />
<input type="text" name="VENDOR" value="#variables.pfl_vendor#" />
<input type="text" name="PARTNER" value="#variables.pfl_partner#" />
<input type="text" name="PWD" value="#variables.pfl_pwd#" />
<input type="text" name="CREATESECURETOKEN" value="Y" />
<input type="text" name="SECURETOKENID" value="#key#" />
<input type="text" name="TRXTYPE" value="S" />
<input type="text" name="AMT" value="24.95" />
<input type="text" name="CURRENCY" value="USD" />
<input type="submit" />
</form>
</cfoutput>
И это прекрасно работает, дает мне именно то, что я ищу. Но... Код cfhttp ниже просто возвращает мой securetokenId и код ошибки, который не имеет смысла..
Код результата 4 означает, что мой AMT неправильно отформатирован
RESULT=4&SECURETOKENID=08646BF7E5BC88E8A44015803CCF54&RESPMSG= Неверное количество
<cfhttp method="post" url="#pfl_gettoken_host_addr#" useragent="Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/533.7 (KHTML, like Gecko) Chrome/5.0.391.0 Safari/533.7" >
<cfhttpparam name="USER" type="formField" value="#variables.pfl_user#">
<cfhttpparam name="VENDOR" type="formField" value="#variables.pfl_vendor#">
<cfhttpparam name="PARTNER" type="formField" value="#variables.pfl_partner#">
<cfhttpparam name="PWD" type="formField" value="#variables.pfl_pwd#">
<cfhttpparam name="CREATESECURETOKEN" type="formField" value="Y">
<cfhttpparam name="SECURETOKENID" type="formField" value="#rStr.newTokenKey#">
<cfhttpparam name="TRXTYPE" type="formField" value="S">
<cfhttpparam name="AMT" type="formField" value="24.95">
<cfhttpparam name="CURRENCY" type="formfield" value="USD">
<cfhttpparam type="header" name="X-VPS-REQUEST-ID" value="#gettickcount()#" >
<cfhttpparam type="header" name="Accept-Encoding" value="gzip, deflate, sdch, x-gzip, compress, x-compress" >
<cfhttpparam type="header" name="X-VPS-CLIENT-TIMEOUT" value="10" >
<cfhttpparam type="header" name="Accept" value="application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5">
<cfhttpparam type="header" name="Accept-Language" value="en-US,en;q=0.8">
<cfhttpparam type="header" name="Accept-Charset" value="ISO-8859-1,utf-8;q=0.7,*;q=0.3">
<cfhttpparam type="header" name="content-type" value="text/name value">
</cfhttp>
У кого-нибудь есть идеи? Все идеи заголовков взяты из документов PayPal и вещей, которые я нашел здесь, в стеке.
Я должен что-то сделать, у меня есть какой-то экранный душ, использующий мою учетную запись PayPal для проверки его / ее украденных кредитных карт... поэтому я отключил PayPal, пока не внесу изменения. Я должен сделать этот первый вызов на стороне сервера, через сообщение, чтобы "защитить" мои учетные данные
Чтобы ответить на очевидный вопрос заранее:
- да, я генерирую новый ключ
- да все настроено правильно (согласно PayPal) в моем аккаунте
- да, я использую одни и те же переменные (за исключением недавно созданного SECURETOKENID) для обоих запросов
M
** Решение довольно простое; хотя найти актуальную проблему было немного работы. Для всех тегов CFHTTPPARAM type=formfield выберите encoded = "no"
**
1 ответ
Это был случай! RTFM.
** Решение довольно простое; хотя найти настоящую проблему было немного труда, хотя задним числом я должен был сделать это сразу.
РЕШЕНИЕ: Для всех тегов CFHTTPPARAM type=formfield выберите encoded="no"
Чтобы найти проблему, которую я опубликовал со страницы на моем сервере разработки, на страницу отслеживания на моем сервере разработки, где я использовал GetHttpRequestData(), чтобы выгрузить то, что я отправлял. Как только я увидел кодировку, я понял, в чем проблема, и оттуда решение было простым.