API доступа к Coldfusion CFHTTP Openpay.mx Неожиданный символ ('m' (код 109)): ожидается допустимое значение

У меня возникли проблемы с использованием API OpenPay.mx (платежи в Мексиканские банки и прочие платежные услуги). Этот API возвращает JSON. Я пытаюсь получить доступ к API с помощью CFHTTP, но он возвращает ошибку запроса HTTP 400 Incorrect.

Полная ошибка:

https://sandbox-api.openpay.mx/v1/maidzki {"category": "request", "description": "Неожиданный символ ('m' (код 109)): ожидалось допустимое значение (число, строка, массив, объект, 'true', 'false' или 'null ') "," http_code ": 400," error_code ": 1001," request_id ":" 79a19194-61a2-49e5-8cbc-c83f5c93ce69 "}

В списке ошибок из справки API об ошибках 1001-400 это объяснение:

Формат запроса - JSON, поля имеют неправильный формат или в запросе нет обязательных полей.

Код ColdFusion:

 <cfset request_id = "sk_722a9645ea0040899ccd1f0a53dfcf53">
 <cfset method="store">
 <cfset amount=100>
 <cfset description="Cargo con tienda">
 <cfset customer="Gabriel Villafuerte">

 <cfhttp url="https://sandbox-api.openpay.mx/v1/maidzkihk7utcvzhucwk/charges"
 method="post" charset="utf-8"  username="#request_id#" password=""
 throwonerror="no">
      <cfhttpparam type="header" name="Content-Type" value="application/json"/>
      <cfhttpparam name="method" type="formfield" value="#method#">
      <cfhttpparam name="amount" type="FormField" value="#amount#">
      <cfhttpparam name="description" type="FormField" value="#description#">
      <cfhttpparam name="customer" type="FormField" value="#customer#">
 </cfhttp>

<CFDUMP var="#cfhttp#">

<!---display results--->

<cfoutput>
    HTTP Response = #cfhttp.statusCode# <br>
       <textarea cols=80 rows=10>
           https://sandbox-api.openpay.mx/v1/maidzkihk7utcvzhucwk/charges
             #cfhttp.fileContent#
       </textarea>
 </cfoutput>

Вот правила доступа к OpenPay.mx API:  Правила OpenPay.mx

Кто-нибудь знает, как я могу дать правильный формат полей?


person Gabriel Villafuerte    schedule 27.05.2016    source источник


Ответы (1)


Я не знаком с API, но, просматривая документацию и примеры, подозреваю, что сообщение об ошибке означает именно то, что написано (выделено мной).

Формат запроса - не JSON, поля имеют неправильный формат ИЛИ в запросе нет обязательных полей.

Значения запроса должны быть отправлены как JSON, а не как отдельные поля, и, очевидно, должны содержать все требуемые значения. Вместо использования «поля формы» поместите значения в структуру. Преобразуйте его в JSON с помощью serializeJSON () < / а>. Затем передайте JSON в API, используя тип параметра body.

Вам нужно будет просмотреть примеры API для любого вызываемого метода, чтобы выяснить, какие параметры требуются. Однако Пример оплаты через магазин работал с некоторой незначительной модификации:

  • "Due_date" не может быть прошедшей датой.
  • «Order_id» должен быть значением, которое еще не обработано. (Я просто увеличил номер выборки на произвольную величину, пока не получил действительный идентификатор.)

Списание средств на примере магазина

<!--- sample request from API --->
<!--- note: increased "order_id" value by arbitrary amount --->
<cfset timeNow = now()>                 
<cfset requestData = {
   "method" : "store",
   "amount" : 100,
   "description" : "Cargo con tienda",
   "order_id" : "oid-00100",
   "due_date" : dateFormat(timeNow, "yyyy-mm-dd")&"T"&timeFormat(timeNow, "HH:nn:ss")
}>

 <cfhttp url="https://sandbox-api.openpay.mx/v1/mzdtln0bmtms6o3kck8f/customers/ag4nktpdzebjiye1tlze/charges"
    method="post" 
    charset="utf-8"  
    username="sk_e568c42a6c384b7ab02cd47d2e407cab:" 
    password=""
    throwonerror="no">
      <cfhttpparam type="header" name="Content-Type" value="application/json"/>
      <cfhttpparam type="body" value="#serializeJSON(requestData)#">
 </cfhttp>

 <cfdump var="#cfhttp#">

Результат:

OpenPay.mx Response

person Leigh    schedule 28.05.2016
comment
Ух ты !! Спасибо, Ли, вы много знаете о Json, это работает правильно, я внес необходимые настройки, и код состояния ответа в порядке, еще раз спасибо. С Уважением - person Gabriel Villafuerte; 29.05.2016
comment
Формат JSON довольно прост. Структуры обозначаются {} и содержат одно или несколько значений в формате { "keyName" : "SomeValue" }. Я просто скопировал строку запроса cURL в пример Charges via Store и изменил несколько значений :) - person Leigh; 29.05.2016