Checking mobile token by Game Server after authorization
This is a sample code that implements last step of authorization process - checking mobile token by Game Server.
You need send access_token from your mobile application to Game Server and check it in our Authorization server. If checking is successful you'll receive in response user account data.
- PHP
- Java
- C++
- JavaScript
$access_token = $_POST['access_token']; // From mobile client
$request = [
'http' => [
'header' => 'Authorization: Bearer ' . $access_token, // You must use access_token in header
'method' => 'GET',
],
];
$context = stream_context_create($request);
$response = file_get_contents('https://auth.101xp.com/tokens/mobile', false, $context);
if ($response === false) {
$result = [
'status' => 'error',
'error_message' => 'Wrong API response.',
];
} else {
$response = json_decode($response, true);
if($response['status'] == 'success'){
$account_id = $response['mobile']['id']; // You need to use it to create ingame user account
if(!empty($response['portal'])){
// You can use Portal account data to personalize game account
$user_id = $response['portal']['id'];
$user_name = $response['portal']['display_name'];
$user_avatar = $response['portal']['photo'];
}
// Your other code here
$result = [
'status' => 'success',
'data' => [
'data',
'for',
'game',
'client',
],
];
} else {
$result = [
'status' => 'error',
'error_message' => 'Response contain errors.',
];
}
}
echo json_encode($result);
package com.xp101;
import org.json.JSONObject;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.time.Duration;
import java.util.Arrays;
import java.util.Map;
import java.util.TreeMap;
public class Main {
// JDK 11 required
public static void main(String[] args) throws Exception {
Map<String, String> params = convertToSortedKeyValuePair(args);
String accessToken = params.get("access_token"); // From mobile client
try {
JSONObject userIds = getUserIds(accessToken);
if (userIds.getString("status").equals("success")) {
// You need to use <accountId> to create ingame user account
int accountId = userIds.getJSONObject("mobile").getInt("id");
if(userIds.has("portal")){
// You can use Portal account data to personalize game account
JSONObject portalAccount = userIds.getJSONObject("portal");
int userId = portalAccount.getInt("id");
String userName = portalAccount.getString("display_name");
String userAvatar = portalAccount.getString("photo");
}
// Your other code here
JSONObject result = new JSONObject()
.put("status", "success")
.put("data", Arrays.asList(
"data",
"for",
"game",
"client"
));
System.out.println(result);
}
throw new Exception("Response contain errors.");
} catch (Exception exception) {
System.out.println(exception.getMessage());
}
}
private static JSONObject getUserIds(String accessToken) throws Exception {
String uri = "https://auth.101xp.com/tokens/mobile";
Duration readTimeout = Duration.ofSeconds(5);
Duration connectTimeout = Duration.ofSeconds(2);
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(uri))
.timeout(readTimeout)
.setHeader("Authorization", "Bearer " + accessToken) // You must use access_token in header
.GET()
.build();
HttpClient httpClient = HttpClient.newBuilder()
.connectTimeout(connectTimeout)
.build();
HttpResponse<String> response = httpClient.send(request, HttpResponse.BodyHandlers.ofString());
if (response.statusCode() == 200) {
return new JSONObject(response.body());
}
throw new Exception("Wrong API response.");
}
private static Map<String, String> convertToSortedKeyValuePair(String[] args) {
Map<String, String> params = new TreeMap<>();
for (String arg : args) {
String[] splitFromEqual = arg.split("=");
String key = splitFromEqual[0];
String value = splitFromEqual[1];
params.put(key, value);
}
return params;
}
}
// Please, request example if you need it
// Please, request example if you need it