Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem API - jeden produkt vložit jde, více ne - mazání curl_init?

Zdravím, mám tento script, který mi funguje. Každopádně funguje vždy jen na 1. produktu, u druhého a každého dalšího produktu to vypíše:

"
}

Warning: curl_exec() expects parameter 1 to be resource, null given in D:\xampp\htdocs\stopkovefrezy\api-add-products.php on line 67

Warning: curl_error() expects parameter 1 to be resource, null given in D:\xampp\htdocs\stopkovefrezy\api-add-products.php on line 68

Warning: curl_close() expects parameter 1 to be resource, null given in D:\xampp\htdocs\stopkovefrezy\api-add-products.php on line 70

Notice: Trying to get property 'token' of non-object in D:\xampp\htdocs\stopkovefrezy\api-add-products.php on line 76

Notice: Trying to get property 'token' of non-object in D:\xampp\htdocs\stopkovefrezy\api-add-products.php on line 91
string(46) "{"message":"Authorization header is required"}"

Chyba bude v proměnné $curl, protože pokud $curl přejmenuji třeba na $curl1, funguje to. Kde je problém? Co je tu špatně? Chybné řádky jsou označeny "// CHYBA". Moc nevím, co mám dělat dál, i když jsem se to snažil hledat.

api-add-products.php


<?php
// hlavicka
include "include/help-functions.php";
include_once "include/login.php";

// vkladane produkty z
include "get-csv-to-array/dgm.php"; // DGM frezovaci hlavy 
// include "get-csv-to-array/dte.php" // DTE frezovaci hlavy

//vkladani produktu
$i = 0;
foreach (array_slice($products, 1) as $a) {
    if ($i >= 3) {
        break;
    }
    $i++;
    pr($a);
    $name = $a['name'];
    if ($tocivost == "S") {
        $img = "symetricke-zuby-freza.png";
    }
    else {
        $img = "asymetricke-zuby-freza.png";
    }
    $produkt = array(
        "name" => $name,
        "secondName" => $name,
        "description" => $a['description'],
        "picture" => $img,
        "news" => false,
        "secondPrice" => str_replace(",", ".", $a['cena_na_web']), // cenikova cena
        "price" => str_replace(",", ".", $a['cena_bez_dph']), // cena bez dph
        /*"Použití na materiál" => "Masiv",
        "Průměr řezného nástroje" => $a['prumer_nastroje'], // JAK VLOŽIT TENTO PARAMETR TŘEBA?
        "Typ" => "$a['typ'],
        "něco" => "něco",*/
        "visibleOnHomepage" => false,
        "productNumber" => $a['kod'],
        "previewPicture" => $img,
        "bestselling" => false,
        "discounted" => false,
        "measuringUnit" => "",
        "discussionEnabled" => false,
        "freeShippingEnabled" => false,
        "bazaarEnabled" => false,
        "amountInStock" => 10,
        "availabilityId" => 1,
        "weight" => 0,
        "unsaleable" => false,
        "hidden" => false,
        "feedProductName" => $name,
        "feedPicture" => $img,
        "pictureMagnifier" => $img,
        "vatLevel" => 1,
        "categories" => [ // DOKONČIT!
            "10-0-0-0", // pred vkladanim je nutne mit kategorie vytvorene!
            [
                "code" => "10-474-0-0",
                "primary" => true
            ]
        ]
    );

    $produkt = json_encode($produkt);

    // vlozeni jednoho produktu
    $response = curl_exec($curl); // CHYBA
    $err = curl_error($curl); // CHYBA

    curl_close($curl); // CHYBA

    if ($err) {
        echo "cURL Error #:" . $err;
    } else {
        $jsonResponse = json_decode($response);
        $token = $jsonResponse->token; // CHYBA

        $curl = curl_init();

        curl_setopt_array($curl, array(
            CURLOPT_URL => "https://$apiServer/product",
            CURLOPT_RETURNTRANSFER => TRUE,
            CURLOPT_POST => TRUE,
            CURLOPT_ENCODING => "",
            CURLOPT_MAXREDIRS => 10,
            CURLOPT_TIMEOUT => 30,
            CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
            CURLOPT_CUSTOMREQUEST => "POST",
            CURLOPT_POSTFIELDS => "$produkt",
            CURLOPT_HTTPHEADER => array(
                "Authorization: Bearer $jsonResponse->token", // CHYBA
                "X-Wa-api-token: $apiKey"
            ),
        ));

        $response = curl_exec($curl);
        $err = curl_error($curl);

        curl_close($curl);

        var_dump($response);
    }
    $response = null;
    $err = null; 
    $curl = null; 
    $produkt = null; 
}
?>

login.php


<?php
// prihlaseni
$apiServer = '';
$apiKey = '';
$username = '';
$password = '';

$curl = curl_init();

curl_setopt_array($curl, array(
    CURLOPT_URL => "https://$apiServer/login",
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_ENCODING => "",
    CURLOPT_MAXREDIRS => 10,
    CURLOPT_TIMEOUT => 30,
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
    CURLOPT_CUSTOMREQUEST => "POST",
    CURLOPT_POSTFIELDS => "{\n  \"username\": \"$username\",\n  \"password\": \"$password\"\n}",
    CURLOPT_HTTPHEADER => array(
        "X-Wa-api-token: $apiKey",
    ),
));

?>

Předem děkuji za odpovědi! ;)

Předmět Autor Datum
Chybě se nesmíš divit, když tam $curl zavíráš a pak se snažíš volat znovu :) ` curl_close($curl);`…
tirus 15.07.2020 13:26
tirus
Spojil jsem rady odsud a z jakpsatweb a zatím mi to funguje takto: Vše ještě budu upravovat, až to… poslední
Vilak 15.07.2020 14:28
Vilak

Spojil jsem rady odsud a z jakpsatweb a zatím mi to funguje takto:

Vše ještě budu upravovat, až to bude kompletní, přidám sem i svoji konečnou verzi. Třeba to někdy někomu z webarealu pomůže.

help-function.php (jen ta funkce)


function createCurlConnection(){
	$apiServer = '';
	$apiKey = '';
	$username = '';
	$password = '';

	$curl = curl_init();

	curl_setopt_array($curl, array(
	    CURLOPT_URL => "https://$apiServer/login",
	    CURLOPT_RETURNTRANSFER => true,
	    CURLOPT_ENCODING => "",
	    CURLOPT_MAXREDIRS => 10,
	    CURLOPT_TIMEOUT => 30,
	    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
	    CURLOPT_CUSTOMREQUEST => "POST",
	    CURLOPT_POSTFIELDS => "{\n  \"username\": \"$username\",\n  \"password\": \"$password\"\n}",
	    CURLOPT_HTTPHEADER => array(
	        "X-Wa-api-token: $apiKey",
	    ),
	));

	$response = curl_exec($curl);
	    $err = curl_error($curl);

	    curl_close($curl);

	    if ($err) {
	        echo "cURL Error #:" . $err;
	    }
	$jsonResponse = json_decode($response);
	$token = $jsonResponse->token;

	return $token;
}

a api-add-products.php

<?php
// hlavicka
include "include/help-functions.php";

// vkladane produkty z
include "get-csv-to-array/dgm.php"; // DGM frezovaci hlavy 
// include "get-csv-to-array/dte.php" // DTE frezovaci hlavy

// ziskani tokenu
$token = createCurlConnection();

//vkladani produktu
$i = 0;
foreach (array_slice($products, 1) as $a) {
    if ($i >= 3) {
        break;
    }
    $i++;
    pr($a);
    $name = $a['name'];
    if ($tocivost == "S") {
        $img = "symetricke-zuby-freza.png";
    }
    else {
        $img = "asymetricke-zuby-freza.png";
    }
    $produkt = array(
        "name" => $name,
        "secondName" => $name,
        "description" => $a['description'],
        "picture" => $img,
        "news" => false,
        "secondPrice" => str_replace(",", ".", $a['cena_na_web']), // cenikova cena
        "price" => str_replace(",", ".", $a['cena_bez_dph']), // cena bez dph
        /*"Použití na materiál" => "Masiv",
        "Průměr řezného nástroje" => $a['prumer_nastroje'], // JAK VLOŽIT TENTO PARAMETR TŘEBA?
        "Typ" => "$a['typ'],
        "něco" => "něco",*/
        "visibleOnHomepage" => false,
        "productNumber" => $a['kod'],
        "previewPicture" => $img,
        "bestselling" => false,
        "discounted" => false,
        "measuringUnit" => "",
        "discussionEnabled" => false,
        "freeShippingEnabled" => false,
        "bazaarEnabled" => false,
        "amountInStock" => 10,
        "availabilityId" => 1,
        "weight" => 0,
        "unsaleable" => false,
        "hidden" => false,
        "feedProductName" => $name,
        "feedPicture" => $img,
        "pictureMagnifier" => $img,
        "vatLevel" => 1,
        "categories" => [ // DOKONČIT!
            "10-0-0-0", // pred vkladanim je nutne mit kategorie vytvorene!
            [
                "code" => "10-474-0-0",
                "primary" => true
            ]
        ]
    );

    // vlozeni jednoho produktu
    $produkt = json_encode($produkt);
    $curl = curl_init();

    curl_setopt_array($curl, array(
        CURLOPT_URL => "https://$apiServer/product",
        CURLOPT_RETURNTRANSFER => TRUE,
        CURLOPT_POST => TRUE,
        CURLOPT_ENCODING => "",
        CURLOPT_MAXREDIRS => 10,
        CURLOPT_TIMEOUT => 30,
        CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
        CURLOPT_CUSTOMREQUEST => "POST",
        CURLOPT_POSTFIELDS => "$produkt",
        CURLOPT_HTTPHEADER => array(
            "Authorization: Bearer $jsonResponse->token",
            "X-Wa-api-token: $apiKey"
        ),
    ));

    $response = curl_exec($curl);
    $err = curl_error($curl);

    curl_close($curl);

    var_dump($response);
    }
    $response = null;
    $err = null; 
    $curl = null; 
    $produkt = null; 
?>

Zpět do poradny Odpovědět na původní otázku Nahoru