토스페이 연결 중인데 헤더에 값을 넘겨주라고 하는데 무슨 말인가요?
본문
연결했는데 테스트 결제내역을 볼 수없길래
토스쪽에 문의 메일을 보냈습니다.
<html>
<head>
<script src="https://js.tosspayments.com/v1/payment"></script>
</head>
<body>
<section>
<!-- ... -->
<span>총 주문금액</span>
<span>15,000 원</span>
<button id="payment-button">15,000원 결제하기</button>
</section>
<script>
var clientKey = 'test_ck_Z0RnYX2w532gxz2jkPVNeyqApQEJ'
var tossPayments = TossPayments(clientKey)
var button = document.getElementById('payment-button') // 결제하기 버튼
button.addEventListener('click', function () {
tossPayments.requestPayment('카드', {
amount: 15000,
orderId: 'xCyroSCYYpZumYCyxmBDh',
orderName: '토스 티셔츠 외 2건',
customerName: '박토스',
successUrl: 'http://localhost:8080/success',
failUrl: 'http://localhost:8080/fail',
})
})
</script>
</body>
</html>
https://docs.tosspayments.com/guides/using-api/authorization#%EC%9D%B8%EC%A6%9D
위의 페이지를 보여주면서 http헤더에 포함되어야 한다고 하는데
Authorization: Basic dGVzdF9za19PeUwwcVo0RzFWT0xvYkI2S3d2cm9XYjJNUVlnOg==
윈 부분을 어디에 어떻게 추가해야 하나요?
일단 Basic 다음의 값은 {secret key}:를 base62 인코딩한 값이란 것은 알겠습니다.
그럼 위의 Authorization 부분은 어디에 추가해야 하나요?
혹시방식은
header ("Authorization: Basic" .base64_encode($secret key));
인가요? 그럼 위치는 어디인가요? htm테그보다 위인가요?
!-->!-->!-->답변 2
https://tossdev.github.io/gettingstarted.html
여기를 보시면
PHP영역에
$arrayBody = array();
$arrayBody["orderNo"] = "1";
$arrayBody["amount"] = 10000;
$arrayBody["amountTaxFree"] = 0;
$arrayBody["productDesc"] = "토스티셔츠";
$arrayBody["apiKey"] = "sk_test_w5lNQylNqa5lNQe013Nq";
$arrayBody["autoExecute"] = true;
$arrayBody["resultCallback"] = "https://YOUR-SITE.COM/callback";
$arrayBody["retUrl"] = "http://YOUR-SITE.COM/ORDER-CHECK";
$arrayBody["retCancelUrl"] = "http://YOUR-SITE.COM/close";
$jsonBody = json_encode($arrayBody);
$ch = curl_init('https://pay.toss.im/api/v2/payments');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonBody);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Content-Length: ' . strlen($jsonBody))
); //이 영역이 헤더입니다. 그 값은 $jsonBody 라는 변수로 위에서 대입한것이구요
$result = curl_exec($ch);
curl_close($ch);
echo "Response: ".$result;
로 되어있네요
!-->내용을 잘 이해한건지 모르겠지만
https://docs.tosspayments.com/guides/payment-widget/integration
https://docs.tosspayments.com/reference
이렇게 2가지가 header를 전달하고 안 하고 약간 다르긴한데
PaymentWidget를 사용해서 자바스크립트만을 가지고 데이터를 전달할 수 있게 하는건지는...
그리고 successUrl 를 던지는 구간이라면 결제창띄우는 것 까지만의 구간일테고
결제가 완료되면 http://localhost:8080/success 이 구간으로 값이 들어 올 것이고
그 값과 현재 결제하려는 값을 비교하여 [결제승인]구간으로 넘어가야 하지 않을까 생각합니다.
따라서 저 헤더를 추가하는 구간은
success페이지 내에서 [결제승인]을 확인하는 구간에서 javascript 코드가 아닌 서버단에서 통신을 할 때 사용되어야 합니다.
큰 흐름의 순서는 [결제창 띄우고] -> [success or fail ==> success] -> [결제상황 검토 후 결제승인] -> [결제승인 응답 및 디비처리] 이런식이겠네요