我的paypal流程接收webhook通知有什么问题?

时间:2014-10-28 18:14:05

标签: paypal

所以这就是我到目前为止所做的事情,它不起作用,我将不胜感激任何帮助:

我的目标是回发我的paypal沙盒帐户中发生的任何webhook事件。

所以我有2个帐号, 一个属于钱的接收者,称之为"促进者", 一个属于"买家",

现在在我的帐户中,有一个Sandbox webhooks配置,所以我输入以下内容: https://csdieuqkzo.localtunnel.me

不言而喻,这来自localtunnel.me

所以在我的项目中,我使用api进行简单的销售......这是完整的创建销售流程:

$payer = new Payer();
 $payer->setPayment_method('paypal');

 //dd($payer);
 $item = new Item();

 $item->setQuantity('1');
 $item->setName('benny');
 $item->setPrice('7.41');
 $item->setCurrency('USD');
 $item->setSku('blah');
 // //var_dump($item);

 $items = new ItemList();
 $items->addItem($item);
 //var_dump($items);

$amountDetails = new Details();
$amountDetails->setSubtotal('7.41');
$amountDetails->setTax('0.03');
$amountDetails->setShipping('0.03');

$amount = new Amount();
$amount->setCurrency('USD');
$amount->setTotal('7.47');
$amount->setDetails($amountDetails);

$transaction = new Transaction();
$transaction->setAmount($amount);
$transaction->setDescription('This is the payment transaction description.');
$transaction->setItemList($items);

// echo '<pre>';
// print_r($transaction);


$RedirectUrls = new RedirectUrls();
$RedirectUrls ->setReturnUrl('https://csdieuqkzo.localtunnel.me/#/pricing');
$RedirectUrls ->setCancelUrl('https://csdieuqkzo.localtunnel.me/#/');

$payment = new Payment();
$payment->setIntent('sale');
$payment->setPayer($payer);
$payment->setTransactions(array($transaction));
$payment->setRedirectUrls($RedirectUrls);

// echo '<pre>';
// print_r($payment);
// dd();
$response = $payment->create($this->apiContext)->toarray();

Session::put('pay_id',$response['id']);

return Response::json($response);

此后有一个重定向到paypal,批准,当它回到我的网站时,它会执行以下操作:

  $payerId =  Input::get('payerId');

$payment = Payment::get(Session::get('pay_id'), $this->apiContext);

//return $payerId;

 $paymentExecution = new PaymentExecution();
 $paymentExecution->setPayer_id($payerId);

 $approval = $payment->execute($paymentExecution, $this->apiContext)->toarray();

 return Response::json($approval);

然后有一个对象进来说这个交易的状态是批准的,超级,但我没有看到我之前定义的webhook网址的任何帖子......现在我是如何测试它的?

我写了一个简单的脚本到我的root的post方法(在laravel中):

Route::post('/',function(){
    $myfile = fopen("bennyfile.txt", "a") or die("Unable to open file!");
     $txt = "\nouterequested";
     fwrite($myfile, $txt);
     fclose($myfile);
});

表示发布请求何时到达以下网址(在我的情况下,发布到以下网址的帖子:https://csdieuqkzo.localtunnel.me

我只想添加一行,就是它......但它没有更新任何内容!... 例如,如果我从邮递员到同一个地方的邮寄请求,一切都很好,但是当批准销售或任何其他行动时,一切都没有发生。

为什么?

2 个答案:

答案 0 :(得分:1)

这是一个paypal文档,可以帮助您了解webhook的工作原理。

https://developer.paypal.com/docs/integration/direct/rest-webhooks-overview/

webhooks是http回调机制,理想情况下,您需要一个有效的URL作为您的webhooks端点来测试PayPal发布的webhooks通知消息。如果你使用paypal钱包进行销售,你应该在你的端点以JSON格式获得PayPal的webhooks通知消息。 webhooks还没有支持直接信用卡的情况。

如果要在本地测试监听器脚本,可以使用postman工具将示例消息发布到本地URL并进行测试。

答案 1 :(得分:0)

使用“localhost”是行不通的,因为当PayPal的服务器点击该地址时,他们只是在点击自己。您需要设置DNS以将域指向本地计算机上的虚拟服务器,以便您可以使用完全限定的域名而不是localhost。