인제 인앱 결제 후 서버에 영수증을 저장하는 법을 알아보자.

 

이 글을 보기 전에

Node.js + Database 만들기 - 코드저장소 (tistory.com)

VM에 서버 올리기 - 코드저장소 (tistory.com)

를 완료하고 오자!


일단 예제 프로젝트를 다운로드 받고 열어준다.

예제 프로젝트는 Unity3d 2020.3.0f1 를 사용한다.

 

예제 프로젝트는 1개의 GameScene 으로 이루어져있다.

 

 

Client

파일 첨부

InAppExample.zip
0.04MB

 

예제 프로젝트를 열면 수많은 에러가 여러분을 반길 것이다.

순서대로 필요한 설정들을 하면 모든 에러를 없앨 수 있을 것이다.

 

그 다음에

[Firebase] Unity3d 인앱 결제 + 서버에 영수증 저장 - 코드저장소 (tistory.com)(old)

위 글에서 2가지 항목을 진행하면 된다.

1. Keystore 세팅을 확인한다.

인앱 기능을 사용하기 위해서는 Unity3d 에서 빌드한 APK를 Google 개발자 콘솔에서 출시를 해야하기 때문에 Keystore 세팅이 필요하다.

Android App 을 만든 후 SHA 지문 세팅까지 할 필요가 없다.

아래에서 ketstore 세팅 하는 법을 찾아본다.

[Firebase] Firebase 기본 설정 - 코드저장소 (tistory.com)

 

2. Client 세팅

구글 개발자 콘솔에서 진행하는 IAP 설정은 위 링크를 참고해서 진행합니다.

 

2020 버전으로 넘어오며 IAP 세팅하는 법의 UI가 여러가지 변경이 되어 변경된 점을 아래에서 새로 설명합니다.

만약 프로젝트를 열던 도중 아래와 같이 Safe Mod에 대해서 물어보면 Ignore 버튼을 누르고 열어준다.

 

 

프로젝트를 열면 IAPManager에서 많은 에러가 발생할 것이다.

 

먼저 Unity3d 프로젝트로 돌아온 후 Window - General - Services 를 연다.

 

In-AppPurchaing 을 누른 후 새로운 ProjectID를 만들어준다.

Unity 로그인을 했다면 목록을 눌렀을때 자신의 아이디가 있을 것이다.

 

현재 만드는 앱의 타겟이 13세 이하 어린이들이 대상인가요? 물음에는 No 를 선택하자.

 

IAP On 을 해준다.

 

그리고 아래에 좀 더 현대적인 com.unity.purchasing 을 사용 할 수 있다는 말이 있다.

Migrate 버튼을 누른다.

 

현대적인 버전으로의 이주작업이 진행되며 최종적으로 IAP Installer 창이 뜰것이다.

그리고 현재 버전을 보면 2.2.2에서 3.0.1 로 업데이트 된 것을 확인 할 수 있다.

 

그리고 모든 오류가 없어진 것을 확인 할 수 있을 것이다.

 

인제 Build Settings 에서 Android 로 Switch Platform 을 하자.

 

 

 

Android 로 Switch Platform 할 경우 아래와 같은 창이 나오는데 Disable 를 누르고 넘어간다.

 

 

인제 플레이 버튼을 눌러보자.

이때, macOS 카탈리나 이상 부터는 플레이 버튼을 눌렀을때 아래와 같은 오류가 발생할 수 있다.

 

라는 에러가 발생한다면 맥 시스템 환경설정 - 보안 및 개인 정보 보호 에서 확인 없이 허용을 눌러줘야한다.

 

 

그리고 다시 플레이 버튼을 누르면 아래와 같이 한번 더 물어본다.

이때 열기 버튼을 눌려주면 된다.

 

 

인제 다시 [Firebase] Unity3d 인앱 결제 + 서버에 영수증 저장 - 코드저장소 (tistory.com)(old)

로 돌아가 IAP 이후 세팅을 계속 진행하면 된다!

 

그리고 예제 프로젝트에는 IAPManager 에 내용을 채워줘야하는데

아래와 같이 채워주면 된다.

 

 

ServerPath 의 경우 자신의 VM IP와 Port 를 적어주면 되고

Txt 들과 ShopView는 아래에 있는 Content 와 CoinText, LogText 를 사용하면 된다.

 

 

Gold Button 은 Prefebs 폴더에 있다.

 

 

 

Server

 

인제 서버를 제작해보자.

 

Node.js + Database 만들기 - 코드저장소 (tistory.com)

에서 만들었던 서버를 사용합니다.

 

db.js 아래쪽에 영수증 관련 처리 코드를 추가해줍니다.

// 클라이언트가 보낸 영수증을 받은 후 DB에 저장한다.
router.post('/postReceiptSave', (req, res) => {
    const work = async () => {
        try{
            // 클라이언트에서 보낸 json 데이터
            var receiptData = req.body;

            console.log(receiptData.transaction_id);

            // firestore 에서의 collection은 단순히 문서의 컨테이너이다.
            // db에 'receipt'라는 컬렉션이 없으면 자동으로 생성 후 사용하며
            // 있다면 그대로 사용한다.
            firebaseAdmin.firestore().collection('receipt')
            // doc() 이면 firestore가 자동으로 id로 문서가 생성한다.
            // doc('임의의 이름') 이면 사용자가 지정한 이름으로 문서가 생성된다.
            .doc(receiptData.transaction_id)
            // JSON 데이터를 직접 넣는다.
            .set(receiptData)
            .then(() => {
                // 데이터 입력 성공 시...
                return res.send(true);
            }, (err) => {
                // 데이터 입력 실패 시...
                throw err;
            });
        } catch(err) {
            console.log(err);
            
            return res.send(false);
        }
    }

    work();
});

// 클라이언트가 보낸 영수증 이름으로 DB에서 검색 후 클라이언트에 JSON 되돌려준다.
router.get('/getSearchData', (req, res) => {
    const work = async () => {
        try{
            var id = req.query.transaction_id;

            // 문서 한 개만 찾은 후 클라로 보낸다.
            firebaseAdmin.firestore().collection('receipt').doc(id).get()
            .then((snapshot) => {
                // 찾은 문서에서 데이터를 JSON 형식으로 얻는다.
                var receiptData = snapshot.data();

                return res.json(receiptData);
            }, (err) => {
                throw err;
            });

            // 만약 
        } catch(err) {
            console.log(err);

            return res.send(false);
        }
    }

    work();
});

 

 

db.js 에 새롭게 내용을 추가했다면 이 db.js 를 우리의 vm server에 올려보겠다.

터미널로 git 에 서버 수정점을 올려보자.

서버 폴더 위치로 이동한 후 아래 명령어를 실행해보자.

$ git add *

 

그리고 어떠한 코드를 수정했는지 이유나 설명을 적어보자.

$ git commit -m "설명 이나 이유"

 

마지막으로 git에 올려보자.

$ git push origin master

 

 

이렇게 git 최신화를 완료했다.

이 최신 db.js 를 인제 서버에서 pull 을 받은 후 제대로 작동하는지 테스트 해보자.

 

ssh 로 서버에 접속하고 생성했던 서버 폴더 위치로 이동한다.

이동이 완료되었다면 git pull 을 받아보자.

$ git pull

$ 자신의 깃랩 아이디

$ 자신의 깃랩 비밀번호

 

서버 실행을 한 후 에러가 발생하는지 확인한다.

아무 문제 없이 실행이 된다면 예제 프로젝트를 안드로이드 apk로 빌드한 후 Firebase Firestore 에 영수증 정보가 제대로 입력이 되는 확인 해본다.

 

아래와 같이 값이 입력이 되어야한다.

(아래 사진은 에디터에서 임의로 값을 입력하여 서버에 보낸것이다.)

 

 

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기