파라미터 위변조방지를 위하여 클라이언트와 서버 상호간에 해쉬값을 검증합니다.
업무별로 요청 파라미터가 상이하므로 업무별 해쉬생성 로직을 참고하여 검증합니다.

리디렉션 응답파리미터를 검증하기 NodeJS 코드입니다.

 const crypto = require('crypto');
 const { URLSearchParams } = require('url');
  
 function VerifySignature(responseObj, secretKey) {
	 const params = new URLSearchParams();
	 
	 params.append('order_ref', responseObj.order_ref);
	 params.append('channel_order_ref', responseObj.channel_order_ref);
	 params.append('merchant_order_ref', responseObj.merchant_order_ref);
	 params.append('status', responseObj.status);
	 params.sort();
	 
	 const message = params.toString();
	 const hashValue = crypto.createHmac('sha256', secretKey).update(message).digest('base64');
	 if(hash_value !==  requestObj.signature_hash){
		// 취소처리 및 위변조에 대한 결과저장
	 }
 }
리디렉션으로 전달된 결제결과 파라미터에 대해 해쉬값을 생성한 후 응답 파라미터 중 signature_hash의 값과의 일치여부를 확인합니다.
클라이언트에서 생성한 값과 수신한 값이 불일치한다면 위변조로 판단 후 결제취소 등의 처리를 진행합니다.

일반결제(통합결제창) 웹훅결과를 검증하기 위한 NodeJS 코드입니다.

 const crypto = require('crypto');
 const { URLSearchParams } = require('url');
  
 function VerifySignature(webhookResponseObj, secretKey) {
	 const params = new URLSearchParams();
	 
	 params.append('currency', webhookResponseObj.currency);
	 params.append('amount', webhookResponseObj.amount);
	 params.append('merchant_order_ref', webhookResponseObj.merchant_order_ref);
	 params.append('link_ref', webhookResponseObj.link_ref);
	 params.append('country_code', webhookResponseObj.country_code);
	 params.append('status', webhookResponseObj.status);
	 params.sort();
	 
	 const message = params.toString();
	 const hashValue = crypto.createHmac('sha256', secretKey).update(message).digest('base64');
	 if(hash_value !==  webhookResponseObj.signature_hash){
		// 취소처리 및 위변조에 대한 결과저장
	 }
 }
웹훅으로 전달된 결제결과 파라미터에 대해 해쉬값을 생성한 후 응답 파라미터 중 signature_hash의 값과의 일치여부를 확인합니다.
클라이언트에서 생성한 값과 수신한 값이 불일치한다면 위변조로 판단 후 결제취소 등의 처리를 진행합니다.

일반결제(다이렉트호출) 웹훅결과를 검증하기 위한 NodeJS 코드입니다.

 const crypto = require('crypto');
 const { URLSearchParams } = require('url');
  
 function VerifySignature(webhookResponseObj, secretKey) {
	 const params = new URLSearchParams();
	 
	 params.append('currency', webhookResponseObj.currency);
	 params.append('amount', webhookResponseObj.amount);
	 params.append('order_ref', webhookResponseObj.order_ref);
	 params.append('merchant_order_ref', webhookResponseObj.merchant_order_ref);
	 params.append('channel_order_ref', webhookResponseObj.channel_order_ref);
	 params.append('country_code', webhookResponseObj.country_code);
	 params.append('status', webhookResponseObj.status);
	 params.append('channel_key', webhookResponseObj.channel_key);
	 params.append('method_name', webhookResponseObj.method_name);
	 params.sort();
	 
	 const message = params.toString();
	 const hashValue = crypto.createHmac('sha256', secretKey).update(message).digest('base64');
	 if(hash_value !==  webhookResponseObj.signature_hash){
		// 취소처리 및 위변조에 대한 결과저장
	 }
 }
웹훅 전달된 결제결과 파라미터에 대해 해쉬값을 생성한 후 응답 파라미터 중 signature_hash의 값과의 일치여부를 확인합니다.
클라이언트에서 생성한 값과 수신한 값이 불일치한다면 위변조로 판단 후 결제취소 등의 처리를 진행합니다.

빌링키발급요청 웹훅결과를 검증하기 위한 해쉬값 생성을 위한 NodeJS 코드입니다.

 const crypto = require('crypto');
 const { URLSearchParams } = require('url');
  
 function VerifySignature(webhookResponseObj, secretKey) {
	 const params = new URLSearchParams();
	 
	 params.append('currency', webhookResponseObj.currency);
	 params.append('order_ref', webhookResponseObj.order_ref);
	 params.append('merchant_order_ref', webhookResponseObj.merchant_order_ref);
	 params.append('status', webhookResponseObj.status);
	 params.sort();
	 
	 const message = params.toString();
	 const hashValue = crypto.createHmac('sha256', secretKey).update(message).digest('base64');
	 if(hash_value !==  webhookResponseObj.signature_hash){
		// 취소처리 및 위변조에 대한 결과저장
	 }
 }
웹훅으로 전달된 결제결과 파라미터에 대해 해쉬값을 생성한 후 응답 파라미터 중 signature_hash의 값과의 일치여부를 확인합니다.
클라이언트에서 생성한 값과 수신한 값이 불일치한다면 위변조로 판단 후 결제취소 등의 처리를 진행합니다.