-
Android 인앱 결제 PHP 영수증 체크 (2016년 8월 기준)ETC 2016. 8. 31. 14:15
1. Client app 에서 결제처리를 완료 하면 json 형식으로 된 영수증을 받게 된다.
2. 서버측 PHP 영수증 검증 코드 작성
$s_recipt 에는 구글로 부터 받은 json 문자열 전체를 넣어주고,
$s_signiture는 영수증 json 내용중 signiture 항목의 값을 추출해 넣어준다.
//the app rsa key in google developer console define("APP_RSA_KEY","MIIBI.....ABCDE"); function CheckReceipt($s_recipt, $s_signiture) { //open ssl verification $s_pub_key = "-----BEGIN PUBLIC KEY-----\n".chunk_split(APP_RSA_KEY, 64, "\n")."-----END PUBLIC KEY-----"; $o_pub_key = openssl_pkey_get_public($s_pub_key); if ($o_pub_key === false) { echo "invalid_receipt"; return -1; } $b_res = openssl_verify($s_bill_json, base64_decode($s_signiture), $o_pub_key); if($b_res != 1) { echo "invalid_receipt"; return -1; } //json 객체로 변환하자 $o_bill = json_decode($s_bill_json); //영수증 상태를 체크한다 $i_pstat = $o_bill->{'purchaseState'}; if($i_pstat != 0) { if($i_pstat == 1) echo "cancelled_receipt"; else if($i_pstat == 2) echo "refunded_receipt"; else echo "invalid_receipt"; return -1; } //option : package name checking if($o_bill->{"packageName"} != "com.company.yourapp") { echo "invalid_pkg_name"; return -1; } //option : product id checking if($o_bill->{"productId"} != "hp_potion") { echo "invalid_pid"; return -1; } return 0; }
(2016년 8월 기준 정상적으로 작동함을 확인하였다.)
'ETC' 카테고리의 다른 글
mysqldump 파일에서 definer 모두 제거하기 (0) 2017.05.12 리눅스 pkill과 동일한 리눅스 명령 (0) 2016.11.14 git 일부 디렉토리만 clone 받기 (sparse checkout) (1) 2016.10.14 IOS 인앱 결제 PHP 영수증 체크 (2016년 8월 기준) (6) 2016.08.31 구글 플러스 초간단 access token 체크 방법 (0) 2016.01.12