如何在PHP中写入JSON curl postfield

时间:2018-03-13 09:54:07

标签: php json api curl

我有这个代码,我尝试通过API在我的网上商店列出我的所有文章(文档http://api.textalk.se/webshop/

我做了类似的脚本女巫接受来自相同API的订单,它工作得很完美,但我不会开始工作。

任何想法我做错了什么?

 <?php
class TextalkApi
{
       public function AdminLogin($username, $password) {
        $url = 'https://shop.textalk.se/backend/jsonrpc/v1/';           

        $ch = curl_init();      
        curl_setopt($ch, CURLOPT_URL, $url);        
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);        
        curl_setopt($ch, CURLOPT_POST, 1);      
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($ch,CURLOPT_HTTPHEADER, array('Content-Type: application/json-rpc'));   
        curl_setopt($ch, CURLOPT_POSTFIELDS, '{"jsonrpc":"2.0", "id":1, "method":"Admin.login", "params":["' . $username . '","' . $password . '"]}');  
        $data = json_decode(curl_exec($ch), true);
        $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        if($http_code != 200) 
            throw new Exception('Error : Admin Login Failed');

        return $data['result'];
    }

           public function GetArts($admin_auth_token, $webshop_id) {
        $url = 'https://shop.textalk.se/backend/jsonrpc/v1/?auth=' . $admin_auth_token . '&webshop=' . $webshop_id;

        $ch = curl_init();      
        curl_setopt($ch, CURLOPT_URL, $url);        
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);        
        curl_setopt($ch, CURLOPT_POST, 1);      
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($ch,CURLOPT_HTTPHEADER, array('Content-Type: application/json-rpc'));

// this below i beleive dosen't work
        curl_setopt($ch, CURLOPT_POSTFIELDS, 
 '{"jsonrpc":"2.0","method":"Article.list", {"limit": 5}],"id":1}');
// this above i beleive dosen't work

                $data = json_decode(curl_exec($ch), true);
        $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        if($http_code != 200) 
            throw new Exception('Error : Failed to get orders');

        return $data['result'];
    }
}
?>

在这个POSTFIELD中,我写下了#34; //在下面,我相信,工作&#34;我想把这个放得正确

Article.list(true, {"limit": 5}) 

请参阅文档http://api.textalk.se/webshop/interface/TryIt/

在我看起来像这样的其他PHP文件中,我希望输出结果

<?php
require_once('the_file_with_the_class_TextalkApi.php');

$textalk = new TextalkApi();
//Working demo credentials
$admin_auth_token = $textalk->AdminLogin('pon85x@gmail.com', 'abc123');
$webshop_id = '77140';

$arts = $textalk->GetArts($admin_auth_token, $webshop_id);
echo '<pre>';print_r($arts);echo '</pre>';
var_dump($arts);
?>

但结果是NULL

1 个答案:

答案 0 :(得分:0)

在第5行,你没有验证$ username / $ password是字符串(如果是的话,你应该提出InvalidArgumentException&#39;

第13行

,你不是json-encoding $ username / $ password

在第14行,你在第19行使用它作为数组之前,你没有验证json解码实际上是否成功。

在第23行,您没有再次验证输入参数,并且您不是url编码$ admin_auth_token也不是$ webshop_id

在第33行,您正在发送一个带有迷路{j}的无效编码的json {/ 1}

在第36行,您在第41行使用它作为数组之前,并未验证json解码是否实际成功。

并且在整个代码中,您没有捕获任何潜在的卷曲错误,如果设置选项时出错,curl_setopt会返回bool(false), 如果在传输过程中出现问题,curl_exec将返回bool(false),您的代码将完全忽略该问题。尝试使用一个错误捕获的curl_setopt包装器,如

]

并检查curl_exec是否返回false