PayPal 被重定向到成功页面,但它没有进行货币交易(并且没有 webhook 或 IPN 通知)
Posted
技术标签:
【中文标题】PayPal 被重定向到成功页面,但它没有进行货币交易(并且没有 webhook 或 IPN 通知)【英文标题】:PayPal is redirect to success page, but it's not making the money transaction (and no webhook or IPN notification) 【发布时间】:2018-10-28 22:58:40 【问题描述】:这几天我试图解决一个贝宝问题。我正在使用 PayPal php SDK,我的环境是安装了 PHP 7.2 并运行 Laravel 5.6 的 Linux 服务器(Ubuntu 16)。
我通过 composer 安装了 paypal php sdk,并在代码中集成了“successfuly”。当我尝试运行代码时,我会返回付款链接(通常是你重定向用户的地方),所以它工作正常,第一个请求或 api 凭据没有问题。
问题是,如果您转到付款链接并且我付款,它会将付款人重定向到我网站的成功页面,但我的帐户中没有任何交易(买方和收款人)而且我没有收到任何 webhook 或 IPN 通知(也比如,用户必须花钱或用户个人资料未验证,什么都没有)。
我已经尝试过的:
打开实时 api 并尝试使用真实的贝宝配置文件,但我遇到了同样的问题。所以这不是问题。 (在 paypal sdk github 上有人在沙盒上遇到问题)。 使用 Laravel Packege(同样的问题)。这是我的代码(但我认为问题不是这个):
$_api_context = new ApiContext(new OAuthTokenCredential(
'CLIENT_ID','SECRET'));
$_api_context->setConfig(array(
'mode' => env('PAYPAL_MODE', 'sandbox'),
'log.LogEnabled' => true,
'log.FileName' => 'PayPal.log',
'log.LogLevel' => 'DEBUG'
));
$payer = new Payer();
$payer->setPaymentMethod('paypal');
$item_1 = new Item();
$item_1->setName('Item 1') /** item name **/
->setCurrency('USD')
->setQuantity(1)
->setPrice('3'); /** unit price **/
$item_list = new ItemList();
$item_list->setItems(array($item_1));
$amount = new Amount();
$amount->setCurrency('USD')
->setTotal('3');
$transaction = new Transaction();
$transaction->setAmount($amount)
->setItemList($item_list)
->setDescription('Your transaction description');
$redirect_urls = new RedirectUrls();
$redirect_urls->setReturnUrl('https://XXXXXXX.ngrok.io/success') /** Specify return URL **/
->setCancelUrl('https://XXXXX.ngrok.io/error');
$payment = new Payment();
$payment->setIntent('Sale')
->setPayer($payer)
->setRedirectUrls($redirect_urls)
->setTransactions(array($transaction));
//dd($payment);
try
$payment->create($_api_context);
catch (\PayPal\Exception\PPConnectionException $ex)
dd($ex);
foreach ($payment->getLinks() as $link)
if ($link->getRel() == 'approval_url')
$redirect_url = $link->getHref();
break;
$approvalUrl = $payment->getApprovalLink();
dd($redirect_url,$_api_context,$paypal,$paymentGateway,$approvalUrl,$payment->getId());
【问题讨论】:
【参考方案1】:我没有找到您在哪里设置发布请求发送您的服务器以保存您的交易。 像这样试试.. 代码..
<script>
paypal.Buttons(
createOrder: function(data, actions)
return actions.order.create(
purchase_units: [
amount:
value: '$form_data->net_amount'
]
);
,
onApprove: function(data, actions)
console.log('data');
console.log(data);
return actions.order.capture().then(function(details)
console.log(details);
alert('Transaction completed by ' + details.payer.name.given_name);
// Call your server to save the transaction
return fetch('/paypal-transaction-complete',
method: 'post',
headers:
'content-type': 'application/json'
,
body: JSON.stringify(
orderID: data.orderID,
userDetail: details,
bookingId: '$form_data->id',
_token: 'csrf_token()'
)
).then(function()
location.reload();
);
);
).render('#paypal-button-container');
</script>
【讨论】:
【参考方案2】:对于遇到同样问题的任何人,您应该在用户被重定向到您的成功页面后执行付款。
【讨论】:
【参考方案3】:更新
我尝试从沙盒账户(个人)向拥有 api 的企业账户汇款,并且 ipn 工作正常。
【讨论】:
以上是关于PayPal 被重定向到成功页面,但它没有进行货币交易(并且没有 webhook 或 IPN 通知)的主要内容,如果未能解决你的问题,请参考以下文章
PayPal Checkout JavaScript:更改货币而不重定向或刷新页面
自定义 PayPal 捐赠按钮以将信息传递到 PayPal 页面