在 Omnipay 中使用 Paypal Pro

Using Paypal Pro in Omnipay

我已成功将 PayPal Express 集成到我的网站中。现在,我想使用 PayPal Pro,以便用户可以在网站上输入他们的卡号。我有我的沙盒来接受 PayPal Pro 付款,但过程似乎不同。

在 PayPal Express 中,我使用 purchase() 将用户重定向到 PayPal 进行付款。一旦他们 return 我就用 completePurchase() 实际从他们那里拿钱。

PayPal Pro 有何不同?查看 ProGateway.php 文件,没有可用的 completePurchase() 方法。看起来就在它的位置(与 ExpressGateway.php 相比是 capture.php,当我调用它时它告诉我 The transactionReference parameter is required。所以,不确定我是否应该调用

这是完整的 ProGateway.php 文件,任何人都可以告诉我我使用了哪些方法。

public function getDefaultParameters()
{
    return array(
        'username' => '',
        'password' => '',
        'signature' => '',
        'testMode' => false,
    );
}

public function getUsername()
{
    return $this->getParameter('username');
}

public function setUsername($value)
{
    return $this->setParameter('username', $value);
}

public function getPassword()
{
    return $this->getParameter('password');
}

public function setPassword($value)
{
    return $this->setParameter('password', $value);
}

public function getSignature()
{
    return $this->getParameter('signature');
}

public function setSignature($value)
{
    return $this->setParameter('signature', $value);
}

public function authorize(array $parameters = array())
{
    return $this->createRequest('\Omnipay\PayPal\Message\ProAuthorizeRequest', $parameters);
}

public function purchase(array $parameters = array())
{
    return $this->createRequest('\Omnipay\PayPal\Message\ProPurchaseRequest', $parameters);
}

public function capture(array $parameters = array())
{
    return $this->createRequest('\Omnipay\PayPal\Message\CaptureRequest', $parameters);
}

public function refund(array $parameters = array())
{
    return $this->createRequest('\Omnipay\PayPal\Message\RefundRequest', $parameters);
}

public function fetchTransaction(array $parameters = array())
{
    return $this->createRequest('\Omnipay\PayPal\Message\FetchTransactionRequest', $parameters);
}

} `

首先,我会指出我自己的 omnipay-paypal 网关分支:https://github.com/delatbabel/omnipay-paypal -- 该分支上有 2 个分支,我已将它们作为 PR 提交给主要的 phpleague 分支,但它们还没有尚未合并。您可能想看看 accept-paypal-payments 分支中的代码。

"integrate PayPal Pro" 我想你的意思是使用 REST 网关,它几乎取代了原来的 PayPal PRO API。所以你应该考虑使用 RestGateway class 而不是 ProGateway class。这是允许客户在网站上输入银行卡详细信息的最佳方式。

在 PayPal Pro(原始网关或 REST)中,您无需调用 completePurchase 来取款——调用 purchase() 即可。

还有一种方法是 authorize(),完成后您可以使用 capture()。那就是你想在某个时候获取某人的卡详细信息的地方,并在稍后(可能是订单完成时)调用 capture() 来完成销售并拿走他们的钱。在我的存储库中,我添加了更广泛的 API 注释和代码示例,以便您了解其工作原理。

同样在我的回购协议中(在 accept-paypal-payments 分支上,没有合并到主要的 omnipay 分支)你可以让人们选择通过信用卡或使用他们的 paypal 账户支付。在这种情况下,您只需不提供信用卡号或令牌,然后客户就会被重定向到 PayPal 网站,以使用他们的 PayPal 登录 ID 和密码登录以进行付款。根据 Express Gateway,您需要为 PayPal 提供回调 API 端点,以便在购买成功(或失败)后将您的客户重定向到。

我还应该指出,只有英国和美国支持在您自己的网站上接受信用卡详细信息,然后转发到 PayPal(PayPal 称为 "Direct credit card payment")。如果您不在这两个国家/地区,那么这在沙盒中可以正常工作,但在生产环境中却不行。