访问时得到Http响应代码400https://api.sandbox.paypal.com/v1/notificati



我已经搜索了几个小时了,希望这里有人能帮忙。我使用PayPal PHP SDK在Laravel和PayPal订阅上建立了一个基于订阅的网站。一切都很完美,除了以下方面:我创建了一个webhook,当用户取消自己的付款时使用。我得到这个错误:

Got Http response code 400 when accessing https://api.sandbox.paypal.com/v1/notifications/verify-webhook-signature.{"name":"VALIDATION_ERROR","message":"Invalid data provided","debug_id":"7225cebfec35a","information_link":"https://developer.paypal.com/docs/api/webhooks/#errors","details":[{"field":"webhook_id","location":"body","issue":"Required field cannot be blank"}],"links":[]}  

这是我的代码:

public function webhook()
{

/**
* Receive the entire body that you received from PayPal webhook.
*/
$bodyReceived = file_get_contents('php://input'); 
// Receive HTTP headers that you received from PayPal webhook.
$headers = getallheaders(); 
/**
* Uppercase all the headers for consistency
*/
$headers = array_change_key_case($headers, CASE_UPPER); 
$signatureVerification = new PayPalApiVerifyWebhookSignature(); 
$signatureVerification->setWebhookId(env('PAYPAL_WEBHOOK_ID')); 
$signatureVerification->setAuthAlgo($headers['PAYPAL-AUTH-ALGO']); 
$signatureVerification->setTransmissionId($headers['PAYPAL-TRANSMISSION-ID']); 
$signatureVerification->setCertUrl($headers['PAYPAL-CERT-URL']); 
$signatureVerification->setTransmissionSig($headers['PAYPAL-TRANSMISSION-SIG']); 
$signatureVerification->setTransmissionTime($headers['PAYPAL-TRANSMISSION-TIME']); 
$webhookEvent = new PayPalApiWebhookEvent(); 
$webhookEvent->fromJson($bodyReceived); 
$signatureVerification->setWebhookEvent($webhookEvent); 
$request = clone $signatureVerification; 
try {
$output = $signatureVerification->post($this->apiContext);

} catch(Exception $ex) {
//This is where it fails
print_r($ex->getMessage());
exit(1);
}
$verificationStatus = $output->getVerificationStatus();
$responseArray = json_decode($request->toJSON(), true);
$event = $responseArray['webhook_event']['event_type'];
if ($verificationStatus == 'SUCCESS')
{ 
switch($event)
{
case 'BILLING.SUBSCRIPTION.CANCELLED':
case 'BILLING.SUBSCRIPTION.SUSPENDED':
case 'BILLING.SUBSCRIPTION.EXPIRED':
case 'BILLING_AGREEMENTS.AGREEMENT.CANCELLED':
// $user = User::where('payer_id',$responseArray['webhook_event']['resource']['payer']['payer_info']['payer_id'])->first();
$this->updateStatus($responseArray['webhook_event']['resource']['payer']['payer_info']['payer_id'], 0,1);

break;
}
}
echo $verificationStatus;

exit(0);
}

这是$this->apiContext:

trait PayPalApiCredentialsTrait {
private $apiContext;
public function setCredentials()
{
$this->apiContext = new PayPalRestApiContext(
new PayPalAuthOAuthTokenCredential(
env('PAYPAL_CLIENT_ID'),     // ClientID
env('PAYPAL_CLIENT_SECRET')      // ClientSecret
)
);
$this->apiContext->setConfig(
array(
'mode' => env("PAYPAL_MODE"),
'log.LogEnabled' => true,
'log.FileName' => '../PayPal.log',
'log.LogLevel' => 'INFO', // PLEASE USE `INFO` LEVEL FOR LOGGING IN LIVE ENVIRONMENTS
)
);
}

}

这是我从paypal.log中得到的错误:

[01-09-2020 15:54:18] PayPalCorePayPalHttpConnection : INFO: POST https://api.sandbox.paypal.com/v1/oauth2/token
[01-09-2020 15:54:18] PayPalCorePayPalHttpConnection : INFO: Response Status  : 200
[01-09-2020 15:54:18] PayPalCorePayPalHttpConnection : INFO: POST https://api.sandbox.paypal.com/v1/notifications/verify-webhook-signature
[01-09-2020 15:54:19] PayPalCorePayPalHttpConnection : INFO: Response Status  : 400
[01-09-2020 15:54:19] PayPalCorePayPalHttpConnection : ERROR: Got Http response code 400 when accessing https://api.sandbox.paypal.com/v1/notifications/verify-webhook-signature. {"name":"VALIDATION_ERROR","message":"Invalid data provided","debug_id":"26b12ee43cddd","information_link":"https://developer.paypal.com/docs/api/webhooks/#errors","details":[{"field":"webhook_id","location":"body","issue":"Required field cannot be blank"}],"links":[]}

我必须指出,其他一切都很好。创建计划、协议、取消两者、显示活动计划等等。。。一切顺利。这是我唯一不能解决的问题。如果有人能帮我解决这个问题,我真的很感激。非常感谢。

PayPal PHP SDK已弃用,不再维护;它不应用于新的集成。它对帐单计划和订阅的实现是旧的,并且与订阅API的当前版本不兼容。

取而代之的是,订阅和验证webhook应该使用直接HTTPS集成(无SDK(。

(对于一次性支付用例,有一个新的v2 Checkout PHP SDKhttps://developer.paypal.com/docs/api/rest-sdks/(

相关内容

最新更新