Реализация oauth в netsuite с использованием php и метода GET - PullRequest
0 голосов
/ 20 февраля 2020

Этот ответ хорошо работал для меня, но только с методами POST

Реализация Oauth в netsuite с использованием php

Я пытаюсь использовать ту же технику , но с методом GET и заставить его работать, вот мой код

<?php
//date_default_timezone_set('America/New_York');

define("NETSUITE_URL", 'https://5240409-sb1.restlets.api.netsuite.com/app/site/hosting/restlet.nl');
define("NETSUITE_SCRIPT_ID", 'XXXXXX');
define("NETSUITE_DEPLOY_ID", 'XXXXXX');
define("NETSUITE_ACCOUNT", 'XXXXXX');
define("NETSUITE_CONSUMER_KEY", 'XXXXXX');
define("NETSUITE_CONSUMER_SECRET", 'XXXXXX');
define("NETSUITE_TOKEN_ID", 'XXXXXX');
define("NETSUITE_TOKEN_SECRET", 'XXXXXX');

define("NETSUITE_CLIENT", 'XXXXXX');

function sendOrderToNS($details) {
    $oauth_nonce = md5(mt_rand());
    $oauth_timestamp = time();

    $oauth_signature_method = 'HMAC-SHA1';
    $oauth_version = "1.0";

    $base_string =
        "GET&" . urlencode(NETSUITE_URL) . "&" .
        urlencode(
            "deploy=" . NETSUITE_DEPLOY_ID
          . "&oauth_consumer_key=" . NETSUITE_CONSUMER_KEY
          . "&oauth_nonce=" . $oauth_nonce
          . "&oauth_signature_method=" . $oauth_signature_method
          . "&oauth_timestamp=" . $oauth_timestamp
          . "&oauth_token=" . NETSUITE_TOKEN_ID
          . "&oauth_version=" . $oauth_version
          . "&script=" . NETSUITE_SCRIPT_ID
          . "&client=" . NETSUITE_CLIENT
        );
    $sig_string = urlencode(NETSUITE_CONSUMER_SECRET) . '&' . urlencode(NETSUITE_TOKEN_SECRET);
    $signature = base64_encode(hash_hmac("sha1", $base_string, $sig_string, true));

    $auth_header = "OAuth "
        . 'oauth_signature="' . rawurlencode($signature) . '",'
        . 'oauth_version="' . rawurlencode($oauth_version) . '",'
        . 'oauth_nonce="' . rawurlencode($oauth_nonce) . '",'
        . 'oauth_signature_method="' . rawurlencode($oauth_signature_method) . '",'
        . 'oauth_consumer_key="' . rawurlencode(NETSUITE_CONSUMER_KEY) . '",'
        . 'oauth_token="' . rawurlencode(NETSUITE_TOKEN_ID) . '",'  
        . 'oauth_timestamp="' . rawurlencode($oauth_timestamp) . '",'
        . 'realm="' . rawurlencode(NETSUITE_ACCOUNT) .'"';

        var_dump($auth_header);

    $ch = curl_init();
    curl_setopt($ch,CURLOPT_URL, NETSUITE_URL . '?&script=' . NETSUITE_SCRIPT_ID . '&deploy=' . NETSUITE_DEPLOY_ID . '&client=' . NETSUITE_CLIENT);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, [
        'Authorization: ' . $auth_header,
        'Content-Type: application/json'
    ]);

    $result = curl_exec($ch);

    var_dump($result);

    curl_close($ch);
}

sendOrderToNS();

Я получаю следующую ошибку:

"{"error" : {"code" : "INVALID_LOGIN_ATTEMPT", "message" : "Invalid login attempt."}}"

Я почти уверен, что эта ошибка для неправильно сформированная подпись, но я не знаю, что я делаю неправильно

...