develop custom_top_html:no
default debug random = 0 / type = READ / detected = READ
개발
2017-08-14 14:15:58

비트코인 결제 시스템 만들기

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

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

 

 

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

 

 

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

362
댓글 11

List of Articles
번호 분류 제목 추천 수 조회 수 글쓴이 날짜
공지 달콤한 디저트 세트 추첨 이벤트(0911-0917) 결과 발표 3 7 943
ESN경매
2020.09.21
공지 땡글 경매! 암호화폐 하드월렛 Ledger Nano S (~9/27) 3 file 11 1152
ESN경매
2020.09.21
공지 ESN 바운티 프로그램 안내 - 스마트 컨트랙트 투표 시스템 구축 및 투표 결과 통계 정보 제공 2 13 1664
ESN운영
2020.09.07
공지 땡글닷컴 출석체크 이벤트(9월) 51 20 4065
ESN경매
2020.09.01
공지 ESN 8월 리포트 3 file 14 1391
ESN운영
2020.08.31
공지 게시판 캐시 적립 정책 변경 안내 (2019/12/20 시행) 51 20 2018
관리자
2019.12.20
공지 로그인이 안되시는 분은 문의해주시기 바랍니다. 13 7 4659
땡글개발자
2019.08.21
369 개발 라이트 코인 채굴할려구 마이닝 서버 만들었어요. 밤새가며 욜심히 만들어 테스트 중입니다.   효율성이 얼마나 좋을지 함 테스트해보고 여러분들께 야그 드릴꼐요.   이더리움은 힘들고, 라이트 코인이라두 전문으로 할 수 있도록...   모바일 버전과, 컴터 브라우저... 11 file 2 2281
ttx478
2017.08.22
368 개발 트레이딩 프로그램 개발 저희 트레이딩 개발팀이 9월 초에 계약관계가 끝나요....   코인트레이딩 프로그램(소프트웨어, logic) 개발 가능하신 분, 쪽지 보내주세요~ 개발비와 로얄티 지급합니다....   9 0 3222
그라빅
2017.08.19
367 개발 종이지갑이에요         이 종이지갑은 실제지만 거래는 없는 공지갑이에요. 5BTC 딴 wallet에 있는데, 문제는 어떻게 꺼내쓸지 고민이에요. bitcoin core는 용량이 너무 커서 download받다가 포기했구요 jaxx wallet는 안 쓰려구요.... 6 file 0 2238
여정혜
2017.08.19
366 개발 (주)아이폴코리아 6way~8way 19" 6u렉타입 밀페형 케이스 땡글 회원여러분 안녕하세요^^   19&quot; 6u타입  렉 6way~8way (공용) 밀폐형 케이스입니다   사진은 8way 인데 공간은 협소하지만 펜을 6개장착해서 쿨링(dc120×25 rpm 3000)은  괜찮습니다   다음주 최종개발 완료되면... 7 file 1 3668
ipol
2017.08.18
365 개발 코인스노티파이 BTC 입금알림을 텔레그램으로 받을 수 있도록 추가했습니다. 코인스노티파이(https://www.coinsnotify.com)에 텔레그램 알림을 받을 수 있도록 기능을 추가했습니다.   얼마전 비트코인 결제 시스템 만들기 글을 올렸는데, 카카오톡이나 텔레그램으로 알림을 받으면 좋겠다는 의... 3 file 2 1841
초밥매니아
2017.08.17
364 개발 웹 브라우저 + python으로 거래소 API 처리하기 2 안녕하세요. 이번에는 거래소 api를 이용하여 실제 거래를 해보겠습니다. 이전 글과 이어지는데 안보셨으면 이전부터 보시기 바랍니다.   1. 거래소 API 시세정보 및 알람 표시 HTML 예제    https://www.ddengle.com... 10 file 18 14374
크로비
2017.08.17
363 개발 안녕하세요 랜딕스 팀입니다. 마케팅 서포터를 찾고 있습니다. 안녕하세요. 랜딕스 팀 강 제롬입니다.    올 초에 블럭체인 사업 시작한다고 이래저래 분주하게 움직이다가, 같이 할 사람 모집한다고 글 여기저기 올리다가 욕만 부지기로 먹고, 그냥 마음맞는 팀원들끼리 뭉쳐서 ... 0 1340
복수장
2017.08.16
362 개발 안녕하세요~ 마이닝알람 어플을 소개합니다~~ 마이닝풀 허브에서 채굴 정지 시 푸시알람 오는 어플을 만들었습니다~~ 앱을 실행하시면 10분마다 마이닝풀 허브를 검사해서 해쉬속도를 받아오고 x표시 뜨면 알람이 오게 만들었습니다!!               현재 마이닝알람은 한 종류의 코인만 사용 가능합니다~   그래서 여러개 채굴하시는 ... 6 file 0 3026
루바또
2017.08.14
개발 비트코인 결제 시스템 만들기 비트코인 결제 시스템을 만드는 튜토리얼입니다. 예전부터 이 글을 써야지 써야지 하다가 이제서야 글을 쓰게 됐네요^^  최대한 접근하기 쉽게 설명해보겠습니다.     1. 설계   일단 어떻게 만들지 큰 그림을 한번 ... 11 file 21 15407
초밥매니아
2017.08.14
360 개발 웹 브라우저 + python으로 거래소 API 처리하기 1 안녕하세요. 예전에 html코드만으로 거래소 이용하는 예제 올렸는데 많은 분들이 추천을 주셔서 이번에도 간단한 코드 올려드리려 합니다.   html코드만으로 거래소 API처리하기는 많은 제약사항이 있지만, 굳이 html... 16 file 18 11771
크로비
2017.08.14
359 개발 리눅스 터미널용 nvidia 오버클럭 스크립트 http://www.nippyzip.com/uploads/170815014119-75339.zip   nv-tool.zip 파일의 압축을 풀면 nv-tool.sh 쉘 스크립트가 들어있습니다.   ssh를 통해서 관리하시는 분들을 위해 터미널을 통해서 오버클럭/팬속도 등등... 8 file 9 3617
ethminer
2017.08.14
358 개발 초보 독학러가 api받는 법에대해 질문이 잇습니당  $.get(&quot;https://api.coinone.co.kr/ticker/?currency=all&quot;, function(data) { var btc = data['btc']['last']  var vol = data['btc']['volume'] ... ... 이런식으로 받아서 잘사용하고있는데  사용하고 싶은 데이터... 8 0 2372
Jackbauer
2017.08.13
357 개발 python 질문좀 드릴께요. def mygetbalance2(market_name):     bal = my.balance()     if market_name.lower() == &quot;krw&quot;:         #print(&quot;KRW balance:&quot;,balance['krw']['avail'])         bb = bal['krw']['avail']         return bb    ... 4 0 1939
태무현
2017.08.13
356 개발 BitcoinYo - 비트코인요 ESCROW(신용거래) 결제 지원   비트코인요 서비스 추가내용을 전달드립니다 ^^;   기존 결제방식에 에스크로(신용거래)기능을 지원해 원하는 의견이 있어서 추가해 보았습니다. (결제수수료가 2배가 되는건 안비밀;)   기존 거래와 달리 약간 복... 11 file 2 2495
이더리움링
2017.08.12
355 개발 허접하지만 알뜰한 기능의 채굴기 모니터링 프로그램입니다 기능 -채굴기 1set의 평균온도와 해쉬 -모든 그래픽카드들의 온도와 해쉬 -온도와 해쉬의 수치별 색상변화 -각 set별 혹은 그래픽카드별 설정수치시 알람 발생(sms 문자발생, 다수인원 가능) -설정 시간마다 표현된 ... 23 file 93 8154
503
2017.08.12
354 개발 마플허 잔고, 마이너 확인 웹 만들었어요ㅋㅋ 이전에 zec,eth 확인웹 만들었는데 ( https://www.ddengle.com/bitcoindeveloper/2537759   최근엔 모네로랑 dgb까지 채굴하게 되었네요 근데 두 마이너가 api를 제공안해줘서 어쩔수없이 마플허로 모니터링할 웹 추... 10 file 5 2902
싱싱88
2017.08.12
353 개발 오토핫키로 api 제작중인데 질문이 있습니다. 프로그래밍을 전문적으로 배운적은 없고 독학하면서 배우는 중입니다.   파이썬으로 배우면서 시작하다가 한글로 된 자료가 너무 부족해서    오토핫키로 바꿔서 새로 제작중에 있습니다.     현재 시세받아오는데 퍼... 4 file 0 3900
가가무
2017.08.11
352 개발 모니터링 프로그램 ver 0.5 업데이트 안녕하세요. 남자별입니다. 이번 업데이트는 기존 요청사항들중 편의성 부분으로 개별 설정할 수 있도록 수정했습니다.   ver 0.5  업데이트                 monitor.ini 설정 추가. 기본 배포된 ini 이외에 수정하... 61 file 44 12678
남자별
2017.08.11
351 개발 블록체인 스타트업을 함께 일궈내실 개발자분을 찾고있습니다. (서울) 블록체인 관련 스타트업을 준비중입니다. 현재는 세미나 형식으로 매주 월요일 강남에서 개발자를 포함해 6명이 모이고있습니다. (개발자3,기획2,마케팅1명) 개발방향은 어느정도 정해져있고, 무근본으로 같이 회사를... 4 0 2369
notyolo
2017.08.11
350 개발 거래소 개발 정보수집중엔데 , 거래소 핫왈렛 콜드왈렛 관련 질문입니다. 주변에 블럭체인관련 개발자가 별로 없어서   거래소 개발준비하는데 어려움이 많네요 ㅠㅠ   1)  거래소 핫왈렛 ,콜드왈렛의  지갑생성은  보통 어떤걸 쓰는지요?        이더의 경우 미스트왈렛으로 거래소 지갑( ... 3 0 1609
록키7
2017.08.11
Board Pagination Prev 1 ... 65 66 67 68 69 70 71 72 73 74 ... 88 Next
/ 88
default debug random = 0 / type = READ / detected = READ