페이팔은 결제 연동이 매우 간단한 편이라, 따로 소스는 두지 않았고, 주의 사항만 메모를 해 두었습니다.
1. 개발 사이트
-> https://developer.paypal.com
페이팔은 테스트를 위한 SANDBOX 서버, 실제 거래를 위한 LIVE 서버를 운영하고 있습니다. SANDBOX 와 LIVE 서버는 같은 앱이라도 각각 다른 클라이언트 ID, 시크릿을 설정해 주어야 합니다.
2. 체크 아웃 예제 페이지.
-> https://developer.paypal.com/docs/checkout/integrate/#
클라이언트 아이디만 넣어 주고, 그냥 소스를 붙여 넣기만 해도 잘 동작합니다. 영수증 검증에 사용되는 값은, 결제 후 받는 data의 orderID, 혹은 details의 id 값을 넣으면 됩니다. (둘이 같은 값 입니다.). 이 페이지만 따라 하면 모든 연동이 끝이 납니다.
3. 클라이언트 SDK 설정.
클라이언트 SDK 설정에는 클라이언트 아이디만 넣어주면 기본적으로 설저이 끝이 나지만, 추가 옵션으로 통화 등을 설정할 수 있습니다.
4. 서버사이드 설정.
-> https://developer.paypal.com/docs/checkout/reference/server-integration/setup-sdk/
서버 사이드 설정의 SDK 설치 방법은 의외로 눈에 잘 띄지 않는데, 이 페이지에 있습니다.
5. 서버에서 결제 셋팅.
-> https://developer.paypal.com/docs/checkout/reference/server-integration/set-up-transaction/
서버에서 결제 처리를 할 이유는 잘 없지만, 페이팔에서 가능합니다. 일단 링크를 걸어 둡니다.
6. 결제.
capture는 실제 결제 처리를 하는 부분입니다. 만약 클라이언트에서 넘어온, 결제를 이 루틴으로 검증하려고 하면 오류를 만납니다. 결제는 아래 결제 확인 부분에서 처리하면됩니다.
7. 결제 확인.
-> https://developer.paypal.com/docs/checkout/reference/server-integration/get-transaction/
클라이언트에서 결제 하면 서버에서 주로 결제를 확인하는데 이 부분에서 하게 됩니다. 많이 쓰게 되니 소스 코드를 봐 두세요. 결제 확인 이후 res.json 등의 헤더 변경을 하는 방법으로 소스를 보내면 오류를 만납니다. res.end 메소드로 응답을 보내 주세요.
8. 예제.
-> https://github.com/paypal/Checkout-Nodejs-SDK/
문서에 있는 코드들을 보면, 쉽게 이해가 가지 않습니다. 생략된 것들이 많이서 인데, 일단 예제를 보면 쉽게 이해가 갑니다. 위 문서를 잘 읽어 보셨다면, 보자 마자 이해가 될 정도 입니다.
예제는 아래와 같이 들어 가면됩니다.
1. https://developer.paypal.com/docs/checkout/reference/server-integration/setup-sdk/#http-request-headers 문서로가서 화면 아래로 스크롤을 한뒤, Additional information에서 원하는 것을 선택하면됩니다.
9. 마지막으로 클라이언트에서 결제 소스.
제가 구현했던 결제 소스를 남겨 드립니다. 참고하시기 바랍니다.
// npm 모듈들.
const express = require( 'express' );
const paypal = require('@paypal/checkout-server-sdk');
module.exports.init = function(
_isDebug, _client_id, _secret, _sandbox_client_id, _sandbox_secret
){
// --- --- --- --- 페이팔 설정 관련 메소드들 입니다.
// 디버그 인지 여부에 따라 사용할 환경 설정 객체를 반환하는 메소드를 만들어 줍니다.
let environment = "";
if( _isDebug == "YES" )
{
console.log( "페이팔은 sandbox 모드로 동작합니다." );
environment = function()
{
return new paypal.core.SandboxEnvironment(
_sandbox_client_id, _sandbox_secret
);
}
}
else
{
console.log( "페이팔은 live 모드로 동작합니다." );
environment = function()
{
return new paypal.core.SandboxEnvironment(
_client_id, _secret
);
}
}
// 클라이언트를 설정합니다.
let client = new paypal.core.PayPalHttpClient( environment() );
// 영수증 가지고 오는 동작을 하는 메소드 입니다.
let captureOrder = async function(orderId) {
// request = new paypal.orders.OrdersCaptureRequest(orderId);
request = new paypal.orders.OrdersGetRequest(orderId);
// request.requestBody({});
// Call API with your client and get a response for your call
let response = await client.execute(request);
// console.log(`Response: ${JSON.stringify(response)}`);
// If call returns body in response, you can get the deserialized version from the result attribute of the response.
// console.log(`Capture: ${JSON.stringify(response.result)}`);
return response;
}
// --- --- --- --- 메일 라우터 및 전역에서 사용되는 메소드들 입니다.
let mainRouter = express.Router();
// --- --- --- --- 라우터들 입니다.
// 연결되었는지 확인을 위한 에코 처리를 합니다.
mainRouter.use( "/echo", function( req, res, next ){
// 입력 받은 값을 그대로 반환합니다.
res.end( req.body.echo );
return;
} );
// 페이팔 영수증 검증.
mainRouter.use( "/receipt", async function( req, res, next ){
console.log( req.body );
// 2a. Get the order ID from the request body
const orderID = req.body.receipt;
let capture = await captureOrder(orderID);
console.log( capture );
return res.end("일단 연동 되었음.");
} )
// --- --- --- --- 반환 및 후처리 메소드들 입니다.
// 결과를 반환합니다.
return mainRouter;
}
// 문서의 끝 입니다.
'Node.js' 카테고리의 다른 글
node.js 오류 해결법들 간단히. (0) | 2019.10.09 |
---|---|
Node.js 페이팔 결제 연동 (Checkout, REST API) (0) | 2019.07.29 |
nodejs를 이용한 paypal 결제 연동하기 (구독) (1) | 2019.07.14 |
node.js socket.io 를 이용한 소켓 구현 (0) | 2019.06.03 |
node.js ws 를 이용한 웹소켓 구현. (6) | 2019.06.02 |