Ошибка валидации при оформлении заказа PayPal

Я использую сценарий проверки PayPal на Angular5.

Я пытаюсь разбить строку, содержащую цену, и преобразовать результат в число с плавающей запятой, но получаю следующую ошибку:

{
"name": "VALIDATION_ERROR",
"details": [
    {
        "field": "transactions.amount",
        "issue": "Currency amount must be non-negative number, may optionally contain exactly 2 decimal places separated by '.', optional thousands separator ',', limited to 7 digits before the decimal point and currency which is a valid ISO Currency Code"
    }
],
"message": "Invalid request - see details",
"information_link": "https://developer.paypal.com/docs/api/payments/#errors",
"debug_id": "ea4b3e3713de"
}

request/</<@https://www.paypalobjects.com/api/checkout.js:14680:39

Вот моя конфигурация PayPal:

let price = parseFloat(this.objRate.split("$")[1]);
let amount = 1;

let total = price * amount;
this.payPalConfig = {
  env: 'sandbox',
  client: {
    sandbox: '<key>',
    production: '<key>'
  },
  commit: true,
  payment: (data: any, actions: any) => {
    return actions.payment.create({
      payment: {
        transactions: [{
          amount: {
            currency: "USD",
            total: Number(total).toFixed(2)
          }
        }]
      }
    });
  },
  onAuthorize: (data: any, actions: any) => {
    return actions.payment.execute().then((payment: any) => {
      this.payPalSuccess = true;
    });
  }

заранее спасибо

Вы пытались передать жестко закодированную десятичную дробь в поле «Итого»?

Gareth O'Connor 04.04.2018 17:27

Что вы имеете в виду под «жестко запрограммированной десятичной дробью»?

Gustavo García González 04.04.2018 17:30

Вместо «total: Number (total) .toFixed (2)» передайте «1.00» ...

Gareth O'Connor 04.04.2018 17:33

Фактически, когда я определил let price =1.55, он работает. Почему это могло быть?

Gustavo García González 04.04.2018 17:39

Должна быть проблема с этим - parseFloat (this.objRate.split ("$") [1]); Попробуйте отладить ввод

Gareth O'Connor 04.04.2018 17:44

Я отлаживаю это и возвращаю номер (console.info(typeof price))

Gustavo García González 04.04.2018 17:54

Но каково значение числа? console.info(price)

Gareth O'Connor 04.04.2018 17:59

Например, это строка 1 Month - $4.00 и вывод 4.

Gustavo García González 04.04.2018 18:02

Хорошо, итого должно быть 4, можете ли вы подтвердить с помощью console.info(total). Также замените total: Number(total).toFixed(2) на Number.parseFloat(total).toFixed(2);

Gareth O'Connor 04.04.2018 18:09

Итого не является строкой, и это аргумент для parseFloat()

Gustavo García González 04.04.2018 18:12

какое значение выводится для console.info(total)

Gareth O'Connor 04.04.2018 18:14

Обычно сумма, которую вы отправляете в PayPal, имеет неправильный формат. Чтобы увидеть, что вы отправляете, вы можете отлаживать локально или вы также можете проверить запрос, полученный от PayPal - войдите в песочницу и перейдите в меню / транзакции

Gareth O'Connor 04.04.2018 18:18

Извините, но я вижу только успешные транзакции на странице "Сводка"

Gustavo García González 04.04.2018 18:28
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
13
809
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я уже решил это, заменив переменную total в конфигурации paypal checkout на другое имя, например total1. Видимо возник конфликт между ключом конфигурации json и одноименной переменной.

Другие вопросы по теме