최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday

티스토리 뷰

2014년도 작성된 예전 자료 이므로,
현재의 페이팔 UI와 상이할 수 있습니다. 유의하시기 바랍니다.

 

   paypal

 

 

paypal에 대한 결제 페이지 연동은 무척이나 간단하고 쉽다.

 

단지 거부감이 드는 것은 느린 처리 속도(특히 실제로 내 돈을 넣고 결제했을 때 '환불')와 한글을 지원하지 않는다는 점(불편함)인데

 

본인의 사이트나 페이지에 해외에서 접근하는 고객이 있을 경우 가장 대표적인 PG(payment gateway:전자결제대행)가 paypal이고

 

워낙 유명하고 방대하기 때문에 신뢰성 및 안정성에 제격이라 할 수 있다.

 

일단 결제 연동의 의미가 상품이나 재화를 제공하는 Seller의 입장이기 때문에 Premier혹은 Business 계정이 필요하다.

 

paypal의 모든 계정은 이메일(심지어 결제를 할 때에도)로 구분되기 때문에 알아두도록 하고, 계정을 생성했다는 가정하에

 

진행하도록 하겠다.

 

 

   paypal의 테스트 ID 만들기

 

1. 계정 생성

 

일단 하단의 링크를 클릭하고 "Sign Up Now" 를 눌러 계정을 생성한다. 

 

(가입에서 막히는 부분이 있을 경우 검색을 해보면 자세하고 많은 자료들이 있다.)

 

https://www.paypal.com/kr/webapps/mpp/home

 

 

 

 

 

2. 테스트 계정 생성

 

페이팔에서는 친절하게도 국내 PG와는 다르게 sandbox를 제공하기 때문에 가상의 카드를 자기고 모의 결제가 가능하다.

 

이를 위해선 일단 https://developer.paypal.com/  이라는 개발자 페이지로 이동한다.

 

아까 만든 계정으로 로그인 한다.

 

여기에서 Dashboard > Sandbox > Accounts 로 이동한다.

 

 

더보기

 

 

 

여기에서 Applications > Sandbox accounts 항목으로 이동한다.

 

 

이동된 화면을 보면 자신의 계정 아이디가 ID 라고 할 경우 ID-facilitator@myemail.co.kr 식으로 이미 Biseness 계정이 생성 되어 있다.

 

(아래의 화면에서 info-facilitator@email.co.kr 위에 있는 계정은 미리 본인이 만들어 둔 것이므로 화면이 다르더라도 생략하자)

 

이 facilitator 계정이 이제부터 우리가 테스트를 위해 실제 비용 지불 없이 테스트 할 고객 계정이다.

 

 

 

아래 화면에서 Type부분을 살펴 보았을 때 Personal(구매)과 Business(판매자)로 역할이 구분되어 있는 것을 유의해야 한다.

 

 

 

Business : 판매자 (ID-facilitator@myemail.co.kr) 계정으로 화면(아래 참조)에서 ▶ 버튼을 눌러 profile을 보면 입금된(가상) 금액도 

                확인 가능하다. 

 

 

 

 

Personal : 구매자(personalType@myemail.co.kr) 계정으로 가상의 금액을 넣어 놓고 실결제 없이 모의 결제가 가능하다.

 

우리는 일단 계정을 만들기 위해 우측 상단의 Create Account버튼을 클릭한다.

 

 

 

 

유의할 점은 세가지 인데 

 

ㄱ. Country가 United States여도 무관한 점 (애써 Korea 찾지 말자..)

 

ㄴ. Account type에 buyer account를 위함이니 "Personal (buyer account)" 로 체크.

 

ㄷ. PayPal balance 가상계좌의 통장 잔고이다. "9999" 로 입력해 넣자. (less than 10,000)

 

 

 

 

 

작성이 다 되었으면 Create Account를 눌러 확인을 하고 

 

방금만든person계정@email.co.kr 의 ▶ 버튼을 눌러 profile을 클릭하면 Funding탭에서 가상 카드 번호와 유효 기간을 확인할 수 있다.

 

 

 

 

 

이후의 자세한 Personal 계정 관리는 https://www.sandbox.paypal.com/ 샌드박스 페이지에서 관리 할 수 있다.

 

주의할 것은 로그인 할 때 페이팔 본 계정이 아니라  "Test-Personal 계정(위에서 만든) / 비번"으로 로그인 한다.

 

 

 

 

   paypal 결제 창 띄워 보기

 

 

1. 간단한 코드 작성.

 

결제를 위한 방법에는 여러가지가 있는데 여기에서는 오직 IPN(Instance Payment Notification)을 사용한 직접 바인딩 방식을 사용하겠다.

 

우리가 만든 Seller/Buyer 계정으로 값을 직접 적어서 테스트 할 수 있으므로 HTML만 이용하여 매우 간단하게 작성 할 수 있다.

 

이 HTML 테스트에서 반드시 체크해야 할 중요한 항목은 아래와 같다.

 

ㄱ.정의한 값들이 paypal로 전달 되는가? (금액, 상품명, 수량 등)  

 

ㄴ.결제가 완료되면 본인이 기술한 리턴 페이지로 이동하는가? (없을 경우 기본값은 paypal)

 

ㄷ.ID-facilitator@myemail.co.kr 의 Seller 계정에 돈이 제대로 입금 되었는가? (수수료를 제외한 나머지 금액)

 

 

 

 

 

[index.asp]

 

<%  %>   <!DOCTYPE html> <html> <meta charset="utf-8" /> <head> 	<title> paypal index </title> 	<style> 		#order_container {position:absolute;left:0px;text-align:right;margin:5px;} 	</style> </head> <body> 	<div id="order_container"> 		<form method="post" action="https://www.sandbox.paypal.com/cgi-bin/webscr"> 			구매요청 : <input type="index" name="cmd" value="_xclick" size="50" /><br /> 			상점계정 : <input type="index" name="business" value="info-facilitator@myemail.co.kr" size="50" /><br /> 			금액 : <input type="index" name="amount" value="10" size="50" /><br /> 			상품이름 : <input type="index" name="item_name" value="toy" size="50" /><br /> 			결제후 이동되는 페이지 : <input type="index" name="return" value="http://localhost/paypal/complete.asp" size="50" /><br /> 			IPN메세지 받을 페이지 : <input type="index" name="notify_url" value="http://localhost/paypal/complete.asp" size="50" /><br /> 			결제 취소 페이지 : <input type="index" name="cancel_return" value="http://localhost/paypal/complete.asp" size="50" /><br /> 			인코딩 : <input type="index" name="charset" value="UTF-8" size="50" /><br /> 			<input type="index" name="currency_type" value="USD" size="50" /><br /> 			<input type="submit" value="pay" size="50" /> 		</form> 	</div> </body> </html> 

 

결제 완료되거나 취소 되었을 때의 페이지는 임시로 아래처럼 만들어 둔다.

 

[complete.asp]

<% Response.write "complete page" %> 

 

index.asp의 코드를 살펴보면

 

17 : https://www.paypal.com/cgi-bin/webscr 은 실제 결제되는 링크이고 sandbox가 들어가면 테스트 결제를 뜻 함.

 

18 : cmd = _xclick 은 반드시 들어가야 하는 값으로 구매 요청을 뜻한다.

 

19 : 상점 계정은 당연하겠지만 Seller 계정인 info-faciliator@myemail.co.kr 을 기입

 

나머지는 input박스 왼쪽에 구술한 내용대로 이고 pay 버튼을 눌렀을 때 드디어 결제 요청을 위한 입력 페이지가 뜬다.

 

 

 

2. 결제 할 카드 항목 기입

 

아래 화면을 보면 테스트 코드에서 작성한 $10의 toy 항목이 제대로 전달되었고 이제 우리가 할 일은 테스트 계정의 

 

드디어 신용카드를 사용(Card number)하여 오른쪽을 채워 넣으면 되는 것이다.

 

참고로 입력 도중 주소와 ZIP 코드, PhoneNumber에서 자꾸 헤멜 경우 아래와 같이 입력하면 한방에 패스 될 것이다.

 

(그냥 본인이 임시로 형식에 맞춰서 작성했던 것이다.)

 

City : Los Angeles

 

State : CA

 

ZIP CODE : 90012-2469

 

PhoneNumber : 408-877-7406

 

 

 


 

(내용추가 : 2014.05.21)

 

입력후 결제를 누르면 아래와 같이 결제가 잘 완료되었고 "Return to facilitator account;s Test Store" 를 클릭하면

 

 

주문을 해서 고맙다.

 

총 결제 금액은 $80.45 달러이며, 지불된 상점으로 다시 이동 할 수 있다.

 

10초 뒤에 자동으로 이동되지 않으면(아마 백이면 백 이동 됨) click here를 눌러서 직접 이동 할 수있다.

 

이런 내용인데 자의든 타의든 리다이렉트가 되면 미리 준비한 완료 페이지의 멘트를 띄우면 된다.

 

 

 

본인의 경우 아주 허접하게 아래와 같이 (실제 서비스되는 쇼핑몰 인데도..) 메시를 띄웠다...

 

 

 

위에서 짰던 asp 코드 대로라면 리턴페이지의 결과는 아래와 같을 것이다.

 

결과 리턴 화면)

 

 

 

3. 결제 이후 통장 잔고 확인.

 

이제 마지막으로 Seller 계정의 통장잔고를 살펴서 진짜로 입금이 되었는지 확인만 하면 된다.

 

Funding 탭의 PayPal Balance가 0 USD 였는데 9 USD(수수료 제외)로 입금 된 것을 확인할 수 있다.

 

 

 

결제를 한번 더 실행 하면

 

9 USD에서 18 USD 가 되었다.

 

 

 

 

4.마무리와 추가 작업

 

계정과 시뮬레이션 결제 ID들을 생성하고 직접 페이지 까지 띄웠다면 전체 모듈의 반 절 이상을 구현했다고 해도 과언이 아니다.

 

이제 남은 부분은 

 

ㄱ.상세한 매개변수 목록[각주:1]을 살펴보고 자신에게 필요한(맞는) 옵션 리스트를 적용한다. - 개인별도로 진행

 

ㄴ.보안을 위해 IPN수신 설정 방법을 알아본다.

 

ㄷ.한글로 된 상품명이 있을 경우 전달 방법에 대해 알아본다.

 

ㄹ.수수료와 환율(USD기준)을 상품에 적용해서 계산하는 방법을 알아본다.

 

ㅁ. ㄱ~ㅁ의 단계를 거쳐 결제가 모두 완료되었을 경우 마지막으로 IPN 수신 데이터의 유효성(VERIFIED)을 검사하고

 

     IPN을 통해 결제가 잘 되었는지 아니면 도중에 취소(전산 장애라던지)되었는지 등을 판단할 수 있다.

 

     "complete"가 되었을 경우 결제가 된 해당 유저(혹은 주문 번호, 그 밖의 유니크 키)의 정보를 최종 주문서 DB에 insert해 준 뒤, 

 

     고객에게 SMS와 SMTP(email)발송 하여 마무리 한다.

 

 

매개변수 목록 ↓ 바로가기)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  1. https://developer.paypal.com/webapps/developer/docs/classic/paypal-payments-standard/integration-guide/Appx_websitestandard_htmlvariables/ [본문으로]
댓글