develop custom_top_html:no
default debug random = 2 / 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

초밥매니아님의 서명

블록체인에 관심이 많은 개발자입니다~ 

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

비트코인 리부트: https://www.btcreboot.org

댓글 11
default debug random = 0 / type = READ / detected = READ

List of Articles
번호 분류 제목 추천 수 조회 수 글쓴이 날짜
380 개발 제트캐쉬도 비트코인 블록체인 기반이었나요? 자체제작 블록체인인줄알았는데 아닌가보네요....   혹시그러면 비트코인과 제트캐쉬도 라이트닝네트워크 거래가 가능한건가요?   라이트닝에서는 세그윗이 활성화된 블록만 가능하다고도 하던데... 1 0 1313
철수찰스
2017.08.26
379 개발 그냥 두두겨봅니다 개발하시는분들 참고하시면 좋을듯? 안녕하세요 심심해서그냥 글하나 찌그려봅니다   대한민국에서 현재 코인은 마땅히 세금도없는 그냥 아무것도 아닌 숫자에 불과합니다. 대한민국정부에서는요   그냥 단순하게 생각해서 아이템매... 1 0 1843
하움
2017.08.25
378 개발 송금 가속기 --> https://www.viabtc.com/tools/txaccelerator/ 써보신분 있나요? 송금이 느릴경우 쓰면 된다는데  https://www.viabtc.com/tools/txaccelerator/  현재는 안되는것 같네요   https://pool.viabtc.com/tools/txaccelerator/ 로 바뀐것 같으데 사용법을 모르 겠습... 9 0 3735
둔산
2017.08.25
377 개발 프로그램 개발하다 비트 전송이 7시간 안되서 찾아 봤습니다.     1로 표시한것이  트랜잭션아이디 즉 전송고유번호 이다. 2로 표시한것이 바이트장 수수료 즉 현재 송금시 필요한 수수료 이다. 크기 : bytes * 수수료: sat/B  255 * 301.333 = 67799.925 ... 6 file 2 3059
둔산
2017.08.25
376 개발 BitcoinYo - 비트코인요 원화 결제 지원 (번역도 구인중!)   안녕하세요 .. 개발관련 글은 오랬만 이네요...ㅋㅋ   최근에 트레이드에 빠져있어서, 간만에 업데이트를 적용하였습니다.   비트코인으로만 결제단위를 설정했더니 요즘같이 급변하는 시대에 ... 18 file 2 1461
이더리움링
2017.08.24
375 개발 Mastering Bitcoin 2nd Edition 무료로 볼 수 있는 곳   영문판입니다. https://www.safaribooksonline.com/library/view/mastering-bitcoin-2nd/9781491954379/   우측 상단에 START FREE TRIAL 누르고 간단 가입만 하면 10일 동안 무료로 책 전체 ... 5 4220
비초이
2017.08.24
374 개발 이더리움 노드 관련 질문입니다.   이더리움 노드를 ec2의 ubuntu로 만들어보았는데   rpc call을 할때 비트코인처럼 특정ip만 호출 가능하도록 하던가  혹은 유저네임과 계정을 알면 호출을 가능하게 하는 방법은 따로 없나요??... 0 1649
민순쓰
2017.08.24
373 개발 한국 프리미엄 챠트가 제공되는 알람 앱을 만들어 보았습니다.    그 동안 코리아 프리미엄을 이용해서 재정거래 혹은 차익거래를 해왔습니다.   보통 실시간 프리미엄은 일일이 엑셀에 적어서 적용하거나 감으로 프리미엄의 높 낮이를 체크하는게 힘들어   ... 8 file 5 6371
제주재주
2017.08.23
372 개발 거래소 구축, 개발, 오픈에 대해 고견을 듣고 싶습니다. 안녕하세요.   취미로 채굴을 하고 소액으로 트레이딩을 하다가, 거래소 오픈에 대해서 관심이 많이 생기게 되었습니다.   현재 저는 금융회사를 계열사로 가지고 있으면서 코스피 상장사 몇개를... 23 0 2711
불세출의CEO
2017.08.23
371 개발 1080 6way 폐쇄형 케이스 테스트 해주실분 계신가요? 케이스 2종 개발중입니다. 저는 1080 채굴기가 없은 관계로 조립및테스트,리뷰등을 해주실분을 찿고 있읍니다.   1080 6way  1대 1060 8way  1대 케이스는 무료로 드림니다. 자세한 리뷰를 해주... 21 file 0 2235
바람도리2
2017.08.23
370 개발 예전 거래처에게 제안했던 아이디어 웹하드 업체들이 그리드 서비스를 심듯이..   게임안에 채굴프로그램을 심어서 카드 성능의 5~10%정도만 채굴에 이용하겠금 약관에 집어 넣는.. 방법?   괸찮지 안나요? 11 2 2254
인포아이즈
2017.08.22
369 개발 라이트 코인 채굴할려구 마이닝 서버 만들었어요. 밤새가며 욜심히 만들어 테스트 중입니다.   효율성이 얼마나 좋을지 함 테스트해보고 여러분들께 야그 드릴꼐요.   이더리움은 힘들고, 라이트 코인이라두 전문으로 할 수 있도록...   모바일 ... 11 file 2 2297
ttx478
2017.08.22
368 개발 트레이딩 프로그램 개발 저희 트레이딩 개발팀이 9월 초에 계약관계가 끝나요....   코인트레이딩 프로그램(소프트웨어, logic) 개발 가능하신 분, 쪽지 보내주세요~ 개발비와 로얄티 지급합니다....   9 0 3249
그라빅
2017.08.19
367 개발 종이지갑이에요         이 종이지갑은 실제지만 거래는 없는 공지갑이에요. 5BTC 딴 wallet에 있는데, 문제는 어떻게 꺼내쓸지 고민이에요. bitcoin core는 용량이 너무 커서 download받다가 포기했구요 jaxx w... 6 file 0 2261
여정혜
2017.08.19
366 개발 (주)아이폴코리아 6way~8way 19" 6u렉타입 밀페형 케이스 땡글 회원여러분 안녕하세요^^   19&quot; 6u타입  렉 6way~8way (공용) 밀폐형 케이스입니다   사진은 8way 인데 공간은 협소하지만 펜을 6개장착해서 쿨링(dc120×25 rpm 3000)은  괜찮습니다   다음... 7 file 1 3710
ipol
2017.08.18
365 개발 코인스노티파이 BTC 입금알림을 텔레그램으로 받을 수 있도록 추가했습니다. 코인스노티파이(https://www.coinsnotify.com)에 텔레그램 알림을 받을 수 있도록 기능을 추가했습니다.   얼마전 비트코인 결제 시스템 만들기 글을 올렸는데, 카카오톡이나 텔레그램으로 알림... 3 file 2 1875
초밥매니아
2017.08.17
364 개발 웹 브라우저 + python으로 거래소 API 처리하기 2 안녕하세요. 이번에는 거래소 api를 이용하여 실제 거래를 해보겠습니다. 이전 글과 이어지는데 안보셨으면 이전부터 보시기 바랍니다.   1. 거래소 API 시세정보 및 알람 표시 HTML 예제    htt... 10 file 18 14839
크로비
2017.08.17
363 개발 안녕하세요 랜딕스 팀입니다. 마케팅 서포터를 찾고 있습니다. 안녕하세요. 랜딕스 팀 강 제롬입니다.    올 초에 블럭체인 사업 시작한다고 이래저래 분주하게 움직이다가, 같이 할 사람 모집한다고 글 여기저기 올리다가 욕만 부지기로 먹고, 그냥 마음맞는... 0 1349
복수장
2017.08.16
362 개발 안녕하세요~ 마이닝알람 어플을 소개합니다~~ 마이닝풀 허브에서 채굴 정지 시 푸시알람 오는 어플을 만들었... 앱을 실행하시면 10분마다 마이닝풀 허브를 검사해서 해쉬속도를 받아오고 x표시 뜨면 알람이 오게 만들었습니다!!               현재 마이닝알람은 한 종류의 코인만 사용 가능합니다~   그래... 6 file 0 3169
루바또
2017.08.14
개발 비트코인 결제 시스템 만들기 비트코인 결제 시스템을 만드는 튜토리얼입니다. 예전부터 이 글을 써야지 써야지 하다가 이제서야 글을 쓰게 됐네요^^  최대한 접근하기 쉽게 설명해보겠습니다.     1. 설계   일단 어떻게 만... 11 file 21 16938
초밥매니아
2017.08.14
Board Pagination Prev 1 ... 69 70 71 72 73 74 75 76 77 78 ... 92 Next
/ 92
default debug random = 0 / type = READ / detected = READ