首先要確定你的 phpcms是比較新的版本, v9.3以後的吧
這裡說明一個函數 rawurlencode() 本函數将字元串編碼成 URL
的字元串專用格式,特殊的字元會轉換成百分比符号後面加上二個十六位數字的格式。例如,空格就會變成 %20。
修改member/class/OauthSDK.class.php
1
2
3
4
5
6
7
8
9
10
<code>protected</code>
<code>$systemParam</code> <code>=</code><code>array</code><code>(</code>
<code> </code><code>‘connectTimeout‘</code>
<code>=> 5 ,</code>
<code> </code><code>‘timeout‘</code>
<code>=> 3 ,</code>
<code> </code><code>‘gatewayUrl‘</code>
<code>=></code><code>‘‘</code>
<code>,</code>
<code> </code><code>‘authorizeURL‘</code>
<code> </code><code>‘accessTokenURL‘</code>
<code> </code><code>‘systemTokenURL‘</code>
<code> </code><code>‘gatewayHost‘</code>
<code>=></code><code>‘api.renren.com‘</code>
<code> </code><code>‘gatewayPort‘</code>
<code>=> 8888</code>
<code> </code><code>);</code>
11
12
13
14
15
16
17
18
19
<code>//Get accesstoken</code>
<code> </code><code>public</code>
<code>function</code> <code>getAccessToken (</code><code>$code</code><code>)</code>
<code> </code><code>{</code>
<code> </code><code>$this</code><code>->_clearError();</code>
<code> </code><code>$clientID</code>
<code>=</code><code>$this</code><code>->appId;</code>
<code> </code><code>$redirectURI</code>
<code>=</code><code>$this</code><code>->redirectURI;</code>
<code> </code><code>$clientSecret</code>
<code>=</code><code>$this</code><code>->appSecret;</code>
<code> </code><code>$accessTokenURL</code>
<code>= self::accessTokenURL();</code>
<code> </code><code>$url</code>
<code>=</code><code>"{$accessTokenURL}?&grant_type=authorization_code&code={$code}&client_id={$clientID}&client_secret={$clientSecret}&redirect_uri={$redirectURI}"</code><code>;</code>
<code> </code>
<code> </code><code>$result</code>
<code>= self::http(</code><code>$url</code><code>);</code>
<code> </code><code>$access_token</code>
<code>= json_decode(</code><code>$result</code><code>, TRUE);</code>
<code> </code><code>if</code>
<code>(</code><code>empty</code><code>(</code><code>$access_token</code><code>) || isset(</code><code>$access_token</code><code>[</code><code>‘error‘</code><code>])) {</code>
<code> </code><code>$this</code><code>->_setOAuthError(</code><code>$access_token</code><code>);</code>
<code> </code><code>return</code>
<code>FALSE;</code>
<code> </code><code>}</code><code>else</code>
<code>{</code>
<code>$access_token</code><code>;</code>
<code> </code><code>}</code>
<code> </code><code>}</code>
修改member/index.php 中的代碼
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
<code>/**</code>
<code> </code><code>* 盛大通行證登陸 自己修改為人人登陸接口</code>
<code> </code><code>*/</code>
<code>function</code> <code>public_snda_login() {</code>
<code> </code><code>define(</code><code>‘SNDA_AKEY‘</code><code>, pc_base::load_config(</code><code>‘system‘</code><code>,</code><code>‘snda_akey‘</code><code>));</code>
<code> </code><code>define(</code><code>‘SNDA_SKEY‘</code><code>, pc_base::load_config(</code><code>‘system‘</code><code>,</code><code>‘snda_skey‘</code><code>));</code>
<code> </code><code>define(</code><code>‘SNDA_CALLBACK‘</code><code>, urlencode(APP_PATH.</code><code>‘index.php?m=member&c=index&a=public_snda_login&callback=1‘</code><code>));</code>
<code> </code>
<code> </code><code>pc_base::load_app_class(</code><code>‘OauthSDK‘</code><code>,</code><code>‘‘</code>
<code>,0);</code>
<code> </code><code>$this</code><code>->_session_start(); </code>
<code> </code><code>if</code><code>(isset(</code><code>$_GET</code><code>[</code><code>‘callback‘</code><code>]) && trim(</code><code>$_GET</code><code>[</code><code>‘callback‘</code><code>])) {</code>
<code> </code>
<code> </code><code>$o</code>
<code>=</code><code>new</code> <code>OauthSDK(SNDA_AKEY, SNDA_SKEY, SNDA_CALLBACK);</code>
<code> </code><code>$code</code>
<code>=</code><code>$_REQUEST</code><code>[</code><code>‘code‘</code><code>];</code>
<code> </code>
<code> </code><code>$accesstoken</code>
<code>=</code><code>$o</code><code>->getAccessToken(</code><code>$code</code><code>);</code>
<code> </code><code>//var_dump($accesstoken[‘user‘][‘id‘]);exit();</code>
<code> </code><code>if</code><code>(</code><code>is_numeric</code><code>(</code><code>$accesstoken</code><code>[</code><code>‘user‘</code><code>][</code><code>‘id‘</code><code>])) {</code>
<code> </code><code>$userid</code>
<code>=</code><code>$accesstoken</code><code>[</code><code>‘user‘</code><code>][</code><code>‘id‘</code><code>];</code>
<code> </code><code>$username</code>
<code>=</code><code>$accesstoken</code><code>[</code><code>‘user‘</code><code>][</code><code>‘name‘</code><code>];</code>
<code> </code><code>}</code><code>else</code>
<code> </code><code>showmessage(L(</code><code>‘login_failure‘</code><code>),</code><code>‘index.php?m=member&c=index&a=login‘</code><code>);</code>
<code> </code><code>}</code>
<code> </code><code>if</code><code>(!</code><code>empty</code><code>(</code><code>$userid</code><code>)) {</code>
<code> </code><code>//檢查connect會員是否綁定,已綁定直接登入,未綁定提示注冊/綁定頁面</code>
<code> </code><code>$where</code>
<code>=</code><code>array</code><code>(</code><code>‘connectid‘</code><code>=></code><code>$userid</code><code>,</code><code>‘from‘</code><code>=></code><code>‘renren‘</code><code>);</code>
<code> </code><code>$r</code>
<code>=</code><code>$this</code><code>->db->get_one(</code><code>$where</code><code>);</code>
<code> </code>
<code> </code><code>//connect使用者已經綁定本站使用者</code>
<code> </code><code>if</code><code>(!</code><code>empty</code><code>(</code><code>$r</code><code>)) {</code>
<code> </code><code>//讀取本站使用者資訊,執行登入操作</code>
<code> </code><code>$password</code>
<code>=</code><code>$r</code><code>[</code><code>‘password‘</code><code>];</code>
<code> </code><code>$this</code><code>->_init_phpsso();</code>
<code> </code><code>$synloginstr</code>
<code>=</code><code>$this</code><code>->client->ps_member_synlogin(</code><code>$r</code><code>[</code><code>‘phpssouid‘</code><code>]);</code>
<code> </code><code>$userid</code>
<code>=</code><code>$r</code><code>[</code><code>‘userid‘</code><code>];</code>
<code> </code><code>$groupid</code>
<code>=</code><code>$r</code><code>[</code><code>‘groupid‘</code><code>];</code>
<code> </code><code>$username</code>
<code>=</code><code>$r</code><code>[</code><code>‘username‘</code><code>];</code>
<code> </code><code>$nickname</code>
<code>=</code><code>empty</code><code>(</code><code>$r</code><code>[</code><code>‘nickname‘</code><code>]) ?</code><code>$username</code>
<code>:</code><code>$r</code><code>[</code><code>‘nickname‘</code><code>];</code>
<code> </code><code>$this</code><code>->db->update(</code><code>array</code><code>(</code><code>‘lastip‘</code><code>=>ip(),</code><code>‘lastdate‘</code><code>=>SYS_TIME,</code><code>‘nickname‘</code><code>=></code><code>$me</code><code>[</code><code>‘name‘</code><code>]),</code><code>array</code><code>(</code><code>‘userid‘</code><code>=></code><code>$userid</code><code>));</code>
<code> </code><code>if</code><code>(!</code><code>$cookietime</code><code>)</code><code>$get_cookietime</code>
<code>= param::get_cookie(</code><code>‘cookietime‘</code><code>);</code>
<code> </code><code>$_cookietime</code>
<code>=</code><code>$cookietime</code>
<code>?</code><code>intval</code><code>(</code><code>$cookietime</code><code>) : (</code><code>$get_cookietime</code>
<code>?</code><code>$get_cookietime</code>
<code>: 0);</code>
<code> </code><code>$cookietime</code>
<code>=</code><code>$_cookietime</code>
<code>? TIME +</code><code>$_cookietime</code>
<code>: 0;</code>
<code> </code><code>$phpcms_auth_key</code>
<code>= md5(pc_base::load_config(</code><code>‘system‘</code><code>,</code><code>‘auth_key‘</code><code>).</code><code>$this</code><code>->http_user_agent);</code>
<code> </code><code>$phpcms_auth</code>
<code>= sys_auth(</code><code>$userid</code><code>.</code><code>"\t"</code><code>.</code><code>$password</code><code>,</code><code>‘ENCODE‘</code><code>,</code><code>$phpcms_auth_key</code><code>);</code>
<code> </code><code>param::set_cookie(</code><code>‘auth‘</code><code>,</code><code>$phpcms_auth</code><code>,</code><code>$cookietime</code><code>);</code>
<code> </code><code>param::set_cookie(</code><code>‘_userid‘</code><code>,</code><code>$userid</code><code>,</code><code>$cookietime</code><code>);</code>
<code> </code><code>param::set_cookie(</code><code>‘_username‘</code><code>,</code><code>$username</code><code>,</code><code>$cookietime</code><code>);</code>
<code> </code><code>param::set_cookie(</code><code>‘_groupid‘</code><code>,</code><code>$groupid</code><code>,</code><code>$cookietime</code><code>);</code>
<code> </code><code>param::set_cookie(</code><code>‘cookietime‘</code><code>,</code><code>$_cookietime</code><code>,</code><code>$cookietime</code><code>);</code>
<code> </code><code>param::set_cookie(</code><code>‘_nickname‘</code><code>,</code><code>$nickname</code><code>,</code><code>$cookietime</code><code>);</code>
<code> </code><code>param::set_cookie(</code><code>‘_from‘</code><code>,</code><code>‘snda‘</code><code>);</code>
<code> </code><code>$forward</code>
<code>= isset(</code><code>$_GET</code><code>[</code><code>‘forward‘</code><code>]) && !</code><code>empty</code><code>(</code><code>$_GET</code><code>[</code><code>‘forward‘</code><code>]) ?</code><code>$_GET</code><code>[</code><code>‘forward‘</code><code>] :</code><code>‘index.php?m=member&c=index‘</code><code>;</code>
<code> </code><code>showmessage(L(</code><code>‘login_success‘</code><code>).</code><code>$synloginstr</code><code>,</code><code>$forward</code><code>);</code>
<code> </code><code>}</code><code>else</code>
<code>{ </code>
<code> </code><code>//彈出綁定注冊頁面</code>
<code> </code><code>$_SESSION</code>
<code>=</code><code>array</code><code>();</code>
<code> </code><code>$_SESSION</code><code>[</code><code>‘connectid‘</code><code>] =</code><code>$userid</code><code>;</code>
<code> </code><code>$_SESSION</code><code>[</code><code>‘from‘</code><code>] =</code><code>‘renren‘</code><code>;</code>
<code> </code><code>$connect_username</code>
<code>=</code><code>$username</code><code>;</code>
<code> </code><code>include</code>
<code>template(</code><code>‘member‘</code><code>,</code><code>‘connect‘</code><code>);</code>
<code> </code><code>}</code>
<code> </code><code>} </code>
<code>=</code><code>$o</code><code>->getSystemToken(); </code>
<code> </code><code>$aurl</code>
<code>=</code><code>$o</code><code>->getAuthorizeURL();</code>
<code> </code><code>include</code>
<code>template(</code><code>‘member‘</code><code>,</code><code>‘connect_snda‘</code><code>);</code>