안녕하세요.


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";
}

 

^_^ 수고하세요.

안녕하세요.


아이폰에서 iframe width 100%를 줘도 정상적으로 적용이 안되는 버그가 있습니다.

그럴 때 iframe에 scrolling="no"를 주면 정상적으로 먹지만 스크롤이 안되는 문제가 발생합니다.


그래서 iframe가 동일한 기능을 하는 object로 해결 하였습니다.


기존 iframe 소스는

<div class="scroll-container scroll-ios" style="overflow:auto;-webkit-overflow-scrolling:touch">

<iframe src="https://test.com/iframe"  frameborder="0" scrolling="no" style="position: absolute; top: 0px; left: 0px; height: 100%; width: 1px; min-width: 100%; *width: 100%;" ></iframe>

</div>


변경 object 소스는

<object id="nzeo" width="100%" height="100%" data="https://test.net/front/main"></object>



해당 object tag를 이용하여 아이폰과 안드로이폰에서 확인한 결과 정상적으로 뷰잉되는것을 보았습니다.



 안녕하세요.


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


작업 순서는 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번에서 컨트롤 하시면 됩니다.

  - 생각보다 쉬움...



+ Recent posts