개발
2017.08.14 14:15

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

profile
조회 수 9021 좋아요 20 댓글 11

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

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

 

 

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

Coin2Fun(이더리움 로또): https://www.coin2fun.com

Comment '11'

List of Articles
번호 분류 제목 좋아요 조회 수 글쓴이 날짜
공지 개발 [좋아요 5개] -> 추천글로 이동됩니다. 5 3312
쌍둥아빠
2017.04.01
363 개발 안녕하세요~ 마이닝알람 어플을 소개합니다~~ 마이닝풀 허브에서 채굴 정지 시 푸시알람 오는 어플을 만들었습니다~~ 앱을 실행하시면 10분마다 마이닝풀 허브를 검사해서 해쉬속도를 받아오고 x표시 뜨면 알람이 오게 만들었습니다!!               현재 마이닝알람은 한 종류의 코인만 사용 가능합니다~   그래서 여러개 채굴하시는 ... 6 file 2362
루바또
2017.08.14
» 개발 비트코인 결제 시스템 만들기 비트코인 결제 시스템을 만드는 튜토리얼입니다. 예전부터 이 글을 써야지 써야지 하다가 이제서야 글을 쓰게 됐네요^^  최대한 접근하기 쉽게 설명해보겠습니다.     1. 설계   일단 어떻게 만들지 큰 그림을 한번 ... 11 file 20 9021
초밥매니아
2017.08.14
361 개발 웹 브라우저 + python으로 거래소 API 처리하기 1 안녕하세요. 예전에 html코드만으로 거래소 이용하는 예제 올렸는데 많은 분들이 추천을 주셔서 이번에도 간단한 코드 올려드리려 합니다.   html코드만으로 거래소 API처리하기는 많은 제약사항이 있지만, 굳이 html... 16 file 17 8287
크로비
2017.08.14
360 개발 리눅스 터미널용 nvidia 오버클럭 스크립트 http://www.nippyzip.com/uploads/170815014119-75339.zip   nv-tool.zip 파일의 압축을 풀면 nv-tool.sh 쉘 스크립트가 들어있습니다.   ssh를 통해서 관리하시는 분들을 위해 터미널을 통해서 오버클럭/팬속도 등등... 8 file 9 2888
ethminer
2017.08.14
359 개발 초보 독학러가 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 1933
Jackbauer
2017.08.13
358 개발 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 1616
태무현
2017.08.13
357 개발 BitcoinYo - 비트코인요 ESCROW(신용거래) 결제 지원   비트코인요 서비스 추가내용을 전달드립니다 ^^;   기존 결제방식에 에스크로(신용거래)기능을 지원해 원하는 의견이 있어서 추가해 보았습니다. (결제수수료가 2배가 되는건 안비밀;)   기존 거래와 달리 약간 복... 11 file 2 1988
이더리움링
2017.08.12
356 개발 허접하지만 알뜰한 기능의 채굴기 모니터링 프로그램입니다 기능 -채굴기 1set의 평균온도와 해쉬 -모든 그래픽카드들의 온도와 해쉬 -온도와 해쉬의 수치별 색상변화 -각 set별 혹은 그래픽카드별 설정수치시 알람 발생(sms 문자발생, 다수인원 가능) -설정 시간마다 표현된 ... 23 file 93 7287
503
2017.08.12
355 개발 마플허 잔고, 마이너 확인 웹 만들었어요ㅋㅋ 이전에 zec,eth 확인웹 만들었는데 ( https://www.ddengle.com/bitcoindeveloper/2537759   최근엔 모네로랑 dgb까지 채굴하게 되었네요 근데 두 마이너가 api를 제공안해줘서 어쩔수없이 마플허로 모니터링할 웹 추... 10 file 5 2578
싱싱88
2017.08.12
354 개발 오토핫키로 api 제작중인데 질문이 있습니다. 프로그래밍을 전문적으로 배운적은 없고 독학하면서 배우는 중입니다.   파이썬으로 배우면서 시작하다가 한글로 된 자료가 너무 부족해서    오토핫키로 바꿔서 새로 제작중에 있습니다.     현재 시세받아오는데 퍼... 4 file 2531
가가무
2017.08.11
353 개발 모니터링 프로그램 ver 0.5 업데이트 안녕하세요. 남자별입니다. 이번 업데이트는 기존 요청사항들중 편의성 부분으로 개별 설정할 수 있도록 수정했습니다.   ver 0.5  업데이트                 monitor.ini 설정 추가. 기본 배포된 ini 이외에 수정하... 60 file 44 10807
남자별
2017.08.11
352 개발 블록체인 스타트업을 함께 일궈내실 개발자분을 찾고있습니다. (서울) 블록체인 관련 스타트업을 준비중입니다. 현재는 세미나 형식으로 매주 월요일 강남에서 개발자를 포함해 6명이 모이고있습니다. (개발자3,기획2,마케팅1명) 개발방향은 어느정도 정해져있고, 무근본으로 같이 회사를... 4 2085
notyolo
2017.08.11
351 개발 거래소 개발 정보수집중엔데 , 거래소 핫왈렛 콜드왈렛 관련 질문입니다. 주변에 블럭체인관련 개발자가 별로 없어서   거래소 개발준비하는데 어려움이 많네요 ㅠㅠ   1)  거래소 핫왈렛 ,콜드왈렛의  지갑생성은  보통 어떤걸 쓰는지요?        이더의 경우 미스트왈렛으로 거래소 지갑( ... 3 1324
록키7
2017.08.11
350 개발 어제 코인스노티파이에 첫 고객문의가 들어왔습니다. 어제 오후에 &quot;초밥매니아님?&quot; 이라는 전화를 받았습니다.   무슨 장난전화인가 했는데 알고보니 제가 만든 코인스노티파이 가입하고 인증메일이 안온다는 문의였습니다. (코인스노티파이는 제가 만든 비트코인 입금 ... 27 14 4033
초밥매니아
2017.08.11
349 개발 이더리움 메인넷에 컨트렉트 실행 관련 문제   안녕하세요. 이더리움 메인넷에 컨트랙트 하나 실행 시키려 합니다.   그런데 가스 비용을 이더리움 월렛에서 최저 가격으로 했는데 컨트랙 생성이 30분이 지나도 안되네요.   다른 분들은 이런 부분에 대해서 어떠... 2 1236
수집가
2017.08.11
348 개발 HI Miner basic 0.4.5 업데이트 했습니다. 무료 채굴관리 프로그램 HI Miner basic 0.4.5 버전 업데이트 안내입니다.   ※ 베타인 만큼 오류가 있을 수 있습니다. ※ 기존 버전 사용하시는 분들은 채굴 설정을 다시 해주시기 바랍니다. ※ 사용중 오류가 발생하면... 10 10 3771
AMDMANIA
2017.08.10
347 개발 12V DC 팬 질문좀 드립니다. 장비에서 팬소리가 나서 분해를 해보니 12v DC 40mm 쿨링팬에서 소음이 나더군요.   12v DC  == 1.4w  라고 표기 되어 있습니다. (암페어 계산하니 0.11a 나오네요)    궁금한건 12v 인거 사서 교체 하면 되는건가요?... 3 1341
발로짜
2017.08.09
346 개발 엑셀로 시세 보는거 만들려는데 뭐가 틀린지 모르겠습니다 대체 어디가 틀린건지 모르겠군요..1시간동안 봐도 틀린곳이 없는 것 같은데......      function getBlockChainArray2KRWByBithumb (arCoin)  {   var url = 'https://api.bithumb.com/public/ticker/ALL';   var re... 8 file 1 2122
흑곰짜응
2017.08.08
345 개발 거래소 설립에 따른 해외 가상화폐거래소를 개설 준비중입니다.   고수님들의 고언을 듣고자 합니다. 6 1 2975
아인소프
2017.08.08
344 개발 안녕하세요. 코인알람 개발자입니다~! 안녕하세요. 코인알람 개발자입니다   안녕하세요 코인투자자 여러분. 코인알람 개발자입니다. 많은 분들의 성원에 힘입어 더욱 열심히 개발을 하고 있습니다. 이번 업데이트에는 여러 거래소에 분산 투자된 코인들을... 21 file 9 5276
CoinAlarm
2017.08.07
Board Pagination Prev 1 ... 33 34 35 36 37 38 39 40 41 42 ... 56 Next
/ 56