我目前正在沙盒环境中通过 REST API 设置PayPal订阅。 我能够添加产品,添加计划,还可以使用API添加订阅。 但是在付款页面(PayPal端),它要求单击订阅,发生错误。
页面上发生错误:https://www.sandbox.paypal.com/webapps/billing/subscriptions?ba_token=BA-0T473376T5204322K,当我点击Login to subscribe
按钮时。
错误页面图像
当我检查控制台时,这是它在页面上触发的响应:
请求网址: https://www.sandbox.paypal.com/webapps/billing/api/billagmt/BA-0T473376T5204322K/createCart
标头Request Method: POST
Status Code: 400 Bad Request
响应{"ack":"contingency","contingency":"VALIDATION_ERROR","meta":{"calc":"...some string...","rlog":"...some string.."},"server":"...some string..."}
我无法进行任何类型的调试,因为它发生在PayPal页面上。 请帮助我找出我身边是否出了什么问题(即API)?
我的代码
API 调用 ( 添加订阅 )
$request = json_encode($req);
$header = [ 'Content-Type: application/json', 'Authorization: Bearer '.$this->getOauthToken() ];
$method = 'POST';
$url = $this->paypal_url.'billing/subscriptions';
$response = json_decode($this->callAPI($header, $method, $request, $url));
助手
// Call API
private function callAPI($header, $method, $request, $url)
{
$curl = curl_init();
switch ($method) {
case "POST":
curl_setopt($curl, CURLOPT_POST, 1);
if ($request)
curl_setopt($curl, CURLOPT_POSTFIELDS, $request);
break;
case "PUT":
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "PUT");
if ($request)
curl_setopt($curl, CURLOPT_POSTFIELDS, $request);
break;
default:
if ($request)
$url = sprintf("%s?%s", $url, http_build_query($request));
}
// OPTIONS:
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
// EXECUTE:
$result = curl_exec($curl);
if(!$result){ die("Connection Failure"); }
curl_close($curl);
return $result;
}
// Fetch Oauth Token
private function getOauthToken()
{
$url = $this->paypal_url.'oauth2/token';
$header = [
"Content-Type: application/x-www-form-urlencoded",
"Authorization: Basic " . base64_encode($this->client_id.':'.$this->client_secret)
];
$curl = curl_init();
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, 'grant_type=client_credentials');
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($curl);
if(!$result) { die("Connection Failure"); }
curl_close($curl);
$response = json_decode($result);
return $response->access_token;
}
它给了我 HATEOAS 链接,例如:https://www.sandbox.paypal.com/webapps/billing/subscriptions?ba_token=BA-0T473376T5204322K,错误发生的地方。
此外,根据 API 要求,我的数据是完整的。 因为我已经修改了有关数据不兼容的所有可能错误。
如果是关于问题的完整描述,那么请尝试帮助我,而不仅仅是触发保留,而是找出问题。
我们也有类似的问题。一些订阅付款正在进行,而另一些则没有。表单有效负载看起来相同。
当它返回错误时,我们意识到订阅付款重复次数的值(srt
)设置为1。文档指出,最小值应为 2,最大值为 52。