PHP에서 Facebook Login Access Token으로 이메일(Email) 정보 받아오기 [소스코드]
흔히 우리가 앱을 개발할 때는 페이스북(Facebook) 회원가입/로그인 기능을 구현하곤 합니다. 소셜 로그인 기능에서 가장 중요한 것은 서버에서 이를 검증하는 것입니다. 이미 페이스북 계정으로 가입이 된 사용자의 로그인을 처리하는 소스코드는 PHP로 다음과 같이 작성할 수 있습니다. 이 때 해당 서버에서는 이메일(Email)을 기준으로 회원을 구분한다고 가정합니다. 다시 말해 Facebook API로부터 Access Token으로 이메일 정보를 받아 와서, 그것으로 서버에서 로그인 처리를 시켜주는 것입니다.
이미 사용자가 앱에서 로그인을 했다고 가정하고, Access Token을 서버로 보냈을 때 이를 처리하는 예제입니다. 다음의 소스코드를 참고하시면 될 것 같습니다.
// 사용자로부터 Facebook 로그인 이후 Access Token을 받습니다.
$access_token = $this->input_check('access_token');
$client = new \GuzzleHttp\Client();
if($access_token == "") {
$this->output->set_status_header(400); // 입력 값 형식이 바르지 않습니다.
exit;
}
try {
// Facebook Graph API를 이용하여 Email 정보를 받아올 수 있습니다.
$response = $client->request('GET', 'https://graph.facebook.com/me?fields=name,email&access_token='.$access_token);
$body = $response->getBody();
if($response->getStatusCode() == 400) {
$this->output->set_status_header(500);
exit;
}
$json_response = json_decode($body, true);
// Facebook Graph API로부터 Email 정보를 받아와 출력합니다.
echo $json_response['email'];
/*
// 아래는 로그인 인증 수행을 위한 처리 로직 예제입니다.
$email_data['member_email'] = $json_response['email'];
$result = $this->model_login->check_signup_type($email_data);
if($result) {
switch($result->signup_type) {
case '0' :
$this->output->set_status_header(503); // 일반 회원으로 가입한 계정입니다.
exit; break;
default:
$info = $this->model_login->get_info_by_email($email_data);
if(empty($info)) {
$this->output->set_status_header(501); // 존재하지 않는 계정입니다.
exit;
}
$token = array(
"exp" => time() + (60 * 60 * 24 * 7), // Refresh Token의 유효 기간은 7일입니다.
"member_idx" => $info->member_idx,
"token_type" => "refresh_token"
);
$jwt = JWT::encode($token, $this->jwt_key);
$response = array("refresh_token" => $jwt);
echo json_encode($response);
}
} else {
$this->output->set_status_header(501); // 존재하지 않는 계정
exit;
}
*/
} catch (Exception $e) {
// 예외 처리를 진행합니다.
}
'기타' 카테고리의 다른 글
| 컴퓨터공학과 석사 대학원생의 일기 (0) | 2019.07.06 |
|---|---|
| 인터넷으로 사업자 폐지 하는 방법 (홈택스 이용) (0) | 2019.06.24 |
| 구글 인 앱 결제(IAP) 서버 검증은 어떻게 하는가? [정리 요약] (1) | 2019.06.03 |
| 이사 갈 때 주소 변경과 관련한 Tip [정리 요약] (0) | 2019.06.03 |
| 병무청 입영일자 연기 방법 (인터넷 신청) (4) | 2019.06.01 |
구글 인 앱 결제(IAP) 서버 검증은 어떻게 하는가? [정리 요약]
구글 인 앱 결제(IAP)는 특정한 애플리케이션의 사용자가 인 앱 결제를 이용할 수 있도록 해주는 기능입니다. 일반적으로 인 앱 결제 기능을 앱에 넣는 경우, 앱에서 사용자가 특정한 물품을 구매한 뒤에 서버의 결제 완료 API를 호출하게 됩니다. 그러면 서버의 결제 완료 API는 앱 사용자에게 아이템을 지급하는 등의 처리를 하게 됩니다.
하지만 많은 서버 개발자들은, 구글 인 앱 결제(In App Purchasing)에 검증 로직을 넣지 않습니다. 이는 매우 위험하다고 할 수 있습니다. 인 앱 결제 기능을 이용할 때는 클라이언트가 서버 결제 완료 API를 호출했을 때, 해당 사용자가 진짜로 결제를 했는지 확인해야 합니다. 예를 들어, 특정한 악성 클라이언트는 실제로 결제를 하지 않았음에도 서버 API 주소를 알아내서, 해당 API를 무한정 호출해 부당한 이익을 취할 수 있습니다.
따라서 이번 시간에는 구글 인 앱 결제(IAP) 인증을 위한 구글 개발자 API를 사용하는 방법을 소개합니다.
▶ Google Cloud Platform API Library: https://console.cloud.google.com/apis/library
구글 라이브러리는 위 링크에서 모두 확인할 수 있습니다.

이후에 다음과 같이 [Google Play Android Developer API]를 검색하여 확인할 수 있도록 합니다.

이후에 [Google Play Android Developer API]를 사용하겠다고 설정하시면 됩니다.

이 때 [프로젝트]가 없는 경우 [프로젝트 만들기]를 진행하고, [새 프로젝트 생성] 이후에 [사용 설정]을 하시면 됩니다. 반면에 이미 구글 플레이 콘솔에 올라가 있는 앱과 연동되어 있는 프로젝트가 있는 경우 해당 프로젝트에서 그대로 확인하시면 됩니다. 우리가 해야 할 일은 바로 [사용자 인증 정보]를 만드는 것입니다. 다시 말해 특정한 안드로이드 앱의 사용자 결제 내역을 확인할 수 있는 권한을 가지고 있는, '사용자 인증 정보'를 생성해야 하는 것입니다.

따라서 [사용자 인증 정보]로 이동한 뒤에 [사용자 인증 정보 만들기]를 눌러 [서비스 계정 키] 탭에 들어갑니다.

이후에 [새 서비스 계정]을 선택한 뒤에 [서비스 계정 이름]을 설정합니다. 그리고 역할은 [소유자]로 선택할 수 있습니다. 이제 [생성] 버튼을 눌러서 JSON 파일을 생성하시면 됩니다. 생성 이후에는 JSON 파일이 생성되므로, 이 파일을 저장해주세요. 향후 서버에서 이 JSON 파일을 이용하여 구글 인 앱 결제 인증을 수행할 수 있습니다.
이제 구글 플레이 개발자 콘솔에 업로드가 되어 있는 앱을 확인합니다.
▶ 구글 플레이 개발자 콘솔: https://play.google.com/apps/publish
다음과 같이 Play Console에서 [설정] 탭에 들어가 [API 액세스]를 확인합니다. 그리고 만들어진 서비스 계정에 [액세스 권한 부여]를 진행하고, [앱 정보 보기] 및 [재무 데이터 보기]만 체크하여 [사용자 추가]를 진행하시면 됩니다.

결과적으로 다음과 같이 [재무 데이터 보기] 권한이 있도록 해주시면 되는 것입니다.

이제 재무 데이터를 볼 수 있는 권한이 추가되었으므로, 실제로 서버에서 API를 호출하여 인 앱 결제 내역을 확인할 수 있게 되었습니다. 서버 프로그램에서 이를 구현하기 위해서는, API 문서를 읽어 보시면 됩니다.
▶ 구글 결제 관련 개발자 API 명세서: https://developers.google.com/android-publisher/api-ref/purchases/products
명세서 내용을 확인하면, 어떠한 방식으로 인 앱 결제 정보를 가져올 수 있는지 나타납니다. 핵심이 되는 내용은 다음과 같습니다.

구글 결제 관련 개발자 API 사용 방법은 다음과 같습니다. 저는 PHP를 기준으로 설명했습니다.
cd /home/ubuntu
sudo vi composer.json
# Google API 설치 내용 작성하기
{
"require": {
"google/apiclient": "^2.0"
}
}
# Composer로 설치하기
sudo composer install
ls
# 해당 폴더에 설치되어 있는 vendor 이용하기
# 연동을 위해 Google의 API JSON 키 파일을 /home/ubuntu의 위치에 두기
# 이후에 다음과 같이 사용하기 (클라이언트로부터 product_id와 purchase_token을 받도록)
$client = new Google_Client();
$client->setAuthConfig('/home/ubuntu/IAP.json');
$client->addScope('https://www.googleapis.com/auth/androidpublisher');
$service = new Google_Service_AndroidPublisher($client);
$package_name = "패키지 이름";
$purchase = $service->purchases_products->get($package_name, $product_id, $purchase_token);
# 이후에 다음의 Getter 함수로 각 상태 값 확인 가능
$purchase->getPurchaseState()
$purchase->getPurchaseType()
(+추가) PHP 코드에 대한 자세한 내용은 다음의 포스팅에 기록해 놓았습니다.
https://ndb796.tistory.com/296
PHP 서버에서 안드로이드 인 앱 결제(IAP) 여부를 검증하는 API 개발하는 방법
일반적으로 안드로이드 어플리케이션을 개발할 때에는 인 앱 결제(IAP) 기능을 구현해야 할 때가 많습니다. 다만 이러한 인 앱 결제 기능을 구현할 때 알아 두어야 할 점이 있습니다. 그것은 바로 클라이언트가 제..
ndb796.tistory.com
'기타' 카테고리의 다른 글
| 인터넷으로 사업자 폐지 하는 방법 (홈택스 이용) (0) | 2019.06.24 |
|---|---|
| PHP에서 Facebook Login Access Token으로 이메일(Email) 정보 받아오기 [소스코드] (1) | 2019.06.03 |
| 이사 갈 때 주소 변경과 관련한 Tip [정리 요약] (0) | 2019.06.03 |
| 병무청 입영일자 연기 방법 (인터넷 신청) (4) | 2019.06.01 |
| 프로세스 익스플로러(Process Explorer)의 기본적인 사용법 (0) | 2019.05.14 |
이사 갈 때 주소 변경과 관련한 Tip [정리 요약]
흔히 이사를 갈 때 주소 변경을 하는 것은 귀찮은 작업이 될 수 있습니다. 이때 주소 변경을 일괄적으로 도와주는 서비스가 있습니다. 대표적인 서비스로는 KT Moving이 있습니다. 이름은 KT Moving인데 실질적으로는 상당히 많은 카드사 및 통신사와 제휴가 되어 있기 때문에, 이 서비스만 이용해도 상당히 많은 불필요한 과정을 줄일 수 있습니다.
※ KT Moving ※
▶ KT Moving: http://www.ktmoving.com/
KT Moving 서비스를 이용해 봅시다. 참고로 moving은 이사라는 뜻을 가지고 있습니다. 가장 먼저 변경된 집 주소를 입력한 뒤에 [주소 변경 신청] 버튼을 누릅니다.

이후에 약관에 동의하고, 본인 인증을 진행합니다. 필자는 [휴대폰 인증]을 이용했습니다.

KT Moving 서비스 제휴사를 선택합니다. 필자는 번거롭게 느껴져서 그냥 전체 선택했습니다.

필자는 [자택] 주소가 변경된 것이므로, 전부 자택으로 선택했습니다.

이제 신청 정보를 입력합니다. 본인의 휴대폰 번호, 이메일 주소 등을 확인합니다.

결과적으로 다음과 같이 신청이 완료되었습니다.

※ 농협 주소일괄변경서비스 (2021년 기준으로 운영되고 있지 않음) ※
농협은 [주소일괄변경서비스]를 제공하고 있습니다. 이것을 이용하면 자신이 이용하고 있는 은행/카드 서비스의 주소를 일괄적으로 변경할 수 있습니다. 사실 농협뿐만 아니라 대부분의 은행 서비스가 이를 지원하고 있습니다. 자신이 이용하는 은행의 인터넷 뱅킹 서비스에 접속하셔서, 주소지 일괄 변경 요청을 진행해주세요.
이는 특정한 금융 회사에게 권한을 위임하여, 자신이 이용 중인 모든 카드에 대하여 주소 변경을 일괄적으로 할 수 있도록 해주는 것입니다. 매우 편리한 기능이라고 할 수 있습니다.
▶ 농협: https://banking.nonghyup.com
농협 사이트로 들어가서 [로그인]을 진행하시면 됩니다.

로그인 이후에는[My뱅크] 탭에서 [고객정보관리] 탭으로 이동한 뒤에 [금융거래 주소일괄변경]을 진행하시면 됩니다.

이후에 화면에 나오는 대로 지시에 따르시고, 금융회사를 선택하여 일괄적으로 변경 요청을 진행하시면 됩니다.

※ 구글 애드센스 ※
구글 애드센스와 같이 외국 기업과 관련한 서비스는, 주소를 일일이 변경해주실 필요가 있습니다. 구글 애드센스의 주소를 변경하는 경우 애드센스에 로그인을 하신 뒤에 [지급] 탭으로 이동하시면 됩니다. 이후에 [설정 관리]를 진행합니다.

이후에 다음과 같이 [이름 및 주소] 부분을 변경해주시면 됩니다.

'기타' 카테고리의 다른 글
| PHP에서 Facebook Login Access Token으로 이메일(Email) 정보 받아오기 [소스코드] (1) | 2019.06.03 |
|---|---|
| 구글 인 앱 결제(IAP) 서버 검증은 어떻게 하는가? [정리 요약] (1) | 2019.06.03 |
| 병무청 입영일자 연기 방법 (인터넷 신청) (4) | 2019.06.01 |
| 프로세스 익스플로러(Process Explorer)의 기본적인 사용법 (0) | 2019.05.14 |
| Atlas 무료 MongoDB 사용 방법 (0) | 2019.05.13 |
