Ajoutez « Continuer avec Rayor » à votre site en quelques minutes. Plugin WordPress, SDK PHP et docs — tout est dans le kit.
Donnez ce lien à votre assistant (Claude, Copilot, Cursor…) : il contient tout — endpoints, scopes, exemples — pour générer le code correct.
Intègre « Se connecter avec Rayor » en suivant https://connect.rayor.fr/llms.txt
Envoyez l'utilisateur vers authorize.php avec votre domaine et une URL de retour.
Rayor renvoie l'utilisateur sur votre redirect_uri avec un code à usage unique.
Côté serveur, appelez api.php?code=… et récupérez le profil JSON. C'est tout.
// 1) Démarrage : rediriger vers Rayor
header("Location: https://connect.rayor.fr/authorize.php?" . http_build_query([
"client_id" => "mon-site.fr",
"redirect_uri" => "https://mon-site.fr/callback.php",
"scope" => "openid profile email",
"response_type" => "code",
"state" => $_SESSION["rc_state"] = bin2hex(random_bytes(16)),
]));
// 2) callback.php : vérifier le state puis échanger le code (usage unique)
if (($_GET["state"] ?? "") !== ($_SESSION["rc_state"] ?? "x")) exit("state invalide");
$user = json_decode(file_get_contents(
"https://connect.rayor.fr/api.php?code=" . urlencode($_GET["code"])
), true);
// $user["rayor_id"], $user["email"], $user["given_name"] ...import crypto from "node:crypto";
// 1) Démarrage
app.get("/login", (req, res) => {
req.session.rcState = crypto.randomBytes(16).toString("hex");
const q = new URLSearchParams({
client_id: "mon-site.fr",
redirect_uri: "https://mon-site.fr/callback",
scope: "openid profile email",
response_type: "code",
state: req.session.rcState,
});
res.redirect("https://connect.rayor.fr/authorize.php?" + q);
});
// 2) Callback : vérifier le state puis échanger le code
app.get("/callback", async (req, res) => {
if (req.query.state !== req.session.rcState) return res.status(400).send("state invalide");
const r = await fetch("https://connect.rayor.fr/api.php?code=" + encodeURIComponent(req.query.code));
const user = await r.json();
// user.rayor_id, user.email, user.given_name ...
});import secrets, requests
from urllib.parse import urlencode
from flask import redirect, request, session
@app.get("/login")
def login():
session["rc_state"] = secrets.token_hex(16)
q = urlencode({
"client_id": "mon-site.fr",
"redirect_uri": "https://mon-site.fr/callback",
"scope": "openid profile email",
"response_type": "code",
"state": session["rc_state"],
})
return redirect("https://connect.rayor.fr/authorize.php?" + q)
@app.get("/callback")
def callback():
if request.args.get("state") != session.get("rc_state"):
return "state invalide", 400
user = requests.get("https://connect.rayor.fr/api.php",
params={"code": request.args["code"]}, timeout=10).json()
return user # user["rayor_id"], user["email"] ...# 1) Ouvrir dans le navigateur (l'utilisateur consent) :
https://connect.rayor.fr/authorize.php?client_id=mon-site.fr&redirect_uri=https://mon-site.fr/callback&scope=openid%20profile%20email&response_type=code&state=abc123
# 2) Rayor renvoie ?code=… : échangez-le côté serveur
curl "https://connect.rayor.fr/api.php?code=LE_CODE"
# -> {"rayor_id":"RAY-42-XY","given_name":"Camille","email":"camille@exemple.fr","email_verified":true}<a href="https://connect.rayor.fr/authorize.php?client_id=mon-site.fr&redirect_uri=https://mon-site.fr/callback&scope=openid%20profile%20email&response_type=code" style="display:inline-flex;align-items:center;gap:8px;padding:11px 18px;border-radius:12px;background:#0a6cff;color:#fff;font:600 15px system-ui;text-decoration:none"> <img src="https://connect.rayor.fr/logo.svg" height="18" alt=""> Continuer avec Rayor </a>
openidrayor_idprofilegiven_name · family_name · nickname · pictureemailemail · email_verifiedphonephone_number · phone_number_verifiedaddressaddressagebirthdate · age · age_verifiedsubscriptionrayor_plus · rayor_planpreferencesliquid_glassSeuls les champs des scopes demandés et autorisés sont renvoyés. openid est le minimum.
Le même utilisateur, trois demandes. On ne reçoit que ce qu'on demande.
openid — le strict minimum{
"rayor_id": "RAY-42-XY"
}
openid profile email — connexion classique{
"given_name": "Camille",
"family_name": "Martin",
"nickname": "Camille",
"rayor_id": "RAY-42-XY",
"picture": "https://connect.rayor.fr/avatar.php?u=…",
"email": "camille@exemple.fr",
"email_verified": true
}
openid email subscription preferences — app qui gère le Plus & le thème{
"rayor_id": "RAY-42-XY",
"email": "camille@exemple.fr",
"email_verified": true,
"rayor_plus": true,
"rayor_plan": "plus",
"liquid_glass": true
}
[rayor_connect], création de compte.Rayor\RayorConnect sans dépendance + exemple complet.Lancez une vraie connexion sur la boutique de démonstration.
Voir la démo