Ошибка PayPal ppxo_no_token_passed_to_payment aka "Нет платежа, переданного в платеж" - PullRequest
0 голосов
/ 04 июня 2018

В моем приложении реализована экспресс-проверка PayPal, и все работало без сбоев, пока мне не пришлось менять свои учетные данные сегодня.Для тестирования я использовал свою учетную запись PayPal, но теперь она должна быть переключена на учетную запись компании, поэтому я создал приложение REST и поменял местами ключи отладки и производства.Внезапно, когда я пытаюсь заплатить, я получаю ppxo_no_token_passed_to_payment, если я переключаюсь на свой старый открытый ключ, он все еще работает.Я подозреваю, что это проблема в PayPal, где мне нужно авторизовать или включить приложение или что-то, но, к сожалению, я не могу вспомнить ...

Вот код, о котором идет речь, но я действительно считаю, что нет ничего плохогос этим, как я уже сказал, если я добавлю свой старый открытый ключ, он все равно будет работать нормально.

  getPaypalButton(container: any, paypal: any) {

    return paypal.Button.render({

      env: __DEV__ ? "sandbox" : "production",

      style: this.style(),

      // Pass the client ids to use to create your transaction on sandbox and production environments

      client: {
        // from https://developer.paypal.com/developer/applications/
        sandbox: env.payments.paypal.sandbox, 
        production: env.payments.paypal.production
      },

      // Pass the payment details for your transaction
      // See https://developer.paypal.com/docs/api/payments/#payment_create for the expected json parameters
      payment: this.payment.bind(this),

      // Display a "Pay Now" button rather than a "Continue" button
      commit: true,

      // Pass a function to be called when the customer completes the payment
      onAuthorize: this.authorize.bind(this),

      // Pass a function to be called when the customer cancels the payment
      onCancel: this.cancel.bind(this)

    }, container)

  style() {
    return {
      label: 'paypal',
      size: 'responsive',    // small | medium | large | responsive
      shape: 'rect',     // pill | rect
      color: 'blue',     // gold | blue | silver | black
      tagline: false
    };
  }

  payment(data: any, actions: any) {

    return actions.payment.create({
      transactions: [
        {
          amount: {
            total: i18n.currencies.toHumanReadable(this.moneyControl.internalInput.value, "EUR").toFixed(2),
            currency: "EUR"
          }
        }
      ]
    }).catch((error: any) => {
      if (!this.moneyControl.internalInput.value) {
        this.moneyControl.displayError("validation.required");
      } else {
        this.moneyControl.displayError("deposit.paypalerror");
      }
    });
  }

  authorize(data: any, actions: any) {
    return web.request("/paypal", {
      method: "POST",
      data: {
        token: data.paymentToken,
        payment_id: data.paymentID,
        payer_id: data.payerID
      }
    }).then((response: any) => {
      console.log('The payment was completed!', response);

      this.completed();
    }).catch(function (error) {
      console.log(error);
    });
  }

  cancel(data: any) {
    this.moneyControl.displayError("deposit.paypalcancel");
  }

Следует отметить, что сгенерированная ошибка говорит env: "production", однако __DEV__ равно true.

country: "US"
env: "production"
host: "192.168.0.100:8080"
lang: "en"
pageID: ...
path: "/"
prev_corr_ids: ""
referer: "192.168.0.100:8080"
timestamp: 1528128652378
uid: ...
ver: "4.0.199"
windowID: ...

1 Ответ

0 голосов
/ 13 июня 2018

Из документов , объект, передаваемый в функцию actions.payment.create, должен содержать клавишу payment.

Таким образом, вместо объекта, который вы передаете сейчас, вы должны иметь:

return actions.payment.create({
  payment: {
    transactions: [
      {
        amount: {
          total: i18n.currencies.toHumanReadable(this.moneyControl.internalInput.value, "EUR").toFixed(2),
          currency: "EUR"
        }
      }
    ]
  }
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...