【发布时间】:2019-12-18 21:11:17
【问题描述】:
我目前正在沙盒环境中通过 REST API 设置 PayPal 订阅。 我能够添加产品、添加计划以及使用 API 添加订阅。 但是在支付页面(在 PayPal 端),它要求点击订阅,出现错误。
当我点击Login to subscribe 按钮时,页面出现错误:https://www.sandbox.paypal.com/webapps/billing/subscriptions?ba_token=BA-0T473376T5204322K。
当我检查控制台时,这是它在页面上触发的响应:
请求网址: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 要求,我的数据也是完整的。 因为我已经修改了有关数据不兼容的所有可能错误。
如果是关于问题的完整描述,那么请尝试帮助我,而不是仅仅触发保持,而是找出问题。
【问题讨论】:
-
如果您需要任何其他详细信息,请询问以解决问题。
-
我完全不能接受有人尽管详细地描述了我的问题却只是触发了持有。
-
您好,您收到此问题是由于 paln 或订阅创建中的一些问题,要解决此问题,只需从 Paypal API 文档中获取 JSON 有效负载,并将您的数据一一放入,这样您就可以了解发生了什么,
-
@SudhanshShekharDubey 我同意harish 的评论。请检查您的订阅有效负载。使用这个 -> { "plan_id": "", "shipping_amount": { "currency_code": "GBP", "value": "0.00" }, "application_context": { "brand_name": "Peerz Tutor", "locale “:“en-US”,“shipping_preference”:“SET_PROVIDED_ADDRESS”,“user_action”:“SUBSCRIBE_NOW”,“payment_method”:{“payer_selected”:“PAYPAL”,“payee_preferred”:“IMMEDIATE_PAYMENT_REQUIRED”},“return_url”: "", "cancel_url": "" } }
-
感谢 manish 和 harish ,我修改了有效载荷数据并且它工作了。
标签: php paypal-sandbox paypal-subscriptions