Magento 2 Rest API-提取所有产品时出现无效签名问题

时间:2018-11-15 05:10:33

标签: php curl oauth magento2

我正在使用oAuth开发Magento2 REST API。 我也在使用CURL调用REST API。

我的API正在工作,如果我致电API以获取特定的客户信息或 特定产品信息。

但是,当我调用API获取所有产品时,它将要求searchCriteria。 而且,如果我使用搜索条件,那么它会向我显示“无效签名”之类的错误。我已经看到我们许多人遇到这个问题。

有什么解决办法吗?

非常感谢。

我的代码段如下。

function sign($method, $url, $data, $consumerSecret, $tokenSecret)
{
    $url = urlEncodeAsZend($url);

    $data = urlEncodeAsZend(http_build_query($data, '', '&'));
    $data = implode('&', [$method, $url, $data]);

    $secret = implode('&', [$consumerSecret, $tokenSecret]);

    return base64_encode(hash_hmac('sha1', $data, $secret, true));
}

function urlEncodeAsZend($value)
{
    $encoded = rawurlencode($value);
    $encoded = str_replace('%7E', '~', $encoded);
    return $encoded;
}

$consumerKey = "myconsumerKey";
$consumerSecret = "myconsumerSecret";
$accessToken = "myaccessToken";
$accessTokenSecret = "myaccessTokenSecret";



$method = 'GET';

$searchCriteria = urlencode('searchCriteria[filterGroups][0][filters][0][field]=category_id&searchCriteria[filterGroups][0][filters][0][value]=1268&searchCriteria[filterGroups][0][filters][0][conditionType]=eq&searchCriteria[sortOrders][0][field]=created_at&searchCriteria[sortOrders][0][direction]=DESC&searchCriteria[pageSize]=10&searchCriteria[currentPage]=1');
//$searchCriteria['pageSize'] = 20;
$url = 'http://myhost.local/rest/V1/products?' . $searchCriteria;

//var_dump($url);exit;

//
$data = [
    'oauth_consumer_key' => $consumerKey,
    'oauth_nonce' => md5(uniqid(rand(), true)),
    'oauth_signature_method' => 'HMAC-SHA1',
    'oauth_timestamp' => time(),
    'oauth_token' => $accessToken,
    'oauth_version' => '1.0',
];

$data['oauth_signature'] = sign($method, $url, $data, $consumerSecret, $accessTokenSecret);
//var_dump($data['oauth_signature']);exit;
$curl = curl_init();

curl_setopt_array($curl, [
    CURLOPT_RETURNTRANSFER => 1,
    CURLOPT_URL => $url,
    CURLOPT_HTTPHEADER => [
        'Authorization: OAuth ' . http_build_query($data, '', ',')
    ]
]);

$result = curl_exec($curl);
curl_close($curl);
var_dump($result);exit;

0 个答案:

没有答案