PayPal
정기 가입 / 정기 지불 생성
수색…
매개 변수
| 매개 변수 | 세부 |
|---|---|
| billingAgreementAttributes | 청구서 작성 계약 구성 개체 |
| 청구 플랜 | 쿼리 문자열에서 청구 계획 ID |
| billingPlanAttribs | 청구 계획을 작성하는 구성 오브젝트 |
| billingPlanUpdateAttributes | 청구 계획을 활성 상태로 변경하기위한 구성 개체 |
| clientId | 애플리케이션 클라이언트 ID (OAuth 키) |
| http | 단순한 서버를 설정하기위한 http 패키지 참조 |
| isoDate | 가입 시작 날짜를 설정하기위한 ISO 날짜 |
| 모래밭 | PayPal로 리다이렉트 URL을 추출하는 HATEOAS 링크 오브젝트 |
| 매개 변수 | 쿼리 문자열 매개 변수 |
| 페이팔 | PayPal SDK에 대한 참조 |
| 비밀 | 애플리케이션 비공개 (OAuth 키) |
| 토큰 | 결제 계약을 실행하기 위해 PayPal 리디렉션 후 제공되는 결제 계약 승인 토큰 |
비고
이 예제는 PayPal을 사용하여 가입 / 반복 지불 시스템을 만드는 과정을 거칩니다.
구독을 만드는 과정은 다음과 같습니다.
- 요금제를 만듭니다. 이것은 구독의 세부 사항을 설명하는 재사용 가능한 모델입니다.
- 청구 계획을 활성화하십시오.
- 사용자에 대한 구독을 만들려면 구독해야하는 요금제의 ID를 사용하여 결제 계약을 만듭니다.
- 생성이 완료되면 사용자를 PayPal로 리디렉션하여 가입을 확인합니다. 확인되면 사용자는 판매자 웹 사이트로 리디렉션됩니다.
- 마지막으로, 요금 청구 계약을 실행하여 가입을 시작합니다.
2 단계 : 청구 계약을 사용하여 사용자에 대한 서브 스크립 션 만들기 (노드 샘플)
사용자에 대한 가입을 생성하는 두 번째 단계는 기존의 활성화 된 요금제를 기반으로 결제 계약을 만들고 실행하는 것입니다. 이 예에서는 앞의 예에서 청구 계획을 이미 완료하고 활성화했으며이 예에서 참조 할 청구 계획의 ID가 있음을 전제로합니다.
사용자에 대한 구독을 만들기 위해 결제 계약을 설정하는 경우 PayPal 지불 처리와 같은 3 단계를 수행하게됩니다.
- ID를 통해 기본 결제 요금제를 참조하는 결제 계약을 생성합니다.
- 일단 생성되면 사용자를 PayPal로 리디렉션 (PayPal을 통해 결제하는 경우)하여 가입을 확인합니다. 확인되면 PayPal은 기본 요금제에 제공된 리디렉션을 사용하여 사용자를 사이트로 리디렉션합니다.
- 그런 다음 PayPal 리디렉션을 통해 다시 제공된 토큰을 사용하여 결제 계약을 체결합니다.
이 예제는 Express 기반 HTTP 서버를 설정하여 청구 약정 프로세스를 보여줍니다.
예제를 시작하려면 먼저 설정을해야합니다. 우리는 네 가지 요구 사항, 페이팔 SDK, 추가 body-parser , JSON 인코딩 된 시체를 처리하기위한 http 우리의 간단한 서버 통합을 위해, 그리고 express 익스프레스 프레임 워크. 그런 다음 클라이언트 ID와 암호를 정의하여 응용 프로그램을 만들고 샌드 박스 용 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로 리디렉션하여 가입을 확인하는 것입니다. 위의 예에서 계획 ID와 함께 다음 URL을로드하는 것과 같이 청구 계획 ID가 쿼리 문자열 매개 변수로 전달된다고 가정합니다.
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');
}
}
});
});
먼저 쿼리 문자열에서 요금제 계획 ID를 추출하고 계획을 시작할 날짜를 만듭니다.
다음 오브젝트 정의 인 billingAgreementAttributes 는 등록 정보로 구성됩니다. 여기에는 계획에 대한 읽기 가능한 정보, 청구 계획 ID에 대한 참조, 지불 방법 및 배송 세부 정보 (가입에 필요한 경우)가 포함됩니다.
다음으로 billingAgreement.create(...) 대한 호출이 만들어지고 방금 작성한 billingAgreementAttributes 객체를 전달합니다. 모두 성공하면 새로 생성 된 구독에 대한 세부 정보가 포함 된 결제 계약 개체를 Google에 전달해야합니다. 이 객체에는 새로 생성 된 계약에 대해 취할 수있는 다음 단계를 제공하는 여러 가지 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 단계 : 요금제를 사용하여 구독 모델 만들기 (노드 샘플)
사용자에 대한 가입을 생성 할 때 먼저 사용자가 요금 청구 계약을 사용하여 가입 한 요금제를 만들고 활성화해야합니다. 구독 만들기를위한 전체 프로세스는이 항목의 발언에서 자세히 설명합니다.
이 예제에서 우리는 PayPal Node SDK를 사용할 것 입니다. 다음 명령을 사용하여 NPM에서 얻을 수 있습니다.
npm install paypal-rest-sdk
우리의 .js 파일에서 우리는 먼저 SDK 요구 사항을 추가하고 클라이언트 ID와 비밀 키를 정의 하여 애플리케이션 을 생성 한 다음 샌드 박스 환경을 위해 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 객체에는 사용자를 가입 할 수있는 청구 계획에 대한 정보 및 지불 내역이 포함되어 있으며 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);
}
});
}
});
방금 작성한 billingPlanAttribs 객체를 전달하여 billingPlan.create(...) 호출합니다. 성공한 경우 반환 객체에는 요금제에 대한 정보가 포함됩니다. 예를 들어 사용 계획을 활성화하려면 요금제 ID를 사용해야합니다.
다음으로 billingPlan.update(...) 호출하여 이전에 작성한 청구 계획 ID와 billingPlanUpdateAttributes 객체를 billingPlanUpdateAttributes 합니다. 이것이 성공적이면 Google의 결제 요금제가 활성화되어 사용할 준비가되었습니다.
이 계획에서 사용자 (또는 여러 사용자)에 대한 가입을 만들려면 위의 billingPlan.id 를 참조해야하므로 쉽게 참조 할 수있는 장소에 저장하십시오.
두 번째 가입 단계에서는 방금 작성한 계획을 기반으로 청구 계약을 작성하고이를 실행하여 사용자의 가입 처리를 시작해야합니다.