2014-09-01 93 views
0

我想激活先前創建的結算計劃,並收到格式錯誤的json錯誤。Paypal Rest API激活結算計劃

激活端點:

"/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": "\/", 

但無濟於事值。

+0

你可以試試這個請求體:[ { 「OP」:「替換」, 「路徑「:‘/’, ‘值’:{ ‘狀態’:‘ACTIVE’ }} ] – Eshan 2014-09-01 08:58:10

+0

其實這就是我想要的,我改爲嘗試用空值,但仍是同樣的錯誤。應該提及的是,php評估它爲「\ /」。 – 2014-09-01 08:59:08

回答

1

如果對不起這個答案有點晚了,但最近我有同樣的問題,我想我會分享其他任何人的解決方案誰可能會遇到它。

如果您打算使用PHP SDK進行定期付款(計劃),PATCH調用源需要略有改變。

它是由PPHttpConnection.php中的第56行引起的,如果方法是POST,switch語句只會附加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;   
} 

補丁調用應該工作,那麼完美!

+0

感謝您的回答!這是我的實際做法,但我認爲這不是在問題的背景下發布它,無論如何標記這是最好的答案。 – 2014-09-15 05:35:15

+0

謝謝,從Paypal SDK的上下文我想更有意義:) – Chris 2014-09-15 19:09:26

0

您可以嘗試使用此代碼,它爲我工作:

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


    ?> 
+0

問題出在其他地方(不在給定的代碼中),但我會留下問題和回答,以便將來可能對某人有用。這個答案中的代碼有效。 – 2014-09-03 13:46:48

0

我知道這是有點晚了,但這個工作的郵遞員與PATCH請求(而不是POST)

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

Thanx。在我的情況下,錯誤只是錯字。確保你發送操作數組(json數組)而不是一個操作對象。 – 2017-08-21 16:40:42