Php Paypal Rest API激活计费计划

Php Paypal Rest API激活计费计划,php,rest,paypal,Php,Rest,Paypal,我正在尝试激活以前创建的计费计划,但收到格式错误的json错误 激活端点: "/v1/payments/billing-plans/{plan-id}" 请求机构: [ { "path": "", "value": { "state": "ACTIVE" }, "op": "replace" } ] 在PHP中: $payLoad = json_encode(array(array( 'pa

我正在尝试激活以前创建的计费计划,但收到格式错误的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"....}
编辑:我还尝试将路径的值设置为“/”


但是没有用

您可以尝试使用此代码,它适用于我:

<?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;


    ?>

您可以尝试使用此代码,它适用于我:

<?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;


    ?>

您可以尝试使用此代码,它适用于我:

<?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;


    ?>

您可以尝试使用此代码,它适用于我:

<?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;


    ?>

如果回答有点晚,很抱歉,但我最近也遇到了同样的问题,我想我会将解决方案分享给可能遇到这个问题的其他人

如果您计划使用PHPSDK进行定期付款(plan)补丁调用,则源代码需要稍微更改

这是由PPHttpConnection.php中的第56行引起的,switch语句仅在方法为post时附加post字段。但是,补丁请求也会发送有效负载,因此也需要添加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;           
}

然后,补丁调用应该可以完美地工作

如果回答有点晚,我很抱歉,但我最近也遇到了同样的问题,我想我会将解决方案分享给任何可能遇到这个问题的人

如果您计划使用PHPSDK进行定期付款(plan)补丁调用,则源代码需要稍微更改

这是由PPHttpConnection.php中的第56行引起的,switch语句仅在方法为post时附加post字段。但是,补丁请求也会发送有效负载,因此也需要添加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;           
}

然后,补丁调用应该可以完美地工作

如果回答有点晚,我很抱歉,但我最近也遇到了同样的问题,我想我会将解决方案分享给任何可能遇到这个问题的人

如果您计划使用PHPSDK进行定期付款(plan)补丁调用,则源代码需要稍微更改

这是由PPHttpConnection.php中的第56行引起的,switch语句仅在方法为post时附加post字段。但是,补丁请求也会发送有效负载,因此也需要添加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;           
}

然后,补丁调用应该可以完美地工作

如果回答有点晚,我很抱歉,但我最近也遇到了同样的问题,我想我会将解决方案分享给任何可能遇到这个问题的人

如果您计划使用PHPSDK进行定期付款(plan)补丁调用,则源代码需要稍微更改

这是由PPHttpConnection.php中的第56行引起的,switch语句仅在方法为post时附加post字段。但是,补丁请求也会发送有效负载,因此也需要添加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;           
}

然后,补丁调用应该可以完美地工作

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


我知道有点晚了,但这对邮递员的补丁请求(而不是POST)起到了作用


我知道有点晚了,但这对邮递员的补丁请求(而不是POST)起到了作用


我知道有点晚了,但这对邮递员的补丁请求(而不是POST)起到了作用


你能试试这个请求体吗:[{“op”:“replace”,“path”:“/,“value”:{“state”:“ACTIVE”}]实际上这就是我正在尝试的,我改为使用空值进行尝试,但仍然是相同的错误。应该提到php将其计算为“\/”。您可以尝试此请求正文:[{“op”:“replace”,“path”:“/”,“value”:{“state”:“ACTIVE”}]实际上这就是我正在尝试的,我改为尝试使用空值,但仍然是相同的错误。应该提到php将其计算为“\/”。您可以尝试此请求正文:[{“op”:“replace”,“path”:“/”,“value”:{“state”:“ACTIVE”}]实际上这就是我正在尝试的,我改为尝试使用空值,但仍然是相同的错误。应该提到php将其计算为“\/”。您可以尝试此请求正文:[{“op”:“replace”,“path”:“/”,“value”:{“state”:“ACTIVE”}]实际上这就是我正在尝试的,我改为尝试使用空值,但仍然是相同的错误。应该提到php将其计算为“\/”。问题出在其他地方(不在给定的代码中),但我将留下问题和答案,以便将来对其他人有用。这个答案中的代码是有效的。问题出在其他地方(不在给定的代码中),但我将留下问题和答案,以便将来对其他人有用。这个答案中的代码是有效的。问题出在其他地方(不在给定的代码中),但我将留下问题和答案,以便将来对其他人有用。这个答案中的代码是有效的。问题出在其他地方(不在给定的代码中),但我将留下问题和答案,以便将来对其他人有用。此答案中的代码有效。感谢您的回答!这就是我实际做的,但我认为它不是在问题上下文中发布的,无论如何,将此标记为最佳答案。谢谢,从Paypal SDK的上下文中我想更合理:)谢谢你的回答!这就是我实际做的,但我认为它不是在问题上下文中发布的,无论如何,将此标记为最佳答案。谢谢,从Paypal SDK的上下文中我想更合理:)谢谢你的回答!这是我实际做的,但我认为无论如何,这不是在问题的背景下发布的