Bonjour à tous,
J'ai créé une API pour qu'un utilisateur puisse s'authentifier depuis un site internet et depuis une application pour iOS/Android.
J'arrive à faire l'opération mais cela ne fonctionne soit
1. sur l'application web => OK. L'IOS =>KO
2. sur l'application web => KO. L'IOS =>OK
Cas 1;
Pour que mon application web fonctionne, je récupère les données ainsi
1 2 3
|
(isset($_POST['email']) && !empty($_POST['email']) ) ? $email = strip_tags($connect->real_escape_string($_POST['email'])) : $email = "none";
(isset($_POST['pwd']) && !empty($_POST['pwd'])) ? $pwd = strip_tags($connect->real_escape_string($_POST['pwd'])) : $pwd = "none"; |
mais mon application IOS/Android qui fait apelle à la meme API, n'arrive pas à récupérer $_POST['email']
Si je mets mon $_POST dans
echo json_encode($_POST);
Il m'affiche ceci (il semble que les \ me cause le problème. mais d'ou viennent-il?)
{"{"email":"demo@domaine_ch","pwd":"demo"}": ""}
Dans mon App IOS/ANdroid, je fais ma requete avec FtechQuery
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
|
const getUser = async (email:string, pwd:string) => {
console.log("user:", email);
console.log("pwd:", pwd);
setIsLoading(true)
try {
const response = await fetch('https://api.domaine.ch/getUser.inc.php', {
method: 'POST',
headers:{
accept: 'application/json',
Authorisation: 'key',
},
body: JSON.stringify({
email: email,
pwd: pwd
}),
});
if(!response.ok){
//console.log("[res]" + res)
throw new Error('[fetchQueryUser] Failed to fetch the API (check the path)')
}
const json = await response.json();
console.log(json)
setUser(json);
}catch(err){
console.error('[fetchQueryUser] Check parameters passed in body' + err);
} finally {
setIsLoading(false);
}
}; |
Cas 2:
Si maintenant dans mon API, je commente et j'ajoute ces ligne
1 2 3 4 5 6 7 8 9 10 11
| $encodedData = file_get_contents('php://input'); // take data from react native fetch API
$decodedData = json_decode($encodedData, true);
$email = $decodedData['email'];
$pwd = $decodedData['pwd'];
/*
(isset($_POST['email']) && !empty($_POST['email']) ) ? $email = strip_tags($connect->real_escape_string($_POST['email'])) : $email = "none";
(isset($_POST['pwd']) && !empty($_POST['pwd'])) ? $pwd = strip_tags($connect->real_escape_string($_POST['pwd'])) : $pwd = "none";
*/ |
Nikel chrome, mon App IOS/Android fonction, mais c'est mon application web qui bug!!!!
Mon application fait la question ainsi
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| <?php
// https://solutions.posit.co/connections/clients/php/#php-example
function callApi($url, $key, $params){
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_HTTPHEADER, array(
"Authorization: Key " . $key
));
curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($params));
$result = curl_exec($curl);
curl_close($curl);
return json_decode($result);
}
?> |
Il y a un mode de fonctionnement dans l'envoi qui diffère, mais je n'arrive pas à voir comment.
Idéalement, si je vous me le recommander asssi, j'aimerais continuer acec
1 2 3 4 5
| $encodedData = file_get_contents('php://input'); // take data from react native fetch API
$decodedData = json_decode($encodedData, true);
$email = $decodedData['email'];
$pwd = $decodedData['pwd']; |
Je me demande s'il m'y a pas un problème avec le decodage de json....
Merci
Edit:
par contre je viens de voir un truc de bizard, juste avant l'envoi de ce poste : demo@domaine_ch. Je vais voir d'ou vient ce _, car j'ai bien saisi un .
Partager