SDK 与代码示例
本文档提供多种编程语言的接入示例代码,帮助开发者快速完成墨觉互联 OAuth2 接入。
通用配置:以下示例中,
BASE_URL 为墨觉互联平台地址,CLIENT_ID 为您的 AppID,CLIENT_SECRET 为您的 AppSecret,REDIRECT_URI 为您的回调地址。请根据实际情况替换。
1. PHP 示例
使用原生 PHP cURL 扩展完成 OAuth2 授权流程。
第一步:生成授权链接
$clientId,
'redirect_uri' => $redirectUri,
'response_type' => 'code',
'state' => $state,
'scope' => $scope,
]);
// 引导用户访问授权链接
header('Location: ' . $authUrl);
exit;
?>
第二步:回调处理(callback.php)
true,
CURLOPT_POSTFIELDS => http_build_query([
'grant_type' => 'authorization_code',
'client_id' => $clientId,
'client_secret' => $clientSecret,
'code' => $code,
'redirect_uri' => $redirectUri,
]),
CURLOPT_RETURNTRANSFER => true,
CURLOPT_SSL_VERIFYPEER => true,
]);
$response = curl_exec($ch);
curl_close($ch);
$tokenData = json_decode($response, true);
if (isset($tokenData['error'])) {
die('获取令牌失败:' . $tokenData['error_description']);
}
$accessToken = $tokenData['access_token'];
$refreshToken = $tokenData['refresh_token'];
// 4. 获取用户信息
$ch = curl_init($baseUrl . '/oauth/userinfo.php');
curl_setopt_array($ch, [
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $accessToken],
CURLOPT_RETURNTRANSFER => true,
CURLOPT_SSL_VERIFYPEER => true,
]);
$userResponse = curl_exec($ch);
curl_close($ch);
$userInfo = json_decode($userResponse, true);
// 5. 处理用户信息(如创建/登录用户)
echo '登录成功!';
echo '';
print_r($userInfo);
echo '
';
?>
刷新令牌
true,
CURLOPT_POSTFIELDS => http_build_query([
'grant_type' => 'refresh_token',
'client_id' => 'YOUR_APP_ID',
'client_secret' => 'YOUR_APP_SECRET',
'refresh_token' => $refreshToken,
]),
CURLOPT_RETURNTRANSFER => true,
]);
$response = curl_exec($ch);
curl_close($ch);
return json_decode($response, true);
}
?>
2. cURL 命令行示例
使用 cURL 命令行工具测试接口。
用授权码换取令牌
curl -X POST http://auth.mojue88.com/oauth/token.php \
-d "grant_type=authorization_code" \
-d "client_id=YOUR_APP_ID" \
-d "client_secret=YOUR_APP_SECRET" \
-d "code=AUTHORIZATION_CODE" \
-d "redirect_uri=https://your-domain.com/callback"
刷新令牌
curl -X POST http://auth.mojue88.com/oauth/token.php \
-d "grant_type=refresh_token" \
-d "client_id=YOUR_APP_ID" \
-d "client_secret=YOUR_APP_SECRET" \
-d "refresh_token=YOUR_REFRESH_TOKEN"
获取用户信息
curl -X GET http://auth.mojue88.com/oauth/userinfo.php \
-H "Authorization: Bearer ACCESS_TOKEN"
3. Python 示例
使用 Python requests 库完成 OAuth2 授权流程。
完整流程示例
import requests
import urllib.parse
import secrets
from flask import Flask, request, redirect, session
app = Flask(__name__)
app.secret_key = 'your-secret-key'
BASE_URL = 'http://auth.mojue88.com'
CLIENT_ID = 'YOUR_APP_ID'
CLIENT_SECRET = 'YOUR_APP_SECRET'
REDIRECT_URI = 'http://localhost:5000/callback'
@app.route('/login')
def login():
state = secrets.token_hex(16)
session['oauth_state'] = state
params = {
'client_id': CLIENT_ID,
'redirect_uri': REDIRECT_URI,
'response_type': 'code',
'state': state,
'scope': 'basic',
}
auth_url = f"{BASE_URL}/oauth/authorize.php?{urllib.parse.urlencode(params)}"
return redirect(auth_url)
@app.route('/callback')
def callback():
# 校验state
if request.args.get('state') != session.get('oauth_state'):
return 'State验证失败', 400
if 'error' in request.args:
return f"授权失败:{request.args['error']}"
code = request.args.get('code')
# 换取access_token
token_resp = requests.post(f"{BASE_URL}/oauth/token.php", data={
'grant_type': 'authorization_code',
'client_id': CLIENT_ID,
'client_secret': CLIENT_SECRET,
'code': code,
'redirect_uri': REDIRECT_URI,
})
token_data = token_resp.json()
if 'error' in token_data:
return f"获取令牌失败:{token_data.get('error_description', token_data['error'])}"
access_token = token_data['access_token']
# 获取用户信息
user_resp = requests.get(f"{BASE_URL}/oauth/userinfo.php", headers={
'Authorization': f'Bearer {access_token}',
})
user_info = user_resp.json()
return f"登录成功!用户信息:{user_info}"
if __name__ == '__main__':
app.run(debug=True)
4. Node.js 示例
使用 Node.js + Express + axios 完成 OAuth2 授权流程。
完整流程示例
const express = require('express');
const axios = require('axios');
const crypto = require('crypto');
const session = require('express-session');
const app = express();
app.use(session({ secret: 'your-secret-key', resave: false, saveUninitialized: true }));
const BASE_URL = 'http://auth.mojue88.com';
const CLIENT_ID = 'YOUR_APP_ID';
const CLIENT_SECRET = 'YOUR_APP_SECRET';
const REDIRECT_URI = 'http://localhost:3000/callback';
// 登录入口
app.get('/login', (req, res) => {
const state = crypto.randomBytes(16).toString('hex');
req.session.oauthState = state;
const params = new URLSearchParams({
client_id: CLIENT_ID,
redirect_uri: REDIRECT_URI,
response_type: 'code',
state: state,
scope: 'basic',
});
res.redirect(`${BASE_URL}/oauth/authorize.php?${params}`);
});
// 回调处理
app.get('/callback', async (req, res) => {
try {
// 校验state
if (req.query.state !== req.session.oauthState) {
return res.status(400).send('State验证失败');
}
if (req.query.error) {
return res.send(`授权失败:${req.query.error}`);
}
const code = req.query.code;
// 换取access_token
const tokenResp = await axios.post(`${BASE_URL}/oauth/token.php`, new URLSearchParams({
grant_type: 'authorization_code',
client_id: CLIENT_ID,
client_secret: CLIENT_SECRET,
code: code,
redirect_uri: REDIRECT_URI,
}));
const tokenData = tokenResp.data;
if (tokenData.error) {
return res.send(`获取令牌失败:${tokenData.error_description || tokenData.error}`);
}
const accessToken = tokenData.access_token;
// 获取用户信息
const userResp = await axios.get(`${BASE_URL}/oauth/userinfo.php`, {
headers: { Authorization: `Bearer ${accessToken}` },
});
res.json({ message: '登录成功', user: userResp.data });
} catch (error) {
res.status(500).send('服务器错误:' + error.message);
}
});
app.listen(3000, () => {
console.log('Server running on http://localhost:3000');
});
5. Java 示例(可选)
使用 Java HttpURLConnection 完成授权码换取令牌。
import java.io.*;
import java.net.*;
import java.nio.charset.StandardCharsets;
public class MojueOAuth {
private static final String BASE_URL = "http://auth.mojue88.com";
private static final String CLIENT_ID = "YOUR_APP_ID";
private static final String CLIENT_SECRET = "YOUR_APP_SECRET";
public static String getAccessToken(String code, String redirectUri) throws Exception {
String params = String.format(
"grant_type=authorization_code&client_id=%s&client_secret=%s&code=%s&redirect_uri=%s",
URLEncoder.encode(CLIENT_ID, StandardCharsets.UTF_8),
URLEncoder.encode(CLIENT_SECRET, StandardCharsets.UTF_8),
URLEncoder.encode(code, StandardCharsets.UTF_8),
URLEncoder.encode(redirectUri, StandardCharsets.UTF_8)
);
URL url = new URL(BASE_URL + "/oauth/token.php");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("POST");
conn.setDoOutput(true);
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
try (OutputStream os = conn.getOutputStream()) {
os.write(params.getBytes(StandardCharsets.UTF_8));
}
try (BufferedReader br = new BufferedReader(
new InputStreamReader(conn.getInputStream(), StandardCharsets.UTF_8))) {
StringBuilder response = new StringBuilder();
String line;
while ((line = br.readLine()) != null) {
response.append(line);
}
return response.toString(); // JSON字符串
}
}
}