【问题标题】:PayPal PHP SDK REST API Response not JSONPayPal PHP SDK REST API 响应不是 JSON
【发布时间】:2013-11-26 20:46:51
【问题描述】:

当我进行 API 调用时,我得到一个带有嵌套对象数组的对象。在 SDK 中,我将标头设置为接受:application/json。我想知道为什么我要返回对象和数组?

以下是部分回复:

PayPal\Api\CreditCard Object
(
    [_propMap:PayPal\Common\PPModel:private] => Array
        (
            [type] => amex
            [number] => xxxxxxxxxxx0005
            [expire_month] => 5
            [expire_year] => 2015
            [cvv2] => 1234
            [first_name] => 
            [last_name] => 
            [payer_id] => 3zIVtTFQ7UdKjP5mssjtzoUo6NvrsExl466oPC4Mm8nwOjI6BS
            [id] => CARD-35X96613EN689504VKKCA4RA
            [state] => ok
            [valid_until] => 2015-06-01T00:00:00Z
            [create_time] => 2013-11-13T23:41:56Z
            [update_time] => 2013-11-13T23:41:56Z
            [links] => Array
                (
                    [0] => PayPal\Api\Links Object
                        (
                            [_propMap:PayPal\Common\PPModel:private] => Array
                                (
                                    [href] => https://api.sandbox.paypal.com/v1/vault/credit-card/CARD-35X96613EN689504VKKCA4RA
                                    [rel] => self
                                    [method] => GET
                                )

   )

[1] => PayPal\Api\Links Object

... 等等 创建这个的代码

public static function get($creditCardId, $apiContext = null) { 
    if (($creditCardId == null) || (strlen($creditCardId) <= 0)) { 
        throw new \InvalidArgumentException("creditCardId cannot be null or empty"); 
    }
    $payLoad = ""; 
    if ($apiContext == null) { 
         $apiContext = new ApiContext(self::$credential); 
    } 
    $call = new PPRestCall($apiContext); 
    print_r($call); 
    die;
    $json = $call->execute(array('PayPal\Rest\RestHandler'), "/v1/vault/credit-card/$creditCardId", "GET", $payLoad); 
    $ret = new CreditCard(); 
    $ret->fromJson($json); 
    return $ret;
}

【问题讨论】:

    标签: php rest paypal


    【解决方案1】:

    json_decode($call->execute(array('PayPal\Rest\RestHandler'), "/v1/vault/credit-card/$creditCardId", "GET", $payLoad) );

    【讨论】:

      【解决方案2】:

      好的,非常感谢 Machavity 的帮助。问题是在我上面发布的函数中,它接受 JSON 响应并将其转换为一些奇怪的对象:

      $ret->fromJson($json);
      

      我删除了那行,现在我得到了 JSON。我仍然想知道为什么拥有我最初发布的那个对象会有帮助以及它可以在哪里使用。我还想知道为什么 SDK 文档没有明确说明 SDK 确实返回 JSON 作为最终格式。我觉得如果 PayPal 通知开发人员将响应转换为对象,这将节省大量时间,这样我们就不必搜索数千行代码来找出答案。

      【讨论】:

      • 我一直在试图弄清楚如何简单地获取“发送”然后通过 PHP PayPal SDK“接收”的原始 JSON...用于记录/跟踪目的!我不想要 SDK 的整个对象包装器和处理程序,我只想要往返于 paypal 的有效负载进行日志记录(因为 SDK 记录器已损坏/根本无法工作)。
      【解决方案3】:

      SDK 很可能在通信层接受 JSON,然后运行 ​​json_decode 将您可以使用的对象传回给您。我自己的 API 系统将响应转换回 PHP 数组。

      【讨论】:

      • 嗯,有趣的是当我搜索文档时,它只列出 JSON 作为响应。我觉得我错过了什么。
      • 原始响应(PayPal 发送给您的内容)可能是 JSON 格式。您必须构建自己的请求或修改 SDK 才能看到它。
      • 我还是一头雾水。我将配置设置为返回 JSON。我发布的是响应的 print_r() ,因此 SDK 尚未操纵响应。我想,如果这是“正常的”,我如何访问这个对象内的所有数据。对象中的数组键有斜杠和分号,这不是我以前处理过的。在我使用过的其他 API 中,它只是一个简单的 json 响应?
      • SDK 已经为您解析了响应,您显然通过对象引用了它。你能把你的代码贴出来让我看看你的电话吗?
      • 调用函数: public static function get($creditCardId, $apiContext = null) { if (($creditCardId == null) || (strlen($creditCardId) execute(array('PayPal\Rest\RestHandler'), "/v1/vault/credit-card/$creditCardId", "GET", $payLoad); $ret = 新信用卡(); $ret->fromJson($json);返回 $ret;
      猜你喜欢
      • 2017-04-09
      • 2019-01-04
      • 2016-05-20
      • 2013-08-25
      • 2020-07-01
      • 2013-08-24
      • 1970-01-01
      • 2013-10-17
      • 2018-01-25
      相关资源
      最近更新 更多