Omnipay:贝宝 REST API 集成

Posted

技术标签:

【中文标题】Omnipay:贝宝 REST API 集成【英文标题】:Omnipay: PayPal REST API Integration 【发布时间】:2014-03-28 06:26:57 【问题描述】:

由于我尝试直接使用 PayPal REST API 失败了,我正在尝试查看 Omnipay 是否是一种选择……有没有办法将 REST API 与 Omnipay 一起使用?到目前为止,我见过的唯一集成需要 usernamepassword,而不是 client idclient secret

$gateway = Omnipay::create('PayPal_Express');
$gateway->setUsername('XXXXX');
$gateway->setPassword('XXXX');
$gateway->setSignature('XXXXX');


$response = $gateway->completePurchase(
    array(
        'cancelUrl' => 'www.xyz.com/cancelurl',
        'returnUrl' => 'www.xyz.com/returnurl', 
        'amount' => '25.00',
        'currency' => 'CAD'
    )
)->send();

【问题讨论】:

你有解决方案吗? PayPal提供的测试签名不起作用,你遇到过吗? 【参考方案1】:

对于发现这篇文章的其他人,我们支持 REST API。

摘自源代码完整文档中的RestGateway.php

两种环境都支持 PayPal REST API。使用沙盒环境 出于测试目的,然后转移到实际环境进行生产处理。 测试时,使用您的测试凭据生成访问令牌以进行调用 沙盒 URI。当您准备上线时,请使用分配给的实时凭据 您的应用会生成新的访问令牌以与实时 URI 一起使用。

提交 https://github.com/thephpleague/omnipay-paypal/pull/21

// Create a gateway for the PayPal RestGateway
// (routes to GatewayFactory::create)
$gateway = Omnipay::create('RestGateway');

// Initialise the gateway
$gateway->initialize(array(
    'clientId' => 'MyPayPalClientId',
    'secret'   => 'MyPayPalSecret',
   'testMode' => true, // Or false when you are ready for live transactions
));

// Create a credit card object
// DO NOT USE THESE CARD VALUES -- substitute your own
// see the documentation in the class header.
$card = new CreditCard(array(
           'firstName' => 'Example',
           'lastName' => 'User',
           'number' => '4111111111111111',
           'expiryMonth'           => '01',
           'expiryYear'            => '2020',
           'cvv'                   => '123',
           'billingAddress1'       => '1 Scrubby Creek Road',
           'billingCountry'        => 'AU',
           'billingCity'           => 'Scrubby Creek',
           'billingPostcode'       => '4999',
           'billingState'          => 'QLD',
));

// Do an authorisation transaction on the gateway
$transaction = $gateway->authorize(array(
   'amount'        => '10.00',
   'currency'      => 'AUD',
   'description'   => 'This is a test authorize transaction.',
   'card'          => $card,
));
$response = $transaction->send();
if ($response->isSuccessful()) 
   echo "Authorize transaction was successful!\n";
   // Find the authorization ID
   $auth_id = $response->getTransactionReference();

来自 RestAuthorizeRequest.php

【讨论】:

【参考方案2】:

不,Omnipay 还不支持 REST API。

也就是说,Omnipay 抽象了各种 API 之间的差异,因此您使用哪个 API 并不重要。您在上面发布的代码应该可以在 PayPal Express Checkout 中正常工作,因此只需确保您使用了正确的 API 密钥,一切都会变得简单。

【讨论】:

【参考方案3】:

REST API 在 PayPal 中仍然很新,而且还不够完整。还没有很多 3rd 方框架实现它。

看起来您正在使用 PHP 并尝试实现 Express Checkout..??如果是这样,我建议看看我的class library for PayPal。您可以在几分钟内完成。

它也使用 API 用户名、密码和签名。您可以从 API 访问部分下的 PayPal 帐户配置文件中获取这些凭据。

我的库附带了功能强大且易于遵循的 Express Checkout 示例,然后您可以从空模板开始设置自己的模板,只需填写您需要的任何参数。

【讨论】:

以上是关于Omnipay:贝宝 REST API 集成的主要内容,如果未能解决你的问题,请参考以下文章

Omnipay 贝宝集成 - 确认付款状态

Omnipay 贝宝与 laravel 4 的集成

贝宝 REST API 403 错误

贝宝 REST API 交易已获批准

贝宝订阅 API 集成

贝宝集成 - 自适应支付 API