PayPal
Создание подписки / периодические платежи
Поиск…
параметры
| параметр | подробности |
|---|---|
| billingAgreementAttributes | Объект конфигурации для создания биллингового соглашения |
| billingPlan | Идентификатор плана платежей из строки запроса |
| billingPlanAttribs | Объект конфигурации для создания платежного плана |
| billingPlanUpdateAttributes | Объект конфигурации для изменения плана фактурирования в активное состояние |
| ID клиента | Идентификатор клиента вашего приложения (ключи OAuth) |
| HTTP | Ссылка на пакет http для настройки нашего простого сервера |
| ISODate | Дата ISO для установки даты начала подписки |
| связи | Объект ссылки HATEOAS для извлечения URL-адреса переадресации в PayPal |
| Титулы | Параметры строки запроса |
| PayPal | Ссылка на SDK PayPal |
| секрет | Секрет вашего приложения (ключи OAuth) |
| знак | Акт одобрения биллингового соглашения, предоставленный после перенаправления PayPal для выполнения биллингового соглашения |
замечания
Эти примеры проходят процесс создания системы подписки / повторной оплаты с использованием PayPal.
Процесс создания подписки:
- Создайте тарифный план. Это многоразовая модель, которая описывает детали подписки.
- Активируйте тарифный план.
- Когда вы хотите создать подписку для пользователя, вы создаете соглашение о выставлении счетов, используя идентификатор плана фактурирования, на который они должны быть подписаны.
- После создания вы перенаправляете пользователя в PayPal для подтверждения подписки. После подтверждения пользователь перенаправляется обратно на веб-сайт продавца.
- Наконец, вы выполняете соглашение о выставлении счетов, чтобы начать подписку.
Шаг 2. Создание подписки для пользователя с использованием соглашения о выставлении счетов (образец узла)
Второй шаг к созданию подписки для пользователя - это создание и выполнение соглашения о выставлении счетов на основе существующего активированного плана фактурирования. В этом примере предполагается, что вы уже прошли и активировали тарифный план в предыдущем примере и имеете идентификатор для этого плана фактурирования для ссылки в примере.
Когда вы настраиваете соглашение о выставлении счетов для создания подписки для пользователя, вы будете следовать 3 шагам, которые могут напоминать обработку платежа PayPal:
- Вы создаете соглашение о выставлении счетов, ссылаясь на базовый тарифный план с помощью идентификатора.
- После создания вы перенаправляете пользователя в PayPal (при оплате через PayPal) для подтверждения подписки. После подтверждения PayPal перенаправляет пользователя обратно на ваш сайт, используя перенаправление, указанное в базовом тарифном плане.
- Затем вы выполняете соглашение о выставлении счетов, используя маркер, предоставленный обратно через перенаправление 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 выше), поэтому сохраните его в месте, на которое можно легко ссылаться.
На втором этапе подписки нам необходимо создать соглашение о выставлении счетов на основе только что созданного плана и выполнить его, чтобы начать обработку подписки для пользователя.