【问题标题】:Paypal Rest API activate billing planPaypal Rest API 激活计费计划
【发布时间】:2014-09-01 08:51:00
【问题描述】:

我正在尝试激活之前创建的计费计划,但收到格式错误的 json 错误。

激活端点:

"/v1/payments/billing-plans/{plan-id}"

请求正文:

[

   {

      "path": "",

      "value": {

         "state": "ACTIVE"

      },

      "op": "replace"

   }

]

在 PHP 中:

$payLoad = json_encode(array(array(
    'path' => "",
    'value' => array(
        'state' => 'ACTIVE'
    ),
    'op' => 'replace'

)));

我得到的回应是:

{"name":"MALFORMED_REQUEST","message":"Incoming JSON request does not map to API request"....}

编辑:我也尝试将路径设置为“/”

"path": "\/",

但无济于事。

【问题讨论】:

  • 你能试试这个请求正文吗:[ { "op": "replace", "path": "/", "value": { "state": "ACTIVE" } } ]跨度>
  • 其实这就是我正在尝试的,我改为尝试使用空值但仍然是同样的错误。应该提到 php 将其评估为“\/”。

标签: php rest paypal


【解决方案1】:

我知道这有点晚了,但这对带有 PATCH 请求(而不是 POST)的邮递员有效

[
    {
        "path": "/",
        "value": {
            "state": "ACTIVE"
        },
       "op": "replace"
    }
]

【讨论】:

  • 谢谢。在我的情况下,错误只是错字。确保您发送的是操作数组(json 数组)而不是一个操作对象。
【解决方案2】:

对不起,如果这个答案有点晚了,但我最近遇到了同样的问题,我想我会与其他可能遇到它的人分享解决方案。

如果您计划使用 PHP SDK 进行定期付款(计划),PATCH 调用源需要稍微改变。

这是由PPHttpConnection.php中的第56行引起的,switch语句只有在方法为POST时才附加post字段。但是,PATCH 请求也会发送有效负载,因此还需要添加 post 字段,如果没有它们,API 会返回格式错误的 JSON 错误,因为它没有接收任何内容。

switch($this->httpConfig->getMethod()) {
        case 'POST':
            curl_setopt($ch, CURLOPT_POST, true);
            curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
            break;                     
}

将以上内容改为:

 switch($this->httpConfig->getMethod()) {
        case 'POST':
            curl_setopt($ch, CURLOPT_POST, true);
            curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
            break; 
        case 'PATCH':
            curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
            break;           
}

PATCH 调用应该可以正常工作!

【讨论】:

  • 感谢您的回答!这是我实际所做的,但我认为它不在问题上下文中发布,无论如何将其标记为最佳答案。
  • 谢谢,我猜从 Paypal SDK 的上下文中更有意义 :)
【解决方案3】:

您可以尝试使用此代码,它对我有用:

<?php
    $header = array();
    $header[] = 'Content-type: application/json';
    $header[] = 'Authorization: Bearer XXXXX-XXXXXXXXXXXXXXXXXXXXXXXXX';
    $url = 'https://api.sandbox.paypal.com/v1/payments/billing-plans/P-34L0290663823456FEE7TINY';
    $data ='[
        {
            "op": "replace",
            "path": "/",
            "value": {
                "state": "ACTIVE"
            }
        }
    ]';

    //open connection
    $ch = curl_init();

    //set connection properties
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HTTPHEADER,$header);
    //curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PATCH');
    curl_setopt($ch,CURLOPT_SSL_VERIFYHOST, 0);
    curl_setopt($ch,CURLOPT_SSL_VERIFYPEER, false);


    //execute post
    $result = curl_exec($ch);

    $err = curl_errno($ch);
    $errmsg = curl_error($ch) ;
    $info = curl_getinfo($ch);
    curl_close($ch);
    if( $err )
    {
    echo 'error';
    }
    if( $errmsg ){
    echo '<h3>Error</h3>'.$errmsg;
    }
    else
    echo $result;


    ?>

【讨论】:

  • 问题出在其他地方(不在给定的代码中),但我会留下问题和答案,以便将来对某人有用。此答案中的代码有效。
猜你喜欢
  • 2015-09-09
  • 1970-01-01
  • 2023-03-12
  • 2017-06-21
  • 2023-03-23
  • 2015-01-27
  • 2020-04-13
  • 2014-12-15
  • 2015-11-01
相关资源
最近更新 更多