Как сделать отправку конверсий на node?
$counterId = '';
$filePath = 'data.csv';
$authToken = '';
$url = 'https://api-metrika.yandex.ru/management/v1/counter/' . $counterId . '/offline_conversions/upload?client_id_type=CLIENT_ID';
if (function_exists('curl_file_create')) { // php 5.5+
$cFile = curl_file_create($filePath, 'text/csv', 'data.csv');
} else { //
$cFile = '@'.realpath($filePath);
}
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, ['file' => $cFile]);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Content-Type: multipart/form-data',
'Authorization: OAuth ' . $authToken
]);
$result = curl_exec($ch);
echo $result;
На php в таком виде все работает, на node никак не получается.
var Curl = require( 'node-libcurl' ).Curl;
var curl = new Curl();
curl.setOpt('URL', data.url);
curl.setOpt('FOLLOWLOCATION', true);
curl.setOpt('SSL_VERIFYPEER', false);
//curl.setOpt('RETURNTRANSFER', true);
//curl.setOpt(Curl.option.POST, true);
curl.setOpt(Curl.option.VERBOSE, true)
curl.setOpt(Curl.option.HTTPPOST, [
{ name: data.fileName, file: data.file, type: 'text/csv' }
]);
//curl.setOpt(Curl.option.POSTFIELDS, dataS);
//curl.setOpt('CUSTOMREQUEST', 'POST');
curl.setOpt('HTTPHEADER', [
'Authorization: OAuth ТОКЕН',
'Content-Type: multipart/form-data'
]);
curl.on( 'end', function( statusCode, body, headers ) {
console.info(statusCode);
console.info( '---' );
console.info(body);
console.info( '---' );
console.info(headers);
this.close();
});
curl.on( 'error', function( err, curlErrorCode ) {
console.error( err.message );
console.error( '---' );
console.error( curlErrorCode );
this.close();
});
curl.perform();
Выдает ошибку:
{"errors":[{"error_type":"invalid_uploading","message":"Request parameter not found","location":"file"}],"code":400,"message":"Request parameter not found"}
3 дня убил, все перерыл, что за такой параметр мистический...
Вот ссылка на офф документацию: https://yandex.ru/dev/metrika/doc/api2/practice/offline-conv.html