我需要接受来自Laravel-4应用程序的PayPal Express付款,因此我正在尝试确定Omnipay是否是最佳解决方案。症结在于它似乎没有实现GetExpressCheckoutDetails,因此无法访问购买者的联系方式。我看到了关于这个问题的讨论:
omnipay paypal express不返回地址
在ci商户库codeigniter中接收更多响应数据
然而,两者都没有给出明确的解决方案。如果我使用Omnipay,我是否还必须安装PayPal的经典API(在这种情况下,为什么要使用Omnipay),或者我可以在Omnipay中实现GetExpressCheckoutDetails,如果是,如何实现?
提前感谢您在这方面的帮助。
根据kei的回答,我建议在应用程序中添加以下内容:
>
app/omniPay/Paypal/Message/
创建新文件app/omniPay/Paypal/ExtendedExpressGateway.php
namespace App\Omnipay\PayPal;
use Omnipay\PayPal\ExpressGateway;
/**
* PayPal Express extended Class
*/
class ExtendedExpressGateway extends ExpressGateway
{
public function getName()
{
return 'PayPal Express extended';
}
public function fetchExpressCheckoutDetail(array $parameters = array())
{
return $this->createRequest('\\App\\Omnipay\\PayPal\\Message\\FetchExpressCheckoutRequest', $parameters);
}
}
创建新文件app/omniPay/Paypal/Message/FetchExpressCheckoutRequest.php
namespace App\Omnipay\PayPal\Message;
use Omnipay\PayPal\Message\AbstractRequest;
class FetchExpressCheckoutRequest extends AbstractRequest
{
public function getData()
{
$data = $this->getBaseData('GetExpressCheckoutDetails');
$this->validate('transactionReference');
$data['TOKEN'] = $this->getTransactionReference();
$url = $this->getEndpoint() . "?USER={$data['USER']}&PWD={$data['PWD']}&SIGNATURE={$data['SIGNATURE']}&METHOD=GetExpressCheckoutDetails&VERSION={$data['VERSION']}&TOKEN={$data['TOKEN']}";
parse_str(file_get_contents($url), $output);
$data = array_merge($data, $output);
return $data;
}
}
添加到composer中的psr-4
autoload
。json
"autoload": {
"classmap": [
...
],
"psr-4": {
"App\\Omnipay\\PayPal\\": "app/omnipay/paypal/"
}
},
运行:
php artisan dump-autoload
现在进入app/config/packages/ignited/laravel omnipay/config。php
您可以编写:
'driver' => '\\App\\Omnipay\\PayPal\\ExtendedExpressGateway',
现在你什么时候更新就不会有问题了
Omnipay还不支持GetExpressCheckoutDetails。当前有一个为此打开的拉取请求。
不过,它确实实现了GetTransactionDetails,您可能会发现它很有用,因为它可以返回关于现有事务的大部分信息。
omnipay\paypal\ProGateway。php
添加新函数
public function fetchExpressCheckoutDetail(array $parameters = array())
{
return $this->createRequest('\Omnipay\PayPal\Message\FetchExpressCheckoutRequest', $parameters);
}
omnipay\paypal\src\Message
addnewfileFetchExpressCheckoutRequest。php
namespace Omnipay\PayPal\Message;
class FetchExpressCheckoutRequest extends AbstractRequest
{
public function getData()
{
$data = $this->getBaseData('GetExpressCheckoutDetails');
$this->validate('transactionReference');
$data['TOKEN'] = $this->getTransactionReference();
$url = $this->getEndpoint()."?USER={$data['USER']}&PWD={$data['PWD']}&SIGNATURE={$data['SIGNATURE']}&METHOD=GetExpressCheckoutDetails&VERSION={$data['VERSION']}&TOKEN={$data['TOKEN']}";
parse_str (file_get_contents( $url ),$output);
$data = array_merge($data,$output);
return $data;
}
}
使用方法:
$response = $gateway->completePurchase($params)->send();
$data = $response->getData();
$gateway->fetchExpressCheckoutDetail(array('transactionReference'=>$data['TOKEN']))->getData();
这不是最好的。但它是有效的
我有一个电子商务网站,可以重定向到使用Omnipay的Paypal express结账。它将正确地将用户重定向到Paypal,并返回一条成功的消息,其中包含PayRid和所有内容。然而,它实际上并不接受任何付款,也不会像任何付款一样出现在我们的paypal帐户上。我不确定这是paypal的问题还是Omnipay的配置问题。我可以想象Paypal会处理这一部分,但因为它不起作用(在我们的旧网站上,它
是否可以使用此信用卡ID进行交易?有人帮忙吗?
我现在正在尝试使用这里描述的客户端REST集成来加快PayPal Express结账(即Checkout.js)的速度。我看到,当付款完成时,我的onAuthorize函数将用“payment”对象调用。 我找不到任何关于这个对象的文档,但一些戳它揭示了以下属性(至少在今天): PaymentToken 付款ID 付款 意图 返回 现在我需要将用户重定向到我网站上的下一个步骤,在那里我展示了一张确
我正在Laravel4上使用lib PayPal PHP SDK 我对显示订单细节有意见。我按照贝宝网络结账的步骤操作,它没有向我显示订单细节。 这是当我得到支付链接的方法:
我试图从过去的贝宝交易中检索捕获请求令牌,因为我需要退款客户。我们的系统上已经没有这些信息了,因为,甚至不问。它看起来像这样: 有可能得到那个吗? 我在这里查看了PayPal的事务搜索API,响应中没有任何内容表明该字段存在:https://developer.paypal.com/docs/API/transaction-search/v1/ 我也检查了贝宝的内置报告,但他们也没有给我们。 此外
我最近按照这个教程为我正在创建的一个小网店创建了自己的购物车。现在大约有4个小时的时间,我正在搜索将nice集成到laravel中并且易于在Laravel5.3中实现和使用的东西。 什么都找不到...