如何使用oAuth1.0 / php POST JSON主体数组

时间:2015-11-27 12:49:10

标签: php json oauth

我想通过PHP为api发布数组。我已经使用了oAuth 1.0,但是如何使用oAuth POST JSON body数组。

<? php

//code start

try
{

    $postData = array(
        'ProductID' => $productID,
        'InventoryType' => $InventoryType,
        'ProductCostPrice' => $productCost
    );

    $postData = json_encode($postData);

    $oauth = new OAuth($this->consumer_key, $this->consumer_secret);
    $oauth->enableDebug(); // simple debug flag for checking error messages
    $oauth->disableSSLChecks(); // avoids an SSL issue when testing

    $oauth->setToken($this->access_token, $this->token_secret);

    ## POST JSON body array ##
    $oauth->setBody('body',$postData);
    ##

    $url = $this->product_update_url.$productID;

    $oauth->fetch($url, OAUTH_AUTH_TYPE_FORM);

    $response_info = $oauth->getLastResponseInfo();
    header("Content-Type: {$response_info["content_type"]}");
    $dataList = (array) json_decode($oauth->getLastResponse());

    echo "<pre>";
    print_r($dataList);
    echo "</pre>";
    exit; 



} catch(OAuthException $E) {

    Mage::log('error', null, 'error.log');

} 

==================

网址:http://php.net/manual/en/class.oauth.php

请帮助,我怎么能用oAuth POST json body array。

1 个答案:

答案 0 :(得分:1)

请求参数在OAuth1 spec中规范化的方式意味着您只应在身体采用url编码格式(即param1=value1&param2=value2arr[]=val1&arr[]=val2

时对身体进行签名

这是由于OAuth1计算请求签名的方式,包括按字母顺序按名称对参数进行排序。

在上面的例子中 - 如果可能的话 - 你应该尝试形成url-encode数据数组。

$postData = array(
    'ProductID' => $productID,
    'InventoryType' => $InventoryType,
    'ProductCostPrice' => $productCost
);
// "ProductID=1&InventoryType=widget&ProductCostPrice=3.5"
$body = http_build_query($postData);
...
$oauth->setBody('body', $body);

如果由于某种原因无法做到这一点,您需要确保在解码请求时未在签名计算中使用请求正文。

如果您使用HTTPS作为API(您应该使用),那么您应该可以使用签名中无法验证的请求正文。如果您允许对API的HTTP请求,您应该有一些机制来确认请求正文未被更改。

我看到的方法是散列JSON正文字符串,然后将该散列作为查询参数包含在请求中(因此它包含在签名计算中)。然后,作为API解码过程的一部分,您将确认JSON正文哈希值与签名查询值。

这个问题有点陈旧,但我通过谷歌搜索找到了它,所以我认为最好为未来的搜索者留下答案。