UniFi - HotSpot과 PayPal 스탠다드와 통합하기 ================================================================= download at 2016-11-14T21:24:01Z `origin `_ Overview -------- .. raw:: html
-------------- .. raw:: html
PayPal 스탠다드 계정은 무료이므로, 기능에 제한이 존재합니다. 예를 들어, PayPal 스탠다드는 API를 사용할 수 없습니다. 즉, UniFi 컨트롤러를 직접 사용하여 PayPal 스탠다드 계정을 연결할 수 없습니다. 프로 계정은 연계가 가능하며 `이 문서 `__ 를 확인해보십시오. 통합 작업을 하깅 위해서 **외부 웹서버** 를 통해 \ **Paypal Instant Payment Notification (IPN)** 서비스를 사용하여 성공적으로 UniFi hotspot과 PayPal 스탠다드 계정과 통합할 수 있도록 합니다. 이 통합작업이 가지고 있는 함의는 설치와 유지보수를 위한 노력이 더 많이 필요함을 의미합니다. 아키텍처에 더 많은 요소가 요구되기 때문입니다. 이 문서의 예제는 **PayPal Standard Account** 이 UniFi Hotspot과 통합이 될 수 있다는 것을 증명하기 위함입니다. 실제로 외부의 웹서버가 존재하지 않습니다. Ubiquiti에서는 이 기능이 올바르게 동작한다는 것만 개런티합니다. 외부의 웹서버가 올바르게 동작하고 모든 에러 내역에 올바르게 처리된다고 보장할 수 있는 것은 이 통합작업을 수행하는 본인임을 잊지 마십시오. 이 문서의 예제는 \ **PayPal Sandbox** 로 테스트를 진행합니다. 해당 환경은 개발자에게 제공되는 PayPal 환경입니다. 실제 사용하는 환경과 동일한 기능을 제공합니다. |image0|   Disclaimers ----------- .. raw:: html
-------------- .. raw:: html
#. 통합 과정은 UniFi 컨트로러 3.2.1 버전의 커스텀 포탈 기능 상요을 기준으로 작성하였습니다. (이전 버전을 사용하고 있다면 3.2.1 버전 이상으로 업그레이드 하는 것을 고려하십시오.) #. 아파치2 웹서버에 SSL 설정을 한 것을 권장합니다. 이 설정은 이 문서의 범위를 초과합니다. 그러나 SSL 없이는 PayPal에서 받는 응답이 암호화 되지 않은 값을 받아서 보안적 위협이 있을 수 있습니다. #. 이 설정 과정은 인증을 수행하기 이전에 거의 1700만 IP 주소 접근을 처리할 수 있습니다. 이는 PayPal이 지역 기반 IP 주소와 IP 주소 라우팅 기능일 지원하기 때문입니다. 해당 지역의 관련 있는 IP 주소를 찾기 위해서는 dig, nslookup 등을 다음 도메인에 사용하십시오: - paypal.com - ipnpb.paypal.com - sandbox.paypal.com - paypalobjects.com   Steps ----- .. raw:: html
-------------- .. raw:: html
Part I. 외장 포탈 웹사이트를 준비합니다 .(아파치, PHP, UniFi 예제 포탈을 사용합니다) ------------------------------------------------------------------------------------------------------------------------------------------------------------- 이 예제는 *Ubuntu 12.04 LTS* 를 기준으로 작성하였지만, 모든 리눅스 배포판에서 동작합니다. 이 작업이 우분투를 기반으로 작성하였기 때문에 패캐지 매니저로 *aptitude*를 사용하였습니다. 다른 리눅스 배포판을 사용한다면 각 패키지 매니저의 메뉴얼을 참조하십시오. 또한 외부 웹서버는 인터넷 IP 주소와 포트 포워딩을 방화벽에 필요하다면 등록해야합니다. #. Apach2, PHP5를 설치합니다: :: apt-get install apache2 php5 #. Apache2가 제대로 동작하고 있는지 확인하기 위해서 *http://127.0.0.1* 혹은 *http://포탈 IP 주소* 로 접속합니다. 성공적으로 실행이 되었다면 Apache2의 페이지가 로딩됩니다. #. /var/www 디렉토리를 포탈 페이지를 구동할 서버에 생성합니다. :: mkdir /var/www/myportal #. 해당 디렉토리로 이동합니다: :: cd /var/www #. 샘플포탈을 다운로드 받습니다: :: wget http://dl.ubnt.com/unifi/3.2.10/portal_sample_paypal.zip - **버전 넘버가 URL에 있다는 사실을 잊지 마세요** #. 압축을 해제합니다: :: tar -xvf portal_sample_paypal.tar.gz #. 디렉토리 이름을 원하는 이름으로 변경합니다: :: mv portal_sample_paypal myportal #. 재사용할 익스텐션을 확인합니다: :: echo '' > info.php #. *http://[Portal's IP address]* 로 접속합니다. #. Ctrl+F 를 실행합니다. #. "openssl" 와 "curl" 을 검색합니다. - OpenSSL 은 설치가 되어 있어야 하며, 기본으로 활성화 되어있어야 합니다. - curl 패키지가 설치 되어 있지 않다면, 다음 명령어로 설치하십시오. #. :: apt-get install curl libcurl3 libcurl3-dev php5-curl php5-mcrypt #. :: nano /etc/php5/apache2/php.ini #. 스크롤을 내려서 "Dynamic Extensions" 까지 커서를 이동합니다. #. 아래에 새로운 다음 라인을 추가합니다 :: extension=curl.so #. 저장하고 수정을 종료합니다. #. apache2를 재시작합니다: :: service apache2 restart - 포탈 디렉토리로 이동합니다: :: cd myportal - *paypal\_ipn.php*\ 파일을 수정합니다: :: nano paypal_ipn.php #. Ctrl+W 를 입력합니다. - 서치바가 생성되며 다음을 입력합니다. :: username - 103 번째 줄로 이동되는 것을 확인할 수 있습니다. #. "ubnt"를 삭제하고 컨트롤러 이름으로 변경합니다. (single quote로 감싸도록 합니다) #. 다음 라인에 $password 의 값을 "ubnt"에서 원하는 패스워드로 교체합니다. (single quote로 감싸도록 합니다.) #. $baseurl을 IP 주소로 변경합니다. #. $site를 사이트 이름으로 변경합니다. #. 60,62,64 번째 줄을 확인합니다: :: if (strcmp ($_POST['option_selection1'], "8-Hour Pass") == 0) { } else if (strcmp ($_POST['option_selection1'], "1-Day Pass") == 0) { } else if (strcmp ($_POST['option_selection1'], "3-Day Pass") == 0) { **해당 내용은 패키지 네임이며, 정확하게 일치해야합니다.** 다른 패키지 이름을 사용한다면, paypal\_ipn.php 파일에서 이름을 변경하십시오. 새로운 패키지를 추가하려면 else-if 구문에 새로운 내용을 추가합니다. 패키지를 삭제하고 싶다면 해당하는 else-if 구문을 삭제합니다. #. 저장하고 종료합니다. - 로그파일과 쿠키 파일을 생성하고, 적절한 권한을 부여합니다: #. :: touch log.txt #. :: chmod 777 log.txt #. :: touch unifi_cookie.txt #. :: chmod 777 unifi_cookie.txt --------------   Part II. PayPal 준비하기 ------------------------------------------------------------------------- 다음 작업은 두개의 버튼을 생성합니다. 프로덕션 버튼과 샌드박스 버튼을 생성합니다. 프로덕션 버튼은 게스트로부터 실제 결제서비스를 시행할 때 사용하는 버튼이며, 샌드박스 버튼은 테스팅 및 코드를 검증할 때 사용합니다. 샌드박스 계정을 실제 사용환경에서 사용할 수 없으며, 프로덕션 버튼을 샌드박스 환경에서 사용할 수 없습니다.   샌드박스 계정 생성하기 ------------------------------------------------------------------------------ #. 개발자 계정을 생성합니다. https://developer.paypal.com/ 에서 생성합니다. #. 계정으로 로그인하면, 메뉴에서 Application으로 이동합니다. #. 샌드박스 계정 (Sandbox accounts)를 선택합니다. |image1| #. 계정 생성하기 (Create Account) 버튼을 클릭합니다. - 본인 설정에 맞도록 입력합니다. - 샌드박스 계정에 200불 이상을 적용하십시오. #. 생성된 이메일 주소를 사용하여 테스트를 진행합니다.   샌드박스 버튼 생성하기 --------------------------------------------------------------------------- 이제 샌드박스 계정을 사용하여 로그인을 시도하도록 하겠습니다. #. https://www.sandbox.paypal.com/ 에 샌드박스 계정으로 로그인합니다. #. 메인페이지에서 "My Saved Buttons" 를 클릭합니다. |image2| #. 오른쪽 부분에서 "Create new button" 버튼을 클릭합니다. |pp_sb2.png| #. 아래의 그림과 같이 버튼을 구조화 할 수 있습니다. |image4| Item Name 은 드롭다운 베뉴의 이름이며 Price는 적절한 가격으로 설정해야 할 것입니다. 메뉴 옵션 이름은 반드시 paypal\_ipn.php 에서의 이름과 동일해야합니다. #. create 버튼을 클릭합니다. #. 생성된 코드를 클립보드에 복사합니다. #. 포탈 서버를 다시 수정하도록 합니다. :: nano index.php #. 44-50 번째의 주석으로 이동합니다. #. 해당 내용을 삭제합니다. #. 45번째 라인부터 HTML 주속 블록에 이전에 복사한 코드를 입력합니다. - 포탈에 샌드박스 버튼을 확인할 수 있다면, 주석 블록을 제거하고 저장한 다음에 index.php 페이지를 다시 로드합니다. #. 저장하고 종료합니다. 프로덕션 버튼 생성하기 ------------------------------------------------------------------------------ #. https://www.paypal.com/ 에 로그인합니다. #. 메인 페이지에서 "Tools" 옵션을 클릭합니다. #. "PayPal Buttons" 옵션을 클릭합니다. #. 아래의 그림과 같이 구조화 되는 것을 확인할 수 있습니다. |image5| Item Name 은 드롭다운 베뉴의 이름이며 Price는 적절한 가격으로 설정해야 할 것입니다. 메뉴 옵션 이름은 반드시 paypal\_ipn.php 에서의 이름과 동일해야합니다. #. Create 버튼을 클릭합니다. #. 생성된 코드를 클립보드에 복사합니다. #. 포탈 서버를 다시 수정하도록 합니다. :: nano index.php #. 36-42 번째의 주석으로 이동합니다. #. 해당 내용을 삭제합니다. #. 37번째 라인부터 HTML 주속 블록에 이전에 복사한 코드를 입력합니다. - 포탈에 프로덕션 버튼울 확인할 수 있다면, 주석 블록을 제거하고 저장한 다음에 index.php 페이지를 다시 로드합니다. #. 저장하고 종료합니다.   버튼 확인하기 ---------------------------------------------------------------------- HTML 주석을 제거하면 버튼을 확인할 수 있습니다. 테스팅 목적으로 수행할 때에는 프로덕션 버튼 코드를 주석처리합니다. 프로덕션 목적으로 수행할 때에는 샌드박스 버튼 코드를 주석처리합니다. 코드를 확인하려면 다음을 수행합니다: #. 웹브라우저를 실행합니다. #. http://[포탈 IP 주소]/[/var/www 를 제외한 포탈의 경로] 로 이동합니다.   Part III. 컨트롤러 준비하기 ---------------------------------------------------------------------------------- #. UniFi 컨트롤러에 로그인합니다. #. 왼쪽 위의 드롭다운 메뉴로 이동합니다. |image6| #. "Settings">"Guest Control">"Guest Policies" 섹션에서 "Enable Guest Portal" 를 체크합니다. #. "External Portal Server"를 선택합니다. #. 커스텀 포탈 IP 주소를 본인의 IP 주소로 입력합니다. "http://", "https://" 를 경로에 포함하지 마십시오. UniFi가 해당 내용을 입력합니다. |image7| #. PayPal IP 주소를 허용 서브넷 리스트에 추가합니다. - PayPal IP 주소는 지역 기반 주소이기 때문에 도메인에 해당하는 IP 주소를 확인해야합니다. - paypal.com - ipnpb.paypal.com - sandbox.paypal.com - paypalobjects.com - 다음을 통해서 확인할 수 있습니다. :: dig paypal.com 포탈 서버에서 획득한 IP 주소를 붙여넣고 허용 서브넷에 A 레코드를 입력합니다. 단일 IP 주소임을 나타내기 위해서 /32를 IP 주소 마지막에 입력합니다. - 더 많은 내용은 다음 사이트를 통해 확인합니다: https://ppmts.custhelp.com/app/answers/detail/a_id/92 - 대신에 다음 서브넷을 허용하도록 추가할 수 있습니다: #. 173.0.0.0/16 #. 64.4.0.0/16 #. 2.22.0.0/16 #. 23.0.0.0/8 - **Note:** 위의 서브넷을 임의로 등록하는 것은 16,973,816 주소를 인증하도록 허용하는 것과 같습니다. 그렇지만 서브넷은 모든 알려진 PayPal IP 주소를 포함하게 됩니다. 그러므로 PayPal IP 주소를 주소와 함께 저장하는 것을 권장합니다. - Apply를 클릭하여 UAP와 동기화를 맞추도록 합니다. #. "Settings">"Wireless Networks" 에서 다음과 같이 설정합니다: - 게스트 SSID를 설정하였다면, Edit을 클릭합니다. Guest Policy 체크박스를 선택하여 Apply를 클릭합니다. - 새로운 게스트 SSID를 설정해야 한다면 Create를 클릭하여 원하는 내용을 입력하고 Guest Policy 체크박스를 체크하고, Apply를 클릭합니다.   Part IV. 테스팅 ------------------------------------------------------------------------------------------- 새로운 포탈을 테스트하려면: #. :: nano index.php #. 샌드박스 버튼 코드가 주석을 제거하십시오. #. WiFi 장치를 사용하여 Guest SSID에 접속합니다. #. 게스트 세션을 수립하면, 웹 브라우저 탭을 생성하여 포탈에서 샌드박스 버튼이 생성되는지 확인하십시오. - 포탈 페이지로 이동할 수 없다면, WiFi 장치가 포탈과 통신할 수 없다는 것을 의미하며 다음 중 하나의 경우에 해당합니다: #. 포탈 사이트가 해당 서브넷 리스트에 포함되어 있지 않음을 의미하며, 포탈 IP 주소를 해당 서브넷에 등록합니다. #. 방화벽이 게스트를 포탈과의 통신 과정에서 차단할 수도 있습니다. #. 같은 LAN에 포탈과 컴퓨터가 존재하는지 확인하십시오. #. Buy Now를 클릭하여 PayPal 로그인 화면으로 이동하는지 확인합니다. - PayPal 로그인 화면으로 이동하지 않는다면, 허용 서브넷 리스트에 추가되었는지 확인합니다. #. 샌드박스 계정으로 로그인합니다. #. Pay 를 시도합니다.(실제 돈을 지불하지 않습니다.) #. UniFi 컨트롤러의 Guests 탭으로 이동합니다. 해당 화면에서 장치의 MAC 주소를 확인할 수 있어야하며, 버튼이 "Unauthorize"를 표기하고 있어야합니다. #. 이제 UniFi 컨트롤러에서 PayPal 스탠다드 계정을 사용할 수 있습니다!   Part V. 프로덕션 --------------------------------------------------------------------------------------------- 새로운 포탈에 프로덕션 모드를 설정합니다: #. :: nano index.php #. 프로덕션 버튼 코드를 주석 해제합니다. #. 샌드박스 버튼 코드가 주석처리 되었는지 확인합니다. #. 저장후에 종료합니다.   Part VI. 결론 ---------------------------------------------------------------------------------------------- PayPal 스탠다드 계정은 게스트 포탈과 통합할 수 있습니다. PayPal 과의 통합을 통해서 PayPal 결제 서비스를 사용할 수 있습니다. 이제 포탈에서 PayPal과 관련된 부분을 수행할 수 있으며, 단순하게 주석의 설정/해제 작업을 통해서 테스트 환경, 프로덕션 환경을 전환할 수 있습니다.     Notes ----- .. raw:: html
-------------- .. raw:: html
-  본 예제의 스크립트가 올바르게 동작함을 보장하지 않습니다. 예제는 프로덕션 네트워크 환경에서 사용하면 안됩니다. 이 문서의 대상 독자는 PayPal 서비스와 HTML/PHP에 대한 지식이 충분하다고 가정합니다. 이 문서는 예제이며, 환경에 맞도록 적절하게 수정하는 작업이 필요합니다. #. `UniFi FAQ `__ #. `Paypal 샌드박스 사용자 가이드 `__ #. `Paypal Instant Payment Notification 가이드 `__ #. Super Special Thanks to `UBNT-David `__ & `UBNT-Jamie `__. #. Special thanks to \ `JustTech `__, \ `mmaxmal `__ , `FreenetAntennas `__  .. |image0| image:: /hc/en-us/article_attachments/202767004/integration_w_PayPal_std.png .. |image1| image:: /hc/en-us/article_attachments/202767014/sandbox_acct.png .. |image2| image:: /hc/en-us/article_attachments/202824030/sandbox_button.png .. |pp_sb2.png| image:: http://community.ubnt.com/t5/image/serverpage/image-id/35219i17C2AC09F506E62C/image-size/large?v=mpbl-1&px=-1 .. |image4| image:: /hc/en-us/article_attachments/202767024/button_structure.png .. |image5| image:: /hc/en-us/article_attachments/202824040/production_button.png .. |image6| image:: /hc/en-us/article_attachments/202767034/portal_site.png .. |image7| image:: /hc/en-us/article_attachments/202767044/guest_control.png