안녕하세요.

 

이번에는 네이버 SNS 로그인 구현 방법을 알려드립니다.

카카오톡이나 네이버나 똑같이 login.php, callback.php가 필요합니다.

만약 제 블로그에있는 카카오톡 로그인으로 구현하였다면 네이버도 금방 되실거에요.

 

* 스크립트 이름을 명시하겠습니다.

1. http://test_lee.co.kr/login.php

2. http://test_lee.co.kr/callback.php 

 

 

1. 네이버 개발자 센터 등록 및 key 받기

  1.1. https://developers.naver.com/main/ 접속.

  1.2. 상단에 어플리케이션 > 어플리케이션 등록 클릭.

  1.3. 어플리케이션 이름과 사용 API를 네이로 클릭.

  1.4. 제공 정보 선택에 체크 (필요한 정보를 체크 하시면 됩니다.)

  1.5. 환경에는 PC웹을 선택.

  1.6. 서비스 URL http://test_lee.co.kr/

  1.7. 로그인 Callback URL  http://test_lee.co.kr/callback.php 추가

 

2. login.php

 


define('NAVER_CLIENT_ID', '내어플리케이션 > 어플리케이션 정보 > Client ID');
define('NAVER_CLIENT_SECRET', '내어플리케이션 > 어플리케이션 정보 > Client Secret');
define('NAVER_CALLBACK_URL', 'http://test_lee.co.kr/callback.php);

 

$naverUrl = "https://nid.naver.com/oauth2.0/authorize?response_type=code&client_id=".NAVER_CLIENT_ID."&redirect_uri=".urlencode(NAVER_CALLBACK_URL);

 

<html>

<body>

   <a href="<?=$naverUrl ?>"> <img src="네이버 로그인 이미지" title="네이버 로그인" alt="" style="width:30px"/></a>

</body>

</html>


3. callback.php


define('NAVER_CLIENT_ID', '내어플리케이션 > 어플리케이션 정보 > Client ID'');
define('NAVER_CLIENT_SECRET', '내어플리케이션 > 어플리케이션 정보 > Client Secret'); 
define('NAVER_CALLBACK_URL', 'http://test_lee.co.kr/callback.php');

 

$naver_curl = "https://nid.naver.com/oauth2.0/token?grant_type=authorization_code&client_id=".NAVER_CLIENT_ID."&client_secret=".NAVER_CLIENT_SECRET."&redirect_uri=".urlencode(NAVER_CALLBACK_URL)."&code=".$_GET['code'];
// 토큰값 가져오기 
$is_post = false; 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $naver_curl); 
curl_setopt($ch, CURLOPT_POST, $is_post); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
$response = curl_exec ($ch); 
$status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); 
curl_close ($ch); 
if($status_code == 200){ 
$responseArr = json_decode($response, true); 
  // 토큰값으로 네이버 회원정보 가져오기 
  $headers = array( 'Content-Type: application/json', sprintf('Authorization: Bearer %s', $responseArr['access_token']) ); 
  $is_post = false; 
  $me_ch = curl_init(); 
  curl_setopt($me_ch, CURLOPT_URL, "https://openapi.naver.com/v1/nid/me"); 
  curl_setopt($me_ch, CURLOPT_POST, $is_post ); 
  curl_setopt($me_ch, CURLOPT_HTTPHEADER, $headers); 
  curl_setopt($me_ch, CURLOPT_RETURNTRANSFER, true); 
  $res = curl_exec ($me_ch); 
  curl_close ($me_ch); 
  $res_data = json_decode($res , true); 
   
  if ($res_data ['response']['id']) { 
  //해당 아이디값을 정상적으로 가져온다면 디비에 해당 아이디로 회원가입 여부 확인 하여 회원 가입을 하였으면 자동 로그인 구현.

 
   if(이미 가입된 회원이면){
      //자동 로그인
      exit;
    }

 }

 

## 개인정보를 더 받는다면 회원가입 페이지로 location하고 아니면 프로필 정보 가져온곳에서 회원가입을 시켜주면 됩니다.

 


감사합니다.

궁금하신거는 댓글 달아주세요^^.

안녕하세요.

 

sns 로그인 기능을 구현하는 경우가 많은데요.

간단하게 카카오톡 로그인 기능을 구현하는 방법을 포스팅 하겠습니다.

 

일단 login 페이지와 callback 페이지가 필요합니다.

"http://test_lee.co.kr 테스트로 넣어드린 도메인입니다. 참고하세요."

1. http://test_lee.co.kr/login.php

2. http://test_lee.co.kr/callback.php

 

로 스크립트 이름을 명시하겠습니다.

1. kakao 개발자 센터 등록 및 key 받기

  1.1. https://developers.kakao.com/apps  접속.

  1.2. 앱 만들기 클릭.

  1.3. 내 어플리케이션 > 카카오 로그인 > 사용자 관리 > ON

  1.4. 수집 목록 체크 (필요한 정보를 체크 하시면 됩니다.)

  1.5. 로그인 Redirect URI에  http://test_lee.co.kr/callback.php 추가

 

2. login.php

 


$restapikey = "내어플리케이션 > 설정 > 일반 > REST API 키 복사"; //rest api key 입력

$callbackUrl = "http://test_lee.co.kr/callback.php"; //call back URL 입력

$kakaoUrl = "https://kauth.kakao.com/oauth/authorizeclient_id=".$restAPIKey."&redirect_uri=".$callbacURI."&response_type=code";

 

<html>

<body>

   <a href="<?=$kakaoUrl?>"> <img src="카카오 로그인 이미지" title="카카오톡 로그인" alt="" style="width:30px"/></a>

</body>

</html>


3. callback.php

 


$returnCode = $_GET["code"]; 
$restAPIKey = "내어플리케이션 > 설정 > 일반 > REST API 키 복사"; 
$callbacURI = urlencode("http://test_lee.co.kr/callback.php"); // 본인의 Call Back URL을 입력해주세요
// API 요청 URL
$returnUrl = "https://kauth.kakao.com/oauth/token?grant_type=authorization_code&client_id=".$restAPIKey."&redirect_uri=".$callbacURI."&code=".$returnCode;

$isPost = false;

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $returnUrl);
curl_setopt($ch, CURLOPT_POST, $isPost);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$headers = array();
$loginResponse = curl_exec ($ch);
$status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close ($ch);

$accessToken= json_decode($loginResponse)->access_token; // access token 가져옴

 

//방식은 PHP에서 호출하는 curl_init()도 있고 밑에 방식으로도 가능하다는점 알려드리려고 두 개를 같이 썻습니다.
$curl = 'curl -v -X GET https://kapi.kakao.com/v2/user/me -H "Authorization: Bearer '.$accessToken.'"';
$info = shell_exec($curl);
$info_arr = json_decode($info, true);

//카카오 프로필 정보를 가져옵니다


if ($info_arr['id'] > 0) {   

//해당 아이디값을 정상적으로 가져온다면 디비에 해당 아이디로 회원가입 여부 확인 하여 회원 가입을 하였으면 자동 로그인 구현.

 
   if(이미 가입된 회원이면){
      //자동 로그인
      exit;
    }
$mb_nickname = $info_arr["properties"]['nickname']; 

 

## 개인정보를 더 받는다면 회원가입 페이지로 location하고 아니면 프로필 정보 가져온곳에서 회원가입을 시켜주면 됩니다.

 


감사합니다.

궁금하신거는 댓글 달아주세요^^.

안녕하세요.

 

그누보드/영카트에서 작업하시다보면 새로운 php를 만들어서 ajax로 제어 및 session을 공유가 필요한 경우가 생기는데요. 아주 쉽게 session 공유하는 방법을 알려드립니다.

 

##그누보드/영카트 웹디렉토리.

1. /웹디렉토리/test.php를 만든다.

2. php 상단에 추가

@session_save_path($_SERVER["DOCUMENT_ROOT"]."/data/session");
@session_start();

3. print_r($_SESSION); 

 

이렇게 session 을 가져와서 해당 script는 맴버 외에는 막는다던지, session id값으로 mysql query를 날리시면 됩니다.

 

감사합니다.

안녕하세요.

PHP에서 다중 배열(array)일 때 특정 key값으로 정렬하고 싶을 때 밑에 방법처럼 하시면 됩니다.


# 예제입니다.

$arr[0]["test1"]  = 1;

$arr[0]["test2"]  = 2;

$arr[0]["test3"]  = 3;

$arr[0]["test4"]  = 나;

$arr[0]["test5"]  = 5;


$arr[1]["test1"]  = 2;

$arr[1]["test2"]  = 3;

$arr[1]["test3"]  = 4;

$arr[1]["test4"]  = 가;

$arr[1]["test5"]  = 5;


$arr[2]["test1"]  = 3;

$arr[2]["test2"]  = 4;

$arr[2]["test3"]  = 5;

$arr[2]["test4"]  = 다;

$arr[2]["test5"]  = 8;


위의 배열에서 test4 key로 가나다 순으로 정렬을 하고 싶을 때


$sortArr = array();

foreach($arr as $res) 

  $sortArr [] = $res['test4']; 


array_multisort($sortArr , SORT_ASC, $arr);  //php lib array_multisort를 이용하면 됩니다.


이렇게 이용하시면 됩니다.


php 라이브러리 함수인 array_multisort 사용법입니다.






안녕하세요.


PHP를 통해 LDAP 서버와 연결하는 작업을 하였습니다.


일단 LDAP 서버는 시놀로지 NAS로 작업하였습니다.

 

# 서버 설정

1. NAS 접속 후 LDAP 서버 패키지 설치.

2. LDAP 서버 설정에 들어가서 LDAp 서버 활성화

3. Privider 서버로서 클릭

4. FDQN 넣으시고 패스워드 추가하고 적용

5. 적용이 되면 인증번호가 뜹니다. 이 인증번호로 클라이언트와 연결.


 

 

# 클라이언트 설정 -PHP

$ldap_dn = "uid=root,cn=users,dc=codingj,dc=com"; //서버의 bind dn 정보
$ldap_password = "패스워드";
 
$ldap_con = ldap_connect("codingj.com"); //서버 fdqn
ldap_set_option($ldap_con, LDAP_OPT_PROTOCOL_VERSION, 3); //인증 프로토콜 3으로 넣어야 되요.
 
if(ldap_bind($ldap_con, $ldap_dn, $ldap_password)){
  $filter = "(uid=*)"; // *는 전체 리스트를 가져오라는 의미, uid에 user명을 쓰면 user명만 가져오게 됩니다.
  $result = ldap_search($ldap_con, "dc=codingj,dc=com",$filter) or exit("unable to search");
  $entries = ldap_get_entries($ldap_con, $result);
  
  print "<pre>";
  print_r($entries);      
  print "</pre>";
}else{
  echo "bind fail";
}

 

^_^ 수고하세요.

 안녕하세요.


영카트에 페이팔 연동 작업을 완료하면서, 도움 되실분이 있을까 하고 정리합니다.


작업 순서는 1번부터  보시면 됩니다. (최대한 심플하게!!)


1. www.paypal.com 계정 생성.

2. https://developer.paypal.com/ 접속

3. https://developer.paypal.com/developer/accounts/ 페이지에서 create Account 클릭.

 - country > united states :: 국가는 상관이 없다. 기본꺼 쓰자..

 - account type > business :: 비지니스 계정으로 생성하면 

 - email > test@web.com :: 테스트 이메일 추가

 - password 

 - paypal balance  > 999999 :: 금액 최대한.. 부럽..

  --> create Account를 눌러 계정을 생성.


4. 계정을 생성하면 sandbox accounts 테이블안에 personal 계정과 business 계정이 생성됩니다.

 - personal 계정은 돈을 보내는 계정

 - business 계정은 돈을 받는 계정


5. 4번까지 계정을 완료 했다면 60%는 완료했다고 보면 됩니다. 6번 가시죠. (영카트 연동 시작부분)


6. 영카트는 WebRoot/shop 폴더를.. (다 아시겠다고 생각하고 script 이름만 알려드리겠습니다. ).

   WebRoot/shop/orderform.sub.php :: 영카트 기본 주문서 작성 페이지에서 페이팔을 선택할 수 있게 라디오박스를 만듭니다.

 -  $multi_settle++;  :: 결제(신용카드, 무통장입금등등)를 사용할 때 마다 ++ 시켜줌..

    echo '<input type="radio" id="od_settle_paypal" name="od_settle_case" value="페이팔" '.$checked.'> <label for="od_settle_paypal">페이팔    </label>'.PHP_EOL; :: 페이팔 라디오박스 추가

     $checked = ''; :: checked 풀죠.


7. 6번을 진행하시면 주문서 작성 페이지 하단 보시면 페이팔 라디오박스가 하나 생성됩니다.


8. 페이팔 라디오박스를 선택하고 주문하기를 누르면 orderformupdate.php 를 form으로 부르는데 이 때 $od_settle_case이 페이팔일 경우 컨트롤 합니다.

 - 기존은 goto_url(G5_SHOP_URL.'/orderinquiryview.php?od_id='.$od_id.'&amp;uid='.$uid); 이 url로 바로 갔지만 페이팔 일 경우 order_paypal.php(제가 만든 스크립트)를 부르게합니다.

 - if($od_settle_case == "페이팔"){

goto_url(G5_SHOP_URL.'/order_paypal.php?od_id='.$od_id);

}else{

goto_url(G5_SHOP_URL.'/orderinquiryview.php?od_id='.$od_id.'&amp;uid='.$uid);

}


9. order_paypal.php 소스입니다.

 # 테스트 URL

$pp_url = "https://www.sandbox.paypal.com/cgi-bin/webscr";

$recv_mail = "test@web.com ;  :: 좀 전에 비지니스 계정 넣으세요. pp_url에 sandbox가 붙으면 테스트 계정이라 보시면 됩니다.

# 상용 URL

# $pp_url = "https://www.paypal.com/cgi-bin/webscr";

# $recv_mail = "; :: 상용일 때 실제 계정..


$usd_api = shell_exec("curl -k https://api.manana.kr/exchange/rate/KRW/USD.json"); :: 실시간 환율 적용

//echo $use_api."\n";

$usd_arr = json_decode($usd_api, true);


<input type="hidden" name="cmd" value="_xclick">

<input type="hidden" name="business" value="<?=$recv_mail?>">

<input type="hidden" name="item_name" value="<?php echo $it_name;?>"> :: 상품 이름

<input type="hidden" name="item_number" value="<?php echo $od_id;?>"> :: 상품 아이디

<input type="hidden" name="currency_code" value="USD">

<input type="hidden" name="amount" value="<?php echo ($tot_sell_price/$paypal_usd);?>"> :: 상품가격 / 환율

<input type="hidden" name="charset" value="UTF-8">

<!--<input type="image" name="submit" border="0" src="https://www.paypalobjects.com/en_US/i/btn/btn_buynow_LG.gif" alt="PayPal - The safer, easier way to pay online">

-->

</form>


9. 8번에서 form.submit을 하게 되면 paypal 페이지로 리다이렉트가 됩니다. 여기서 personal 계정으로 결제를 해봅시다.

 - 결제를 하기 전에 페이팔 결제가 완료되면 현재 서버로 리다이렉트가 가능하며 그 리다이렉트의 파라미터를 이용해서 결제 완료시 상품 완불 처리 하고  G5_SHOP_URL.'/orderinquiryview.php 페이지로 옮겨보죠. 

 - https://www.sandbox.paypal.com/ 접속 :: 비지니스 계정으로 로그인.

 - 오른쪽 상단 profile > profile and settings 

 - 왼쪽 사이드 메뉴에서 My selling toos > website preferences > update 

 - auto return > on

 - return URL > return 받을 서버를 넣으세요.

 - payment data transfer > on

  --> save


10.  My selling toos > website preferences > update 들어가시면 Identity Token 이 생겼을 겁니다. 그거 저장. ( 90프로 완료)


11. personal 계정으로 결제 완료시 9번에서 추가한 return url로 옮겨지게 됩니다.


12. paypal_callback.php 소스입니다. :: 리턴 url  >> 해당 소스는 인터넷에서 찾아보시면 있습니다.

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

$pp_hostname = "www.sandbox.paypal.com";

$auth_token = ""; :: 10 번에 token 넣어주세요. 


# 상용 서버

# $pp_hostname = "www.paypal.com";

# $auth_token = "";


$req = 'cmd=_notify-synch';

$tx_token = $_REQUEST['tx'];

$req .= "&tx=$tx_token&at=$auth_token";


$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, "https://$pp_hostname/cgi-bin/webscr");

curl_setopt($ch, CURLOPT_POST, 1);

curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);

curl_setopt($ch, CURLOPT_POSTFIELDS, $req);

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); // 0 error 시 1로 변경하세요.

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);

curl_setopt($ch, CURLOPT_VERBOSE, 1); 

curl_setopt($ch, CURLOPT_HTTPHEADER, array("Host: $pp_hostname"));

$res = curl_exec($ch);

curl_close($ch);



if(!$res){

 //HTTP ERROR

 echo "Paypal 서버 연동 오류가 발생했습니다.";

 exit;

}else{

$keyarray = array();

if (strcmp ($lines[0], "SUCCESS") == 0) {

  for ($i=1; $i<count($lines);$i++){

list($key,$val) = explode("=", $lines[$i]);

$keyarray[urldecode($key)] = urldecode($val);

fwrite($fp, urldecode($key).":".urldecode($val)."\n");

}


$firstname = $keyarray['first_name'];

$lastname = $keyarray['last_name'];

$itemnumber = $keyarray['item_number'];

$itemname = $keyarray['item_name'];

$amount = $keyarray['payment_gross'];

} else if (strcmp ($lines[0], "FAIL") == 0) {

echo ("<p><h3>결제오류가 발생했습니다!</h3></p>");

}


goto_url(G5_SHOP_URL.'/orderinquiryview.php?od_id='.$_REQUEST["item_number"]); // 상품 정보


13. 완료

  - 실시간으로 api를 통해서 환율을 적용.

  - 기존 영카트의 프로세스를 따라서 적용. 

  - 개인적인 코드는 삭제하였습니다. 완불 처리라던지, status를 입금으로 변경하는거는 12번에서 컨트롤 하시면 됩니다.

  - 생각보다 쉬움...



안녕하세요.


php json_encode를 사용하면 한글은 유니코드로 보여지게 됩니다 \u....  이런식으로 말이죠.


그런데, 한글로 json을 output 내야할 때 JSON_UNESCAPED_UNICODE을 사용하면 됩니다.


사용방법은


$arr = array("안녕"=>"개발자");

json_encode($arr);     


output => 유니코드로 나오게 됩니다.


$arr = array("안녕"=>"개발자");

json_encode($arr,JSON_UNESCAPED_UNICODE );     


output => 정상적으로 한글로 나오게 됩니다.


그런데 php 버젼이 5.4 이하라면 JSON_UNESCAPED_UNICODE  옵션이 정상 작동을 안 하게 됩니다.

>>리눅스 상에서 php -version으로 확인 가능.


그렇다면 php버젼을 5.4로 업그레이드 하면 되겠죠?


업그레이드 방법입니다.


1. wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm && rpm -Uvh epel-release-latest-6.noarch.rpm

2. wget http://rpms.famillecollet.com/enterprise/remi-release-6.rpm && rpm -Uvh remi-release-6*.rpm

3. vi /etc/yum.repos.d/remi.repo

  >> [remi] 부분에 있는 enabled=0을 1로 변경 enabled=1

4. yum -y update php*

5. 업데이트 완료시 웹서버 재시작.

6. php -version 으로 5.4 확인


해당 업그레이드 방법은 CentOS release 6.5에서 진행하였습니다.


그런 다음 JSON_UNESCAPED_UNICODE  옵션을 사용하면 정상적으로 한글이 output 되는 걸 볼 수 있습니다.




안녕하세요.


mysql 언어셋도 utf8, 서버 언어셋도 utf8인데... 디비 데이터를 넣으면 자꾸 깨질 때 해결 방법입니다.


php에 iconv가 있지만 iconv로 해결 안된다 싶으시면 따라 해보세요.


mysql_query("set names utf8");

$qeury = "insert ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"


해결했습니다..


다른 해결 방법을 봤지만 set names utf8로 해결 됬네요..


^_^~!




+ Recent posts