XE 사이트 만들기

소셜XE twitter의 Callback URLs 설정방법

Study4U, 2019-03-10 09:39:19

조회 수
30
추천 수
0
소셜XE는 트위터 콜백을 ./index.php?module=socialxe&act=procSocialxeCallback&service=twitter 형태로 받아서 처리하게 되어있는데, 새로운 트위터 콜백 URL주소에 쿼리스트링은 사용할 수 없게되면서 소셜XE 트위터에 오류가 있다.
그래서 여기저기 인터넷 검색을 해보았지만, 제대로된 설명이 없어서 방법을 기록으로 남긴다.

1. 소셜XE 관리페이지에서 API설정에서 트위터 관련항목에 Callback Url 주소도 직접 입력할 수 있도록 수정한다.
<div class="x_control-group">
  <label class="x_control-label">Callback URL</label>
  <div class="x_controls">
    {getNotEncodedFullUrl('', 'module', 'socialxe', 'act', 'procSocialxeCallback','service','twitter')}
  </div>
</div>

을 아래와 같이 수정한다.

<div class="x_control-group">
  <label class="x_control-label" for="twitter_callbackurl">Callback URL</label>
  <div class="x_controls">
    <input type="text" name="twitter_callbackurl" id="twitter_callbackurl" value="{$config->twitter_callbackurl}" />
    <p>새로운 트위터 API설정시 'Callback URL' 에 'https://study4you.kr/twitter.php'와 같은 형식으로 입력해야 합니다.</p>
  </div>
</div>

2.  소셜XE 모듈내에 있는 모든 PHP 문서에서 'new Object' 을 찾아서 'new BaseObject' 으로 수정한다.

3. ./modules/socialxe/socialxe.class.php 의 하단부분에서 function getConfig() 함수를 찾아서 중간 적당한 곳에 아래 구문을 추가한다.

if(!$config->twitter_callbackurl) $config->twitter_callbackurl = Context::getRequestUri().'twitter.php';


4. ./modules/socialxe/socialxe.admin.controller.php 의 상단부분에서 function procSocialxeAdminSettingApi() 함수의 $confing_names 구문에 'twitter_callbackurl'을 추가한다.

$config_names = array('twitter_consumer_key','twitter_consumer_secret','twitter_callbackurl','facebook_app_id','facebook_app_secret','google_client_id','google_client_secret','naver_client_id','naver_client_secret','kakao_client_id');


5. ./modules/socialxe/libs/twitter.lib.php 의 상단부분에서 function createAuthUrl($type) 함수의 $request_token 구문을 아래와 같이 수정한다.

$request_token = $connection->oauth('oauth/request_token', array('oauth_callback' => $this->config->twitter_callbackurl));



6. API설정의 Callback Url 에서 등록한 트위터 콜백을 처리하기 위한 twitter.php 파일을 새로 작성해서 업로드한다. (아래 내용참조)
 ./modules/socialxe/libs/socialxe.controller.php 에 있는 procSocialxeCallback() 콜백함수 구문의 내용을 추가해주면 된다.
<?php
define('__XE__', true);
require_once("./config/config.inc.php");
$oContext = &Context::getInstance();
$oContext->init();
$logged_info = Context::get('logged_info');

$oauth_token = Context::get('oauth_token');
$oauth_verifier = Context::get('oauth_verifier');

$service = 'twitter';
$oSocialXE = getModule('socialxe');
$oLibrary = $oSocialXE->getLibrary($service);
$type = $_SESSION['socialxe_auth_type'];
$mid = $_SESSION['socialxe_auth_redirect_mid'];
$redirect_url = $_SESSION['socialxe_auth_redirect'];
if($redirect_url){
  $redirect_url = Context::getRequestUri().'?'.$redirect_url;
}else{
  $redirect_url = Context::getRequestUri();
}

$output = $oLibrary->authenticate();
if(!$output->toBool()){
  $error = $output->getMessage();
}

//프로필 가져오기
if(!$error){
  $output = $oLibrary->setProfile();
  if(!$output->toBool()){
    $error = $output->getMessage();
  }
}

$oSocialXEController = getController('socialxe');
$output = $oSocialXEController->registerSns($oLibrary);
if(!$output->toBool()){
  $error = $output->getMessage();
}

//등록처리
if(!$error){
  if($type == 'register'){
    $msg = 'msg_success_sns_register';

    $output = $oSocialXEController->registerSns($oLibrary);
    if(!$output->toBool()){
      $error = $output->getMessage();
    }

  }elseif($type == 'login'){
    $output = $oSocialXEController->LoginSns($oLibrary);
    if(!$output->toBool()){
      $error = $output->getMessage();
    }

    //로그인후 페이지 이동(회원설정 참조)
    $oModuleModel = getModel('module');
    $member_config = $oModuleModel->getModuleConfig('member');
    if(!$member_config->after_login_url){
      $redirect_url = getNotEncodedUrl('', 'mid', $mid, 'act', '');
    }else{
      $redirect_url = $member_config->after_login_url;
    }
  }
}

$msgtype = Mobile::isFromMobilePhone() ? 'mobile' : 'view';
$oMessageObject = ModuleHandler::getModuleInstance('message', $msgtype);

//에러
if($error){
  $msg = $error;
  $oMessageObject->setError(-1);
  if($type == 'login'){
    $redirect_url = getNotEncodedUrl('', 'mid', $mid, 'act', 'dispMemberLoginForm');
  }
}

//로그기록
$info = new stdClass;
$info->sns = $service;
$info->msg = $msg;
$info->type = $type;
$oSocialxeModel = getModel('socialxe');
$oSocialxeModel->logRecord('procSocialxeCallback', $info);

if($msg){
  $oMessageObject->setMessage($msg);
}

header("Location: ".html_entity_decode($redirect_url));
exit();
?>


[참고]

일부 PHP 문서의 require_once() 의 경로가 잘못 설정되어 500 에러가 있는경우,  require_once(_XE_PATH_) 을 추가해주면 된다.

소셜XE v2.0 을 사용하다가 v2.2 로 업을 하면서 갑자기 오류가 있어서 확인해보니 이 경로 때문인것으로 확인되었다. ㅜ.ㅜ



0 댓글

Board Menu

목록

Page 1 / 4
번호 제목 날짜 조회 수
64

소셜XE twitter의 Callback URLs 설정방법

2019-03-10 30
63

XE3 플러그인 / 컴포넌트 제작방법

2019-01-14 81
62

XE3 설치 for Synology

2019-01-14 70
61

XE 메일 설정하는 방법

2016-05-19 1282
60

ruleset 기본 예제

2015-10-01 224
59

다국어 추가하는 방법

1
2015-07-24 213
58

레이아웃에 템플릿 또는 컬러셋 적용방법

  • file
2015-02-20 309
57

확장변수 항목에 required 와 placeholder 적용

  • file
2014-12-09 291
56

그룹에 따라 선택적으로 권한 부여하기

2014-11-14 3861
55

XE Trigger 완전 정복하기 4편

  • file
2014-08-03 390
54

XE Trigger 완전 정복하기 3편

2014-08-03 619
53

XE Trigger 완전 정복하기 2편

  • file
2014-08-03 799
52

XE Trigger 완전 정복하기 1편

  • file
2014-08-03 1163
51

XE 회원 메뉴 또는 팝업메뉴 추가, 편집방법

2014-05-20 1017
50

윈도우에서 웹서버 [ NGINX + PHP + MySQL ] 설치방법

2012-11-08 7131
49

XE 모듈 만들기

2012-09-13 7401
48

게시글 본문에 동영상이나 이미지 슬라이드가 자동 출력되게 하는 방법

4
2012-09-11 3427
47

소셜댓글을 게시판의 기본 댓글로 사용하는 방법입니다.

2012-09-10 3435
46

xe 슬라이더 사용방법

  • file
2012-07-21 3188
45

XE 에서 일반 PHP 구문 사용방법

2012-07-03 5074

Board Links

Page Navigation