Поиск…


параметры

параметр подробности
billingAgreementAttributes Объект конфигурации для создания биллингового соглашения
billingPlan Идентификатор плана платежей из строки запроса
billingPlanAttribs Объект конфигурации для создания платежного плана
billingPlanUpdateAttributes Объект конфигурации для изменения плана фактурирования в активное состояние
ID клиента Идентификатор клиента вашего приложения (ключи OAuth)
HTTP Ссылка на пакет http для настройки нашего простого сервера
ISODate Дата ISO для установки даты начала подписки
связи Объект ссылки HATEOAS для извлечения URL-адреса переадресации в PayPal
Титулы Параметры строки запроса
PayPal Ссылка на SDK PayPal
секрет Секрет вашего приложения (ключи OAuth)
знак Акт одобрения биллингового соглашения, предоставленный после перенаправления PayPal для выполнения биллингового соглашения

замечания

Эти примеры проходят процесс создания системы подписки / повторной оплаты с использованием PayPal.

Процесс создания подписки:

  1. Создайте тарифный план. Это многоразовая модель, которая описывает детали подписки.
  2. Активируйте тарифный план.
  3. Когда вы хотите создать подписку для пользователя, вы создаете соглашение о выставлении счетов, используя идентификатор плана фактурирования, на который они должны быть подписаны.
  4. После создания вы перенаправляете пользователя в PayPal для подтверждения подписки. После подтверждения пользователь перенаправляется обратно на веб-сайт продавца.
  5. Наконец, вы выполняете соглашение о выставлении счетов, чтобы начать подписку.

Шаг 2. Создание подписки для пользователя с использованием соглашения о выставлении счетов (образец узла)

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

Когда вы настраиваете соглашение о выставлении счетов для создания подписки для пользователя, вы будете следовать 3 шагам, которые могут напоминать обработку платежа PayPal:

  1. Вы создаете соглашение о выставлении счетов, ссылаясь на базовый тарифный план с помощью идентификатора.
  2. После создания вы перенаправляете пользователя в PayPal (при оплате через PayPal) для подтверждения подписки. После подтверждения PayPal перенаправляет пользователя обратно на ваш сайт, используя перенаправление, указанное в базовом тарифном плане.
  3. Затем вы выполняете соглашение о выставлении счетов, используя маркер, предоставленный обратно через перенаправление PayPal.

В этом примере создается HTTP-сервер с поддержкой Express, чтобы продемонстрировать процесс соглашения о выставлении счетов.

Чтобы начать пример, сначала нам нужно настроить нашу конфигурацию. Мы добавляем четыре требования: SDK PayPal, body-parser для обработки закодированных JSON тел, http для нашей простой интеграции с сервером и express для платформы Express. Затем мы определяем наш идентификатор клиента и секрет, создавая приложение, настраиваем SDK для песочницы, а затем настраиваем bodyParser для обработки тел JSON.

var paypal = require('paypal-rest-sdk'),
    bodyParser = require('body-parser'),
    http = require('http'),
    app = require('express')();

var clientId = 'YOUR APPLICATION CLIENT ID';
var secret = 'YOUR APPLICATION SECRET';

paypal.configure({
  'mode': 'sandbox', //sandbox or live
  'client_id': clientId,
  'client_secret': secret
});

app.use(bodyParser.json());

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

http://localhost:3000/createagreement?plan=P-3N543779E9831025ECYGDNVQ

Теперь нам нужно использовать эту информацию для создания соглашения о выставлении счетов.

app.get('/createagreement', function(req, res){
    var billingPlan = req.query.plan;
    
    var isoDate = new Date();
    isoDate.setSeconds(isoDate.getSeconds() + 4);
    isoDate.toISOString().slice(0, 19) + 'Z';

    var billingAgreementAttributes = {
        "name": "Standard Membership",
        "description": "Food of the World Club Standard Membership",
        "start_date": isoDate,
        "plan": {
            "id": billingPlan
        },
        "payer": {
            "payment_method": "paypal"
        },
        "shipping_address": {
            "line1": "W 34th St",
            "city": "New York",
            "state": "NY",
            "postal_code": "10001",
            "country_code": "US"
        }
    };

    // Use activated billing plan to create agreement
    paypal.billingAgreement.create(billingAgreementAttributes, function (error, billingAgreement){
        if (error) {
            console.error(error);
            throw error;
        } else {
            //capture HATEOAS links
            var links = {};
            billingAgreement.links.forEach(function(linkObj){
                links[linkObj.rel] = {
                    'href': linkObj.href,
                    'method': linkObj.method
                };
            })

            //if redirect url present, redirect user
            if (links.hasOwnProperty('approval_url')){
                res.redirect(links['approval_url'].href);
            } else {
                console.error('no redirect URI present');
            }
        }
    });
});

Мы начинаем с извлечения идентификатора платежного плана из строки запроса и создания даты начала плана.

Следующее определение объекта, billingAgreementAttributes , состоит из информации для подписки. Он содержит читаемую информацию о плане, ссылку на идентификатор платежного плана, способ оплаты и данные о доставке (при необходимости для подписки).

Затем выполняется вызов для billingAgreement.create(...) , передавая объект billingAgreementAttributes мы только что создали. Если все будет успешным, мы должны вернуть объект соглашения об оплате, содержащий сведения о нашей недавно созданной подписке. Этот объект также содержит несколько ссылок HATEOAS, которые дают нам следующие шаги, которые можно предпринять в этом недавно созданном соглашении. Тот, о котором мы заботимся здесь, обозначается как approval_url .

Мы перебираем все предоставленные ссылки, чтобы поместить их в объект, который легко ссылается. Если approval_url является одной из этих ссылок, мы перенаправляем пользователя на эту ссылку, которая является PayPal.

На этом этапе пользователь подтверждает подписку на PayPal и перенаправляется обратно на URL-адрес, указанный в базовом тарифном плане. Наряду с этим URL-адресом PayPal также передает токен вдоль строки запроса. Этот токен - это то, что мы собираемся использовать для выполнения (или начала) подписки.

Давайте создадим эту функциональность в следующем маршруте.

app.get('/processagreement', function(req, res){
    var token = req.query.token;
    
    paypal.billingAgreement.execute(token, {}, function (error, billingAgreement) {
        if (error) {
            console.error(error);
            throw error;
        } else {
            console.log(JSON.stringify(billingAgreement));
            res.send('Billing Agreement Created Successfully');
        }
    });
});

Мы извлекаем токен из строки запроса, а затем вызываем вызов billingAgreement.execute , проходя через этот токен. Если все успешно, у нас теперь есть действительная подписка для пользователя. Объект возврата содержит информацию об активном биллинговом соглашении.

Наконец, мы настроили наш HTTP-сервер для прослушивания трафика на наши маршруты.

//create server
http.createServer(app).listen(3000, function () {
   console.log('Server started: Listening on port 3000');
});

Шаг 1. Создание модели подписки с использованием плана фактурирования (пример узла)

При создании подписки для пользователя сначала необходимо создать и активировать план фактурирования, который затем подписчивается на использование биллингового соглашения. Полный процесс создания подписки подробно описан в этом разделе.

В этом примере мы будем использовать SDK PayPal Node . Вы можете получить его из NPM, используя следующую команду:

npm install paypal-rest-sdk

В нашем .js-файле мы сначала настроили нашу конфигурацию SDK, которая включает добавление требования к SDK, определение нашего идентификатора клиента и секретности от создания нашего приложения , а затем настройку SDK для среды песочницы.

var paypal = require('paypal-rest-sdk');

var clientId = 'YOUR CLIENT ID';
var secret = 'YOUR SECRET';

paypal.configure({
  'mode': 'sandbox', //sandbox or live
  'client_id': clientId,
  'client_secret': secret
});

Затем нам нужно настроить два объекта JSON. Объект billingPlanAttribs содержит информацию и billingPlanAttribs оплаты для плана фактурирования, на который мы можем подписаться, и объект billingPlanUpdateAttributes содержит значения для установки плана фактурирования в активное состояние, что позволяет использовать его.

var billingPlanAttribs = {
    "name": "Food of the World Club Membership: Standard",
    "description": "Monthly plan for getting the t-shirt of the month.",
    "type": "fixed",
    "payment_definitions": [{
        "name": "Standard Plan",
        "type": "REGULAR",
        "frequency_interval": "1",
        "frequency": "MONTH",
        "cycles": "11",
        "amount": {
            "currency": "USD",
            "value": "19.99"
        }
    }],
    "merchant_preferences": {
        "setup_fee": {
            "currency": "USD",
            "value": "1"
        },
        "cancel_url": "http://localhost:3000/cancel",
        "return_url": "http://localhost:3000/processagreement",
        "max_fail_attempts": "0",
        "auto_bill_amount": "YES",
        "initial_fail_amount_action": "CONTINUE"
    }
};

var billingPlanUpdateAttributes = [{
    "op": "replace",
    "path": "/",
    "value": {
        "state": "ACTIVE"
    }
}];

Внутри объекта billingPlanAttribs есть некоторые релевантные фрагменты информации:

  • имя / описание / тип : Основная визуальная информация для описания плана и тип плана.
  • payment_definitions : информация о том, как план должен функционировать и быть выставлен счет. Подробнее о полях здесь .
  • merchant_preferences : дополнительные структуры вознаграждения, URL-адреса переадресации и настройки для плана подписки. Подробнее о полях здесь .

С помощью этих объектов мы теперь можем создавать и активировать тарифный план.

paypal.billingPlan.create(billingPlanAttribs, function (error, billingPlan){
    if (error){
        console.log(error);
        throw error;
    } else {
        // Activate the plan by changing status to Active
        paypal.billingPlan.update(billingPlan.id, billingPlanUpdateAttributes, function(error, response){
            if (error) {
                console.log(error);
                throw error;
            } else {
                console.log(billingPlan.id);
            }
        });
    }
});

Мы называем billingPlan.create(...) , передавая объект billingPlanAttribs который мы только что создали. Если это будет успешным, объект возврата будет содержать информацию о плане фактурирования. Для примера нам просто нужно использовать идентификатор платежного плана, чтобы активировать план для использования.

Затем мы вызываем billingPlan.update(...) , передавая идентификатор платежного плана и объект billingPlanUpdateAttributes мы создали ранее. Если это будет успешным, наш тарифный план теперь будет активным и готовым к использованию.

Чтобы создать подписку для пользователя (или нескольких пользователей) в этом плане, нам нужно будет ссылаться на идентификатор платежного плана ( billingPlan.id выше), поэтому сохраните его в месте, на которое можно легко ссылаться.

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



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow