首页 > 解决方案 > PHP PayPal Catalog REST API 不会显示新产品

问题描述

自从使用带有 PHP curl 对象的 Catalog API 添加了几个新的沙盒产品后,发生了这样的事情:

  1. 使用 REST API 可以看到这两个产品。
  2. 但我只能使用 PATCH 编辑第二个。更新另一个的调用不会出错,它们只是不做任何事情。
  3. 我可以使用 API 添加新产品,同样没有错误,但之后它们不会出现在列表 API 响应中。
  4. 当尝试添加与我之前明显添加但不可见的 ID 相同的新产品时,响应数组中有一个 DUPLICATE_RESOURCE_IDENTIFIER 错误,确认它在某处。

到底是怎么回事?

这是代码:

添加产品

        $ch = curl_init();
        
        $authorization="Authorization: Bearer ".$authorization;
        
        $url=$sbx=='1'?$url='https://api.sandbox.paypal.com/v1/catalogs/products':'https://api.paypal.com/v1/catalogs/products';
        
        echo $url."<br><br>";
    
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, '{"name": "xxxxxx","description": "App 005", "type": "SERVICE", "category": "SOFTWARE", "id": "RBW00005"}');
        curl_setopt($ch, CURLOPT_POST, 1);
        $headers = array();
        $headers[] = 'Content-Type: application/json';
        $headers[] = $authorization;
        $headers[] = 'Paypal-Request-Id: FGAS005';
        curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
        $result = curl_exec($ch);
        if (curl_errno($ch)) {
            echo 'Error:' . curl_error($ch);
        }
        
        $response = json_decode($result);

        print_r($response);
        echo "<br><br>";
        print_r(curl_getinfo($ch));

        $response="";
        
        curl_close($ch);

列出产品

    $ch = curl_init();
    
    $authorization="Authorization: Bearer ".$authorization;
    
    $url=$sbx=='1'?$url='https://api.sandbox.paypal.com/v1/catalogs/products?page_size=2&page=1&total_required=true':
        'https://api.paypal.com/v1/catalogs/products?page_size=2&page=1&total_required=true';
        
    echo $url."<br><br>";
    
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $headers = array();
    $headers[] = 'Content-Type: application/json';
    $headers[] = $authorization;
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    $result = curl_exec($ch);
    if (curl_errno($ch)) {
        echo 'Error:' . curl_error($ch);
    }
    
    $response = json_decode($result);
    
    print_r($response);
    echo "<br><br>";
    print_r(curl_getinfo($ch));
    
    $response="";
    
    curl_close($ch);

并且它不会丢失帖子字符串周围的方括号。

如果我把它们放进去,我会收到一个“格式错误的请求”错误。没有方括号,没有错误,但也没有可见的产品。

谢谢阅读。

标签: phpapicurlpaypalcatalog

解决方案


刚刚注意到您似乎在硬编码请求 ID 标头:

$headers[] = 'Paypal-Request-Id: FGAS005';

确保你永远不会这样做;对于每个独立的请求,该标头的值应该是唯一的,或者更简单地说根本没有设置(注释掉这一行)


推荐阅读