Äskettäin olen julkaissut artikkelin Kuinka integroida Google Sheets -sovellusliittymä PHP: hen, jossa selitin kuinka kirjoittaa tietoja Google-taulukkoon PHP- ja Google-sovellusliittymien avulla. Yksi lukijoista kysyi samalla tavalla, kuinka kirjoittaa tietoja OneDrive-taululle. Tässä opetusohjelmassa tutkitaan, miten Microsoft Graph -sovellusliittymää ja PHP: tä käytetään tietojen kirjoittamiseen OneDrive-taulukkoon.
Microsoft Graph -sovellusliittymä noudattaa OAuth-kulkua valtuutuksessa. Tämä tarkoittaa, että meidän on luotava käyttöoikeustunnus käyttämällä OAuth-prosessia. Tätä varten sinun on ensin rekisteröitävä sovellus ja napattava tunnistetiedot.
Rekisteröi sovellus ja luo kirjautumistiedot
OAuth-prosessin integroinnin aikana sinulla on oltava asiakastunnus ja asiakassalaisuus. Saat sen rekisteröimällä sovellukset. Voit seurata tällä sivulla mainittuja vaiheita ja rekisteröidä sovelluksensa Microsoftiin.
Kirjaudu Azure-portaaliin ja etsi sitten sovelluksen rekisteröinti. Täytä lomake. Sinun on välitettävä URL-osoite Uudelleenohjauksen URI-kenttään. Tähän kenttään välitän paikallisen palvelimen URL-osoitteen. Luon callback.php
seuraavissa vaiheissa. Olen täyttänyt yksityiskohdat alla olevan kuvakaappauksen mukaisesti.
Kun lähetät lomakkeen, saat asiakastunnuksen Yleiskatsaus-välilehdeltä.
Siirry seuraavaksi Sertifikaatit ja salaisuudet -välilehdelle ja napsauta Uusi asiakassalaisuus.
Se avaa ponnahdusikkunan, johon sinun on lisättävä kuvaus ja valittava Vanhenee-vaihtoehto.
Tämän jälkeen saat asiakassalaisuutesi alla olevan kuvan mukaisesti.
Asenna vaaditut paketit
Meidän on integroitava kaksi asiaa – OAuth ja REST API. OAuth-palvelussa aion käyttää Hybridauth- kirjastoa. Ja ollaksemme vuorovaikutuksessa Microsoft Graph API: n kanssa, käytetään Guzzle- kirjastoa.
Voimme helposti asentaa nämä 2 pakettia Composerin avulla. Luo composer.json
tiedosto projektin juurihakemistoon ja lisää siihen alla olevat rivit.
{
"require": {
"hybridauth/hybridauth": "~3.0",
"guzzlehttp/guzzle": "^7.0"
}
}
Suorita alla oleva komento, joka asentaa nämä paketit.
composer install
Kuten sanottu, Microsoft Graph -sovellusliittymä käyttää OAuthia API-toimintojen suorittamiseen. Se vaatii sinua luomaan käyttöoikeustunnuksen, joka toimii tilisi tunnuksena. Tämän käyttöoikeustunnuksen avulla Microsoft Graph -sovellusliittymät tarkistavat, onko saapuva pyyntö kelvollinen ja valtuutettu.
Käyttöoikeustunnuksella on lyhyt käyttöikä. Ne vanhenevat pian. Ja kun se on vanhentunut, emme voi suorittaa API-kutsuja, koska Microsoft käsittelee pyyntöä vanhentuneella tunnuksella luvattomana pyynnönä. Ratkaistaksemme tämän ongelman käytämme ‘refresh_token’ -toimintoa käyttöoikeustunnuksen luomiseen taustalla. Näin OAuth toimii.
Tietokannan kokoonpano
Tavoitteen saavuttamiseksi meidän on säilytettävä tunnus turvallisessa paikassa. Tarvitsemme tunnuksen, kun soitamme sovellusliittymiä. Sen pitäisi myös uusiutua sen vanhenemisen jälkeen. Joten tallentaaksesi tunnuksen tiedot, luo tietokantataulukko seuraavasti.
CREATE TABLE `token` ( `id` int(11) NOT NULL AUTO_INCREMENT,
`access_token` text NOT NULL,
PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
Lisäämme tunnuksen tietokantaan valtuutusprosessin suorittamisen jälkeen. Lisäksi päivitämme tunnuksen taustalla. Tätä varten aion luoda tietokantaluokan, jotta voimme helposti tehdä lisäys-, valinta- ja päivitystoiminnot.
luokka-db.php
<?php
class DB {
private $dbHost = "DB_HOST";
private $dbUsername = "DB_USERNAME";
private $dbPassword = "DB_PASSWORD";
private $dbName = "DB_NAME";
public function __construct(){
if(!isset($this->db)){
// Connect to the database
$conn = new mysqli($this->dbHost, $this->dbUsername, $this->dbPassword, $this->dbName);
if($conn->connect_error){
die("Failed to connect with MySQL: ". $conn->connect_error);
}else{
$this->db = $conn;
}
}
}
public function is_table_empty() {
$result = $this->db->query("SELECT id FROM token");
if($result->num_rows) {
return false;
}
return true;
}
public function get_access_token() {
$sql = $this->db->query("SELECT access_token FROM token");
$result = $sql->fetch_assoc();
return json_decode($result['access_token']);
}
public function get_refersh_token() {
$result = $this->get_access_token();
return $result->refresh_token;
}
public function update_access_token($token) {
if($this->is_table_empty()) {
$this->db->query("INSERT INTO token(access_token) VALUES('$token')");
} else {
$this->db->query("UPDATE token SET access_token = '$token' WHERE id = (SELECT id FROM token)");
}
}
}
Luo käyttöoikeustunnus
Kun olet valmis tarvittaviin paketteihin ja tietokantaluokkaan, seuraava osa tekee todentamisen ja tallentaa tunnuksen tiedot tietokantaan.
Hybridauth-kirjasto tarjoaa oman prosessin valtuutuksen suorittamiseksi. Joten, seurataan heitä. Luo config.php
tiedosto ja lisää siihen alla oleva koodi.
config.php
<?php
require_once 'vendor/autoload.php';
require_once 'class-db.php';
define('ONEDRIVE_CLIENT_ID', 'CLIENT_ID_HERE');
define('ONEDRIVE_CLIENT_SECRET', 'CLIENT_SECRET_HERE');
define('ONEDRIVE_SCOPE', 'files.read files.read.all files.readwrite files.readwrite.all offline_access');
define('ONEDRIVE_CALLBACK_URL', 'CALLBACK_URL_HERE'); // in my case it is http://localhost/sajid/onedrive/callback.php
$config = [
'callback' => ONEDRIVE_CALLBACK_URL,
'keys' => [
'id' => ONEDRIVE_CLIENT_ID,
'secret' => ONEDRIVE_CLIENT_SECRET
],
'scope' => ONEDRIVE_SCOPE,
'authorize_url_parameters' => [
'approval_prompt' => 'force',
'access_type' => 'offline'
]
];
$adapter = new HybridauthProviderMicrosoftGraph( $config );
Korvaa kaikki paikkamerkit niiden todellisilla arvoilla. Olen läpäissyt vaaditut tavoitteet lopputavoitteellemme, joten pidä se sellaisena kuin se on. Nyt, callback.php
joka on takaisinsoitto-URL-osoitteeni, kirjoitan koodin, joka käynnistää todennusprosessin, ohjaa siihen onnistuneen valtuutuksen jälkeen ja tallentaa tunnustiedot tietokantataulukoon.
callback.php
<?php
require_once 'config.php';
try {
$adapter->authenticate();
$token = $adapter->getAccessToken();
$db = new DB();
if($db->is_table_empty()) {
$db->update_access_token(json_encode($token));
echo "Access token inserted successfully.";
}
}
catch( Exception $e ){
echo $e->getMessage() ;
}
Suorita callback.php
selain ja suorita todennusprosessi. Kun todennus on suoritettu loppuun, sinun pitäisi nähdä tunnuskohtaiset tiedot, jotka on tallennettu merkkitaulukon sisään.
Lisää taulukko OneDrive-taulukossa
Jos haluat lisätä tietoja Microsoft Graph -sovellusliittymän kautta, sinun on lisättävä taulukko OneDrive-taulukkoon. Siirry OneDrive-sivulle. Napsauta avattavan Uusi-valikon alla olevaa Excel-työkirjaa.
Kun olet arkkisivulla, napsauta ‘Taulukko’ -kuvaketta ja sitten ‘OK’ avautuvasta ponnahdusikkunasta.
Tämän jälkeen näet taulukon, joka on lisätty OneDrive-taulukkoosi seuraavasti.
Säädä sarakkeita tarpeidesi mukaan. Minun tapauksessani pidin 3 saraketta.
Nyt voidaan kysyä, miksi taulukko on lisättävä arkkiin? Kun tutkin tätä aihetta, huomasin, että tämä on ainoa tapa kirjoittaa tietoja Excel-työkirjaan. Voit lukea lisää heidän dokumentaatiostaan.
Pidä muistiinpano, kun asetamme taulukon ensimmäistä kertaa taulukkoon, sen arvo on ‘Taulukko1’. Tarvitsemme tätä arvoa sovellusliittymien kutsumisen yhteydessä. Jos jostain syystä poistat taulukon ja asetat sen uudelleen, sen arvoksi tulee ‘Taulukko2’ ja niin edelleen.
Kopioi sovellusliittymäkutsussa vaadittava taulukkotunnuksesi. Voit saada sen selaimen URL-osoitteesta alla olevan kuvakaappauksen mukaisesti.
Kirjoita tiedot OneDrive-arkkiin Microsoft Graph -sovellusliittymän ja PHP: n avulla
Toistaiseksi olemme asentaneet vaaditut paketit, lisäämällä tunnuksia tietokantaan, luomalla Excel-työkirjan, jossa on taulukko. Nyt on hyvä mennä eteenpäin ja kirjoittaa koodi, joka liittää tiedot OneDrive-taulukkoon Microsoft Graph -sovellusliittymän ja PHP: n avulla.
Luon tiedostoa, append-to-onedrive-sheet.php
ja koodini on alla kirjoitettu.
<?php
require_once 'config.php';
// here you can pass as many data as a separate array element
$arr_data = [
['John Doe', '[email protected]', '8888888888']
];
append_to_sheet($arr_data);
function append_to_sheet($arr_data = array()) {
$item_id = 'YOUR_SHEET_ID';
$table = 'Table1'; //in your case it can be Table2, Table3, ...
$db = new DB();
$arr_token = (array) $db->get_access_token();
$accessToken = $arr_token['access_token'];
try {
$client = new GuzzleHttpClient([
// Base URI is used with relative requests
'base_uri' => 'https://graph.microsoft.com',
]);
$response = $client->request("POST", "/v1.0/me/drive/items/$item_id/workbook/tables/$table/rows/add", [
'json' => [
'values' => $arr_data
],
'headers' => [
'Authorization' => 'Bearer '. $accessToken
],
'verify' => false,
]);
} catch(Exception $e) {
if( 401 == $e->getCode()) {
$refresh_token = $db->get_refersh_token();
$client = new GuzzleHttpClient(['base_uri' => 'https://login.microsoftonline.com']);
$response = $client->request('POST', '/common/oauth2/v2.0/token', [
'form_params' => [
"grant_type" => "refresh_token",
"refresh_token" => $refresh_token,
"client_id" => ONEDRIVE_CLIENT_ID,
"client_secret" => ONEDRIVE_CLIENT_SECRET,
"scope" => ONEDRIVE_SCOPE,
"redirect_uri" => ONEDRIVE_CALLBACK_URL,
],
]);
$db->update_access_token($response->getBody());
append_to_sheet($arr_data);
} else {
echo $e->getMessage(); //print the error just in case your video is not uploaded.
}
}
}
Yllä olevassa koodissa loin taulukon, jossa on 3-arvoinen matriisi-elementti. Voit välittää niin monta taulukkoelementtiä. Sinun on välitettävä taulukkotunnuksesi $item_id
muuttujalle.
Tämä koodi hakee käyttöoikeustunnuksen tietokannasta ja lähettää POST-pyynnön vaadittuun API-päätepisteeseen. Jos tunnus vanhenee, se luo sen automaattisesti taustalla ja jatkaa prosessia.
Kokeile ja sinun pitäisi nähdä, että tietosi on liitetty OneDrive-tilisi Excel-työkirjaan.
Toivon, että sait tietää kuinka kirjoittaa tietoja OneDrive-taulukkoon Microsoft Graph -sovellusliittymän ja PHP: n avulla. Jaa ajatuksesi ja ehdotuksesi alla olevassa kommenttiosassa.