본문으로 건너뛰기

리다이렉션 URL없이 구현하기

기본 결제 방식에서는 고객이 LINE Pay 인증을 마치면 가맹점이 결제 요청 API 호출 시 입력한 리다이렉션 URL(redirectUrls.confirmUrl)로 고객이 보는 페이지를 리다이렉션합니다. 가맹점 입장에서 리다이렉션 URL이 요청됐다는 것은 고객이 LINE Pay 인증을 완료했으며, 결제 승인을 요청할 수 있다는 의미입니다.

다만, 결제를 요청할 때 리다이렉션 URL 정보를 제공하지 않고, LINE Pay 인증 후 LINE Pay에서 가맹점 서버로 어떤 호출도 하지 않도록 만들 수 있습니다. 이렇게 하면 고객은 LINE Pay 인증 후 결제 승인용 페이지로 이동되지 않으며, 가맹점 서버는 결제 승인을 요청할 수 있는 상태인지 파악하기 위해 LINE Pay 서버에 결제 상태를 확인해야 합니다. 리다이렉션 URL없이 구현할 때 결제 작업 흐름은 다음과 같습니다.

리다이렉션 URL을 제공하지 않고 결제를 구현하려면 결제 요청 API를 호출할 때 리다이렉션 URL을 호출하는 방식을 설정하는 필드(options.redirectUrls.confirmUrlType)의 값을 "NONE"으로 설정하세요. 그러면 고객이 LINE Pay 인증을 완료해도 LINE Pay 서버는 가맹점으로 어떤 HTTP 요청도 보내지 않습니다. 다음은 리다이렉션 URL을 제공하지 않는 방식으로 결제를 요청하는 예입니다.

온라인 API를 호출할 때 필요한 자격 증명 정보를 얻는 방법은 API 자격 증명 준비를 참고하세요. 이 페이지에 설명된 코드 예제는 API 자격 증명 준비 코드 예제에 정의된 requestOnlineAPI() 함수를 이용합니다.

try {
// 리다이렉션 URL없이 결제 요청
let response = await requestOnlineAPI({
method: "POST",
baseUrl: targetAPIServer,
apiPath: "/v3/payments/request",
data: {
amount: 1000,
currency: "TWD",
// ...
redirectUrls: {
// ...
confirmUrlType: "NONE",
},
},
});

console.log("Response: ", response);
} catch (error) {
console.log(error);
}

리다이렉션 URL 정보를 제공하지 않고 결제를 완료하려면 가맹점 서버는 LINE Pay 서버에 결제 승인을 요청해야 합니다. 리다이렉션 URL을 제공하지 않는 상태에서 결제 승인을 요청할 수 있는지 파악하려면 결제 요청 상태를 조회하는 API를 일정 간격(1 초 주기 권장)으로 호출하세요. 이때, 결제 요청 시 응답으로 받았던 트랜잭션 ID(info.transactionId)가 필요합니다. 다음은 결제 요청 상태를 조회하는 코드입니다.

let intervalId = null;

const getPayRequestStatus = async function (requestTransactionId) {
try {
if (!requestTransactionId) throw new Error("Transaction ID is required!");
let response = await requestOnlineAPI({
method: "GET",
baseUrl: targetAPIServer,
apiPath: `/v3/payments/requests/${requestTransactionId}/check`,
});

switch (response.returnCode) {
case "0000":
console.log("In progress");
break;
case "0110":
console.log("Finished");
// Do something
case "0121":
console.log("Cancelled");
// Do something

// ...

default:
clearInterval(intervalId);
}
} catch (error) {
console.log(error);
}
};

intervalId = setInterval(getPayRequestStatus("2023042201206549310"), 1000);

트랜잭션 ID 정보를 다룰 때 서비스 구현 언어에 따라 트랜잭션 ID를 문자열로 처리해야 할 수도 있습니다. 자세한 설명은 트랜잭션 ID를 참고하세요.

결제 요청 상태를 조회하면 다음과 같은 응답이 전달됩니다.

{
"returnCode": "0000",
"returnMessage": "success"
}

결과 코드(returnCode)에 따라 결제 요청 상태를 파악할 수 있으며, 다음 세 가지 상태를 파악해야 합니다.

  • 0000: 고객이 LINE Pay 인증을 완료하기 전 상태입니다.
  • 0110: 고객이 LINE Pay 인증을 완료해 결제 승인을 실행할 수 있는 상태입니다.
  • 0121: 고객이 결제를 취소했거나 LINE Pay 인증 대기 시간을 초과한 상태입니다.