PHP PayPal Catalog REST API 不会显示新产品

Posted

技术标签:

【中文标题】PHP PayPal Catalog REST API 不会显示新产品【英文标题】:PHP PayPal Catalog REST API will not display new product 【发布时间】:2021-01-17 05:47:46 【问题描述】:

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

    使用 REST API 可以看到这两个产品。 但我只能使用 PATCH 编辑第二个。更新另一个的调用不会出错,它们只是什么都不做。 我可以使用 API 添加新产品,同样没有错误,但之后它们不会出现在列表 API 响应中。 当尝试添加与我之前明显添加但不可见的 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);

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

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

感谢阅读。

【问题讨论】:

这不是代码问题,您需要分享完整的请求和响应,并可能联系 PayPal 的支持人员。最简单的解决方案是创建具有不同标识符的新产品。 感谢您的回复。我会这样做,因为显然它不是您所说的代码。我删除了沙盒应用程序并创建了一个新应用程序,但它没有任何区别。当我有更新时,我会在这里发布更新,以防其他开发人员遇到同样的问题。 我在这里说实话,复制和粘贴示例代码而不通读它并且知道它的作用绝不是一个好主意,但这就是我在这里所做的,所以对于浪费任何人的时间表示歉意。是页面大小和页面整数设置阻止了我看到我的所有产品。我使用的示例仅列出了两个。 另外,无法编辑描述值是因为添加此特定产品时未设置描述。一旦我使用了“添加”操作来添加描述,一切都奏效了。我确实在这个特定问题上给了自己一些懈怠,因为在目录 API 文档中并不明显,您必须先添加,然后才能进行替换。合乎逻辑,但不明显。 【参考方案1】:

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

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

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

【讨论】:

明白,这是沙盒测试代码,但我必须承认我只是懒得让那部分动态化。然而,重点是,现场版肯定不会这样做

以上是关于PHP PayPal Catalog REST API 不会显示新产品的主要内容,如果未能解决你的问题,请参考以下文章

用于支付流的 Paypal PHP REST API

如何使用 PayPal REST API 和 PayPal PHP SDK 保存 PayPal 帐户以备将来付款

如何将 PayPal Classic Payment 表单转换为 PayPal REST API PHP 应用程序?

使用 Paypal php rest SDK 汇款

如何使用 PayPal PHP REST API 设置帐单或送货地址?

使用 PHP PayPal REST API 退款?