Android 유료로 서버에서 영수증 확인

5426 단어 PHPAndroid

개요


안드로이드 프로젝트 요금을 받을 때 서버 측이 앱에서 보낸 영수증의 정당성을 검증해야 하기 때문에 서버 측이 한 일을 총괄했다.

컨디션

  • In-app Billing Version 3 API
  • 대략적인 절차 설명

  • PEM 형식의 공개 키 준비
  • 측방향 서버로 서명 및 Developer Paylad 포함 영수증 발송
  • 서버 측 검증
  • RSA 공개 키가 PEM으로 변경됨


    Google Play Developer Constore의 [서비스 및 API]에 RSA 공개 키가 있기 때문입니다.
    복사한 후 공공 파일 이름으로 로컬로 저장합니다.

    이전에 다음 명령으로 저장된 public 파일을 PEM 형식, public으로 변환합니다.pem을 생성합니다.
    (나는 Mac의 종착역에서 했기 때문에 베이스 64-D)
    $ base64 -D public > public.der
    $ openssl rsa -inform DER -outform PEM -pubin -in public.der -out public.pem
    

    응용 프로그램 측면


    영수증에는 Developer Paylad가 있고 개발자는 임의의 문자열을 Developer Paylad로 지정할 수 있습니다.응용 프로그램은 영수증에 사용자 표지부를 추가함으로써 서버 측은 영수증을 더욱 튼튼하게 검증할 수 있다.
    String developerPayload = "ユーザ識別子";
    Bundle buyIntentBundle = mService.getBuyIntent(3, getPackageName(),
       sku, "inapp", developerPayload);
    

    서버 측


    서버는 발송된 영수증과 서명을 사용하여 검증합니다.
    청구서에 포함된 Developer Paylad에 구상된 사용자 식별자가 있는지 확인합니다.
    <?php
    
    // 1. レシートと署名どちらもBase64エンコードされていることを想定
    $receipt   = base64_decode($_POST['receipt']);  
    $signature = base64_decode($_POST['signature']);
    
    // 2. レシートの検証
    $public_key      = file_get_contents('/path/to/file/public.pem');
    $public_key_id   = openssl_get_publickey($public_key);
    $result = (int)openssl_verify($receipt, $signature, $public_key_id);
    
    if ($result === 0) {
      echo '署名が正しくありません';
      // error_handle();
    } else if ($result === -1) {
      echo '署名の検証でエラーが発生しました';
      // error_handle();
    }
    
    openssl_free_key($public_key_id);
    
    // 3. Developer Payloadの確認
    $user_identifier = 'ユーザ識別子';
    $obj = json_decode($receipt);
    if ($obj->developerPayload !== $user_identifier) {
      echo 'Developer Payloadが正しくありません';
      // error_handle();
    }
    
    // 4. 以下、サービスのアイテム課金処理
    
    
    문제가 없다면 DB에 로그인하는 등 하고 싶은 서비스를 하면 끝!

    참고 자료

  • In-app Billing에서 서버측 signature 검증
  • iOS/Android 애플리케이션의 부당한 영수증 등록 유료 회원 방지
  • API Version3 유료 설치
  • 좋은 웹페이지 즐겨찾기