profile
조회 수 5648 좋아요 18 댓글 10

비트코인 결제 시스템을 만드는 튜토리얼입니다. 예전부터 이 글을 써야지 써야지 하다가 이제서야 글을 쓰게 됐네요^^ 

최대한 접근하기 쉽게 설명해보겠습니다.

 

 

1. 설계

 

일단 어떻게 만들지 큰 그림을 한번 생각해봐야겠네요. 이 튜토리얼에서는 쇼핑몰에 비트코인 결제를 붙인다는 가정을 하겠습니다.

 

스크린샷 2017-08-14 오후 1.43.56.png

(blockchain.info 사이트)

 

스크린샷 2017-08-14 오후 1.44.08.png(코인스노티파이 사이트)

 

전 blockchain.info사이트의 지갑과 코인스노티파이(https://www.coinsnotify.com)라는 두 개의 서비스를 이용할겁니다. blockchain.info 지갑을 사용하면 편리한점이 있는데요. blockchain.info의 API(https://blockchain.info/ko/api)를 사용할 수 있게 된다는 점입니다. 비트코인 주소 생성은 당연히 사용해야하는 기능입니다. blockchain api 를 보시면 친절하게도 결제처리라는 좋은 API가 있습니다.

 

어? 이거만 쓰면 되겠네 하고 글을 더 읽다보면 뭔가 이상한 점을 알 수 있게 됩니다. 결제처리용 비트코인 주소를 생성하면 생성한 주소중 20개까지만 유효하고 나머지는 비트코인 입금을 받더라도 callback을 안해준다는 겁니다. -_-; 만약 여러분이 만드는 사이트에 유저가 소수라면 20개로 충분히 커버가 되겠지만 만약 동시에 20개를 넘는 결제 요청이 발생할 경우 그 쇼핑몰은 많은 고객을 잃게 될겁니다.

 

1) 비트코인 주소 발행 -> 2) 비트코인이 입금되기까지 기다림 -> 3) 비트코인 입금되면 해당 주소 회수 -> 4) 다시 새로운 비트코인 주소 생성

 

이걸 보시면 2)에서 시간이 얼마나 걸릴지 예측할 수가 없습니다. 비트코인 전송 속도까지 고려한다면 20개로 결제시스템을 유지한다는건 불가능합니다;;

 

물론 20개로 충분하다고 생각하는 분도 계시겠지만 또 다른 경우도 생각해볼 수 있습니다.

 

비트코인 결제 주소를 쇼핑몰에 회원가입한 모든 유저에게 할당하는 경우입니다. 이 경우에는 비트코인 주소가 회원수만큼 필요하게 됩니다. 만약 비트코인 거래소 같은걸 만든다면 이런식으로 해야겠죠? 회원수만큼 비트코인 주소를 할당해서 비트코인 주소에 입금되면 그 입금수량만큼 DB에 기록하면 되겠죠.

 

또 다른 방법은 좀 무식한 방법이지만 회원들의 모든 비트코인 주소를 주기적으로 balance 를 체크해서 변동된 내역이 있는지 확인하는 겁니다. 이런 방법을 쓰는 곳도 어딘가 있지 않을까 생각이 듭니다...

 

아무튼 그래서 저희는 비트코인 입금알림 서비스도 같이 쓸 예정입니다.

 

blockchain.info 를 쓰게 되면 여러분이 앞으로 맞이할 골치아픈 문제를 또 하나 해결할 수 있습니다. 예를 들어 카메라 쇼핑몰인데 이번달에 300명이 카메라를 구매해서 입금받은 비트코인 주소가 300개가 있다고 생각해보겠습니다. 300개 주소에 각각 0.3 BTC 씩 들어있는데 이걸 한 군데 모으려고 해보니 한번의 전송에 네트워크 수수료 0.0005 BTC 정도가 들겠죠? 300 x 0.0005 BTC = 0.15 BTC 네트워크 수수료로 0.15 BTC를 날려버리게 되는 엄청난 손해가 발생합니다. 다행인건 blockchain.info 에서 생성한 비트코인 주소에 0.3 BTC 씩 있다면 이건 통합하여 지갑에서 총 수량을 보여주게 되고 다른 비트코인 주소로 전송하게 되면 자동으로 합쳐서 전송하게 됩니다. 이건 비트코인 거래소에서도 많이 사용하는 방법인데요. 비트코인을 한번 전송하는데 네트워크 수수료가 꽤 비싸니 여러 건의 거래를 한번에 합쳐서 하나의 트랜잭션으로 처리합니다. 이런 기술이 있어야 최대한 수수료를 아낄 수 있게 됩니다. 트랜잭션을 직접 작성하는 건 난이도가 좀 있어서 어려우니 간편하게 blockchain.info 지갑을 써서 이 문제를 해결하는게 좋겠죠?

 

 

2. 주소 생성

 

비트코인 주소를 생성해봅시다. blockchain.info API를 사용할줄 안다면 지갑의 주소를 생성해도 되고 결제용 주소를 생성해도 됩니다. 둘다 관계없습니다만 여기서는 결제 처리용 주소 생성(https://blockchain.info/api/api_receive)을 이용해보겠습니다.

 

blockchain.info 의 지갑 서비스를 서버에 설치하고 $ blockchain-wallet-service start --port 3000 명령어로 프로그램 실행하는것까지 할 수 있는 분이라면 api를 사용해서 주소 생성하시면 됩니다. 만약 리눅스 서버를 다루는게 익숙하지 않다면 지갑에서 직접 생성하시면 됩니다. 스크린샷을 잠깐 보겠습니다.

 

blockchain.info 지갑에 로그인한 뒤 왼쪽의 [설정]에서 [주소들]을 눌러봅니다. 그리고 '내 비트코인 지갑 (디폴트)'라고 된 부분에서 제일 오른쪽에 [관리]를 누릅니다.

스크린샷 2017-08-14 오후 1.41.04.png

 

 

그러면 내 비트코인 주소를 확인할 수 있습니다.

스크린샷 2017-08-14 오후 1.41.24.png

 

여기서 [+ 새 주소 추가]를 누르시면 새로운 비트코인 주소를 계속 생성할 수 있습니다. 모든 회원에게 할당한다면 회원수만큼 새 주소를 추가하시면 되고 결제 시스템을 만든다면 한 200개 정도있으면 안정적일 것 같습니다. 새 주소 생성하고 그 주소 긁어서 복사하고 DB에 유저에게 붙여넣기... 수작업으로도 할 수 있습니다. (잠시 눈물 좀 닦겠습니다...)

 

이 주소는 나중에 고객에게 보여줄때 QR코드도 같이 보여주면 훨씬 보기 좋습니다. QR코드를 만들어볼까요? 구글 차트를 이용해봅시다.

 

<img src="https://chart.googleapis.com/chart?chs=130x130&cht=qr&chl=bitcoin:1N5XhCX7P6yoGmzH6A7uLSpn9Anpimfa59?amount=10000" />

 

이런식으로 비트코인 주소값과 amount(사토시 단위)를 변경해서 고객에게 보여주면 됩니다.

 

 

3. 입금 알림 등록

 

코인스노티파이에 입금 알림등록을 해야겠네요. 알림 등록은 main_group 하나만 이용할꺼면 사이트 메인에서 등록하면 됩니다.

 

스크린샷 2017-08-14 오후 1.56.06.png

등록할 주소를 입력했습니다. 그럼 아래에 Email 또는 HTTP 라고 적혀있는데 쇼핑몰에 결제시스템이니 HTTP Callback 주소를 입력하면 되겠죠?

여러분 쇼핑몰 이름이 www.shop.co.kr 이라면 

 

http://www.shop.co.kr/callback.php 

 

이런식으로 callback 받을 주소를 입력후 [등록] 버튼을 누르면 됩니다.

 

여기 callback.php 는 위 주소로 비트코인을 입금받으면 코인스노티파이에서 http://www.shop.co.kr/callback.php 로 GET 정보를 전달하게 됩니다. 어떤 값이 전달되는지 더 자세히 보겠습니다.

 

http://www.shop.co.kr/callback.php?txid=58402cd1367cb959c5f02a3d6c7cb1f43893d6b96101433bdb223f1b09363d79&address=1B2L3cfm1CFH8cUB9BRKUs8zFGYEJLtWev&value=10000&confirmed=1

 

이런식으로 callback을 전달받게 됩니다. 내용을 보기 편하게 줄바꿈을 해보겠습니다.

 

txid=

58402cd1367cb959c5f02a3d6c7cb1f43893d6b96101433bdb223f1b09363d79

&

address=

1N5XhCX7P6yoGmzH6A7uLSpn9Anpimfa59

&

value=

10000

&

confirmed=1

 

txid 는 비트코인 거래를 하고 생기는 트랜잭션 정보입니다. 이걸로 거래를 자세히 확인할 수 있습니다. 아마 이걸 blockchain.info 같은 곳에서 많이 검색해보셨을겁니다. 고객이 쇼핑몰에서 결제하면 이 txid를 고객에게 전달해줘야 고객입장에서 안심이 됩니다. 내 입금이 처리되고 있구나... 라고 말이죠. address 는 어떤 비트코인 주소에 입금된 건지 알 수 있는 것이고 value 는 비트코인 값입니다. 사토시 단위입니다. confirmed 는 컨펌이 몇번 이루어졌는지나타나는 숫자입니다. 코인스노티파이는 1컨펌부터 3컨펌까지 총 3번 callback 을 해줍니다.

 

if (confirmed == 1) {

    // 고객에게 이메일로 입금처리중이라는 걸 알림

} else if (confirmed == 3) {

    // 비트코인 입금확인 완료

    if (value == 10000) {

        // 금액 일치함

    }

}

 

이런식으로 callback.php 코드를 작성해주시면 됩니다.

 

 

4. 입금 처리 과정

 

비트코인을 입금하라고 QR코드와 비트코인 결제 주소를 고객에게 보여주고 ... 원화를 결제하는 다른 쇼핑몰처럼 결제가 완료될때까지 결제 페이지에서 멈춰있으면 안됩니다. 무통장입금처럼 결제 계좌를 웹페이지나 이메일, 문자메시지로 안내해주고 입금확인되면 입금확인이 되었다고 알려주고 물건 배송을 하면 되겠습니다.

 

 

쉽게 쓰겠다고 생각했는데 쓰고 보니 뭔가 복잡해보이기도 하네요. 궁금한점 있으시거나 설명이 부족한 부분 있으면 알려주세요~ 

Who's 초밥매니아

profile

게임 개발자입니다^^ 비트코인에 관심이 많아서 이것저것 개발해보고 있습니다.

코인스노티파이(비트코인 자동입금 확인 API): https://www.coinsnotify.com

트레보(가상화폐 트레이딩 봇): https://www.trebo.io

Comment '10'

개발자 추천글게시판

개발 추천글 모음입니다.

List of Articles
번호 제목 좋아요 조회 수 글쓴이 날짜
70 코인 오입금을 거래소에서 처리를 못해주는 이유., 거래소에서 코인 오입금 처리를 못해주는 이유를 적어보겠습니다. 거래소에는 무수히 많은 지갑이 있습니다. A코인 B코인 C코인 D 코인 등등... 이 코인지갑을 이용해서 출금을 콘트롤하는 방법은 크게 두가지가 있습... 27 20 6740
쌍둥아빠
2017.09.27
69 개발자 모십니다. 마이너(마이닝 프로그램) 분석 가능하신 분. 마이너 분석 및 개선에 대한 파일럿 프로젝트를 수주할 예정입니다 1. 마이너 분석, 변경, 컴파일, 배포. 마이너라함은 마이닝 프로그램입니다. 2. c++ 3. 급여는 실력대로 원래 받으시던 만큼 정당한 급여수준 . 구... 37 16 6483
쌍둥아빠
2017.09.26
68 CPU 채굴 및 1개의 보드에 GPU 여러개 사용하여 최대치 채굴     큰 팁은 아니고 이미 아실분도 계시겠지만.. 채굴하면서 이것저것 테스트해본내용을 공유합니다..   저는 제온CPU + GPU 로 이더리움과 모네로를 채굴하고있습니다   다른 CPU군은 모르겠으나 코어가 많은 제온 C... 9 10 5008
쉐도우마이너
2017.09.26
67 채굴기 모니터링뷰어[EMiner Manager] 0.9.7 파워컨트롤러 제어 제작법 15 file 13 3918
마루마루
2017.09.23
66 Bitfinex 마진 확인 사이트 5 file 6 2995
Synkc
2017.09.22
65 BitcoinYo - 환전사례를 남깁니다 ^^.. 18 file 8 3324
비트코인요
2017.09.19
64 코인 트레이드 시뮬레이터 (ChainStock) 입니다. 45 file 9 7560
마루마루
2017.09.12
63 BitcoinYo - 비트코인을 사용하며 … 최종편   동영상 하이라이트: BitcoinYo - 일본여행 동영상 보러가기   일본에서의 공식일정이 종료되었습니다. 이번편은 비트코인을 사용하면서 느꼇던 부분을 적어보도록 하겠습니다.   우선 , 환전(Exchange)에 대한 부분... 10 27 5877
비트코인요
2017.09.05
62 마이닝 풀에 테스트 완료 되었습니다. 곧 오픈할꼐요! 4 file 5 2745
ttx478
2017.08.28
61 모니터링 프로그램 ver 0.6 업데이트 49 file 40 9195
남자별
2017.08.28
60 Mastering Bitcoin 2nd Edition 무료로 볼 수 있는 곳   영문판입니다. https://www.safaribooksonline.com/library/view/mastering-bitcoin-2nd/9781491954379/   우측 상단에 START FREE TRIAL 누르고 간단 가입만 하면 10일 동안 무료로 책 전체 내용을 볼 수 있습니다... 5 911
비초이
2017.08.24
59 한국 프리미엄 챠트가 제공되는 알람 앱을 만들어 보았습니다. 8 file 5 3139
제주재주
2017.08.23
58 웹 브라우저 + python으로 거래소 API 처리하기 2 7 file 16 4546
크로비
2017.08.17
57 [본인 논문공개] 튜링완전 암호화폐에서 새로운 네트워크 보안 방법 (이더리움의 가스 시스템의 대안에 대한 내용입니다.) 20 file 20 2780
loum
2017.08.14
» 비트코인 결제 시스템 만들기 비트코인 결제 시스템을 만드는 튜토리얼입니다. 예전부터 이 글을 써야지 써야지 하다가 이제서야 글을 쓰게 됐네요^^  최대한 접근하기 쉽게 설명해보겠습니다.     1. 설계   일단 어떻게 만들지 큰 그림을 한번 ... 10 file 18 5648
초밥매니아
2017.08.14
55 웹 브라우저 + python으로 거래소 API 처리하기 1 15 file 15 4846
크로비
2017.08.14
54 리눅스 터미널용 nvidia 오버클럭 스크립트 8 file 9 2144
ethminer
2017.08.14
53 허접하지만 알뜰한 기능의 채굴기 모니터링 프로그램입니다 22 file 75 5894
503
2017.08.12
52 마플허 잔고, 마이너 확인 웹 만들었어요ㅋㅋ 10 file 5 2000
싱싱88
2017.08.12
51 모니터링 프로그램 ver 0.5 업데이트 60 file 38 6553
남자별
2017.08.11
Board Pagination Prev 1 2 3 4 5 Next
/ 5