【问题标题】:Using Paypal Pro in Omnipay在 Omnipay 中使用 Paypal Pro
【发布时间】:2015-03-28 21:30:33
【问题描述】:

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

在 PayPal Express 中,我使用 purchase() 将用户重定向到 PayPal 以进行付款。他们回来后,我使用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);
}

} `

【问题讨论】:

    标签: php paypal


    【解决方案1】:

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

    “集成 PayPal Pro”我认为您的意思是使用 REST 网关,它几乎取代了原始的 PayPal PRO API。因此,您应该考虑使用 RestGateway 类而不是 ProGateway 类。这是让客户在网站上输入信用卡详细信息的最佳方式。

    在 PayPal Pro(原始网关或 REST)中,您不需要调用 completePurchase 来收取他们的钱——purchase() 调用会做到这一点。

    还有一个额外的方法是 authorize(),然后你可以使用 capture()。这就是您想在某个时候获取某人的卡详细信息的地方,然后在稍后(可能在订单完成时)调用 capture() 以完成销售并拿走他们的钱。在我的 repo 中,我添加了更广泛的 API cmets 和代码示例,以便您了解它是如何工作的。

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

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

    【讨论】:

    • 首先,感谢您的详细解释。其次,是的,我在美国,所以一切都应该没问题。根据您的说法,我应该使用 REST 而不仅仅是 PayPal Pro?所以,如果我确实使用 REST,我必须调用的方法是 authorize()、capture() 和 purchase()?我唯一的想法是使用 Express purchase() 实际上并不需要钱,但 completePurchase() 可以吗?我想这就是我的困惑所在。因为我的 Express 工作得很好,所以我只想提供现场选项。
    • 是的,您应该使用 REST 而不是 pro。您只需要在授权后捕获,而不是在购买后。购买快递不收钱是对的,而REST是收钱的。
    • 如果你查看提到我的仓库分支的分支,你会看到一些授权和购买的代码示例。
    • 好的,听起来不错。现在,在 Paypal 本身中,我是否只使用虚拟终端业务类型?
    • 嗯,不确定。我认为我在 api 文档中介绍了设置其余 api 键,但我没有探索使用虚拟终端类型
    猜你喜欢
    • 2015-02-13
    • 2019-01-04
    • 2015-04-01
    • 2014-11-01
    • 2017-03-25
    • 2014-03-29
    • 2017-05-26
    • 2016-05-23
    • 2016-05-23
    相关资源
    最近更新 更多