我正在尝试激活之前创建的结算方案,但我收到格式错误的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": "\/",
但无济于事。
答案 0 :(得分:1)
很抱歉,如果这个答案有点晚,但我最近遇到了同样的问题,并且认为我可以为其他可能遇到此问题的人分享解决方案。
如果您计划使用PHP SDK进行定期付款(计划),则PATCH调用源需求会稍微改变。
由PPHttpConnection.php中的第56行引起,如果方法是POST,则switch语句仅附加post字段。但是,PATCH请求也会发送有效负载,因此也需要添加帖子字段,如果没有它们,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调用应该可以正常工作!
答案 1 :(得分: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;
?>
答案 2 :(得分:0)
我知道它有点晚了,但这对邮递员提出了PATCH请求(而不是POST)
[
{
"path": "/",
"value": {
"state": "ACTIVE"
},
"op": "replace"
}
]