Почему моя кнопка PayPal продолжает указывать на «Песочницу» вместо производства? - PullRequest
0 голосов
/ 10 ноября 2019

Я проверил платежи на своем сайте, и он успешно работает в песочнице. Но теперь я хочу, чтобы он указывал на производство, а не на песочницу, поэтому я следовал инструкциям на https://developer.paypal.com/docs/classic/lifecycle/goingLive/.

В моем коде всякий раз, когда у меня есть клавиша sandbox, заполненнаязначение, которое я получаю с веб-сайта разработчика PayPal, оно без проблем перенаправляет в «песочницу».

Однако, когда у меня есть ключ production, заполненный секретным ключом, который я получил из Мои приложения и учетные данные> Интерактивная вкладка> Создать приложение> Секретный ключ (предположительно, секретный ключ должен быть идентификатором производства? Это не было ясно в документах) моя страница никуда не перенаправляется, она просто возвращается в корзину.

Как мне успешно указать мою кнопку PayPal на производственную среду?

Вот пакет npm, который я использую: https://www.npmjs.com/package/react-paypal-express-checkout

Примечание. Я создалфайл .env и поместил туда мой ключ, чтобы избежать размещения конфиденциальной информации на стороне клиента.

import React from 'react';
import PaypalExpressBtn from 'react-paypal-express-checkout';

export default class MyApp extends React.Component {
    render() {
        const onSuccess = (payment) => {
            // Congratulation, it came here means everything's fine!
            console.log("The payment was succeeded!", payment);
            this.props.clearCart();
            this.props.history.push('/');
            // You can bind the "payment" object's value to your state or props or whatever here, please see below for sample returned data
        }

        const onCancel = (data) => {
            // User pressed "cancel" or close Paypal's popup!
            console.log('The payment was cancelled!', data);
            // You can bind the "data" object's value to your state or props or whatever here, please see below for sample returned data
        }

        const onError = (err) => {
            // The main Paypal's script cannot be loaded or somethings block the loading of that script!
            console.log("Error!", err);
            // Because the Paypal's main script is loaded asynchronously from "https://www.paypalobjects.com/api/checkout.js"
            // => sometimes it may take about 0.5 second for everything to get set, or for the button to appear
        }

        let env = 'production'; // you can set here to 'production' for production
        let currency = 'USD'; // or you can set this value from your props or state
        // let total = 1; // same as above, this is the total amount (based on currency) to be paid by using Paypal express checkout
        // Document on Paypal's currency code: https://developer.paypal.com/docs/classic/api/currency_codes/

        const client = {
            sandbox:    'YOUR SANDBOX ID',
            production: process.env.REACT_APP_ID,
        }
        // In order to get production's app-ID, you will have to send your app to Paypal for approval first
        // For sandbox app-ID (after logging into your developer account, please locate the "REST API apps" section, click "Create App"):
        //   => https://developer.paypal.com/docs/classic/lifecycle/sb_credentials/
        // For production app-ID:
        //   => https://developer.paypal.com/docs/classic/lifecycle/goingLive/

        // NB. You can also have many Paypal express checkout buttons on page, just pass in the correct amount and they will work!
        return (
            <PaypalExpressBtn env={env} client={client} currency={currency} total={this.props.total} onError={onError} onSuccess={onSuccess} onCancel={onCancel} />
        );
    }
}

Ошибка в консоли:

Uncaught Error: Error: Request to post https://www.paypal.com/v1/oauth2/token failed with 401 
error. Correlation id: 674c0eeafa7a, 674c0eeafa7a
...