Как создать переменную повторяющегося платежа в paypal в node.js - PullRequest
0 голосов
/ 05 марта 2019

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

Вещи, которые я пробовал:

  1. Подписки: у меня тоже есть подписки на оформление заказа, но подписки имеют фиксированную сумму.
  2. Paypal-rest-sdk:Paypal rest sdk не позволит мне изменить payment_definitions, скорее всего, потому что он просто создает стандартную подписку, а не переменную
(async function() {

    const paypal = require("paypal-rest-sdk");

    paypal.configure({
        'mode': 'sandbox', //sandbox or live
        'client_id': process.env.PAYPAL_CLIENT_ID,
        'client_secret': process.env.PAYPAL_SECRET_KEY
    });

    var billingPlanAttributes = {
        "description": "Create Plan for Regular",
        "merchant_preferences": {
                "auto_bill_amount": "yes",
                "cancel_url": "http://www.cancel.com",
                "initial_fail_amount_action": "continue",
                "max_fail_attempts": "1",
                "return_url": "http://www.success.com",
                "setup_fee": {
                        "currency": "USD",
                        "value": "25"
                }
        },
        "name": "Testing1-Regular1",
        "payment_definitions": [
                {
                        "amount": {
                                "currency": "USD",
                                "value": "100"
                        },
                        "charge_models": [
                                {
                                        "amount": {
                                                "currency": "USD",
                                                "value": "10.60"
                                        },
                                        "type": "SHIPPING"
                                },
                                {
                                        "amount": {
                                                "currency": "USD",
                                                "value": "20"
                                        },
                                        "type": "TAX"
                                }
                        ],
                        "cycles": "0",
                        "frequency": "MONTH",
                        "frequency_interval": "1",
                        "name": "Regular 1",
                        "type": "REGULAR"
                }
        ],
        "type": "INFINITE"
    };

    const createdBillingPlan = await new Promise((resolve, reject) => {
        paypal.billingPlan.create(billingPlanAttributes, function (error, createdBillingPlan) {
            if (error) {
                    reject(error);
            } else {
                    resolve(createdBillingPlan)
            }
        });
    });

    // update
    var billing_plan_update_attributes = [
    {
            "op": "replace",
            "path": "/",
            "value": {
                    "payment_definitions": [
                        {
                            ...createdBillingPlan.payment_definitions[0],
                            "amount": {
                                "currency": "INR",
                                "value": 100
                            }
                        }
                ]
            }   
    }
    ];

    console.log(billing_plan_update_attributes);

    paypal.billingPlan.update(createdBillingPlan.id, billing_plan_update_attributes, function (error, response) {
            if (error) {
                    console.log(error.response);
                    throw error;
            } else {
                    paypal.billingPlan.get(createdBillingPlan.id, function (error, updatedBillingPlan) {
                            if (error) {
                                    console.log(error.response);
                                    throw error;
                            } else {
                                    console.log(JSON.stringify(updatedBillingPlan));
                            }
                    });
            }
    });
})();

Выше кода выдает

{ name: 'BUSINESS_VALIDATION_ERROR',
  details:
   [ { field: 'payment_definitions',
       issue: 'patch is not supported for this field.' } ],
  message: 'Validation Error.',
  information_link:
   'https://developer.paypal.com/docs/api/payments.billing-plans#errors',
  debug_id: 'someid',
  httpStatusCode: 400 }

Некоторые ссылки, которые мне показались интересными:

  1. https://www.paypal -community.com / t5 / Архив торговых услуг / Подписка с переменной суммой в месяц/ td-p / 49864
  2. https://developer.paypal.com/docs/classic/express-checkout/integration-guide/ECRecurringPayments/#

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

Ответы [ 2 ]

0 голосов
/ 18 июля 2019

Нет, вы ошибаетесь, подписки не имеют фиксированной цены.В подписках есть опция типа seat-based pricing.Все, что вам нужно сделать, это изменить ваш JSON при создании плана.Вот пример плана JSON за 1 доллар базовой цены.

{
    "product_id": "PROD-60L70341GH758414Y",
    "name": "Basic Plan",
    "description": "Basic plan",
    "billing_cycles": [
        {
          "frequency": {
            "interval_unit": "MONTH",
            "interval_count": 1
          },
          "tenure_type": "REGULAR",
          "sequence": 1,
          "total_cycles": 12,
          "pricing_scheme": {
            "fixed_price": {
              "value": "1",
              "currency_code": "USD"
            }
          }
        }
      ],
    "payment_preferences": {
      "service_type": "PREPAID",
      "auto_bill_outstanding": true,
      "setup_fee_failure_action": "CONTINUE",
      "payment_failure_threshold": 3
    },
    "quantity_supported": true

}

Наиболее важной частью здесь является quantity_supported": true, это означает, что вы можете предоставить свойство quantity при создании подписки.Допустим, вы хотите создать подписку за 12 долларов США, тогда все, что вам нужно сделать, это указать quantity как 12. При создании подписки вашему JSON может понравиться это

   'plan_id': 'P-6AG14992W7150444HLUYGM5I',
   'quantity': "12"

Надеюсь, это поможет.

0 голосов
/ 23 мая 2019

Вот некоторые ссылки и шаги, которые могут помочь.Мы будем использовать тарифные планы и биллинговые соглашения, чтобы создать соглашение для платежа PayPal.Это сделано Перед созданием платежного поручения.Я нашел код ссылки здесь: https://github.com/parveen7551/paypal

Чтобы понять код, вы можете выполнить следующие шаги.

  1. Со стороны пользовательского интерфейса, учитывая, что вы создали любое событие, где вы запросилидля URL, который создаст соглашение (req, res).

  2. Внутри createAgreement мы предоставляем URL для соглашения о процессе, поэтому после перенаправления пользователя на шаге 1 ему необходимо принять соглашение и подтвердить его, он перенаправлен на processaggreement, который является еще одним маршрутом нашего сервера processAgreement (req, res).

  3. мы должны выполнить биллинговое соглашение внутри processAgreement (req, res) с токеном(по запросу PayPal), который мы получили бы после создания Соглашения о выставлении счета.

  4. После успешного согласования вы будете получать счета согласно подписке.

...