bllem/speck-paypal

一个通用的模块,用于将 PayPal 支持添加到 ZF2 应用程序。

dev-master 2018-12-03 16:09 UTC

This package is auto-updated.

Last update: 2024-09-11 03:04:38 UTC


README

一个通用的模块,用于将 PayPal 支付支持添加到 ZF2 应用程序。

Build Status

简介

SpeckPaypal 是一个模块,可以用于 Speck Commerce 之外,通过 PayPal 接受支付。此模块目前支持 PayPal Payments Pro 和 Express Checkout API 操作。

请参阅: Paypal API 文档

要集成此模块,您需要在 PayPal 上注册一个沙盒账户。请参阅开发者网站以获取说明。

此模块目前支持 API 版本 95.0 下的以下调用

  • 回调
  • 授权
  • 捕获
  • 直接支付
  • Express Checkout 支付
  • 取消
  • 获取余额
  • 获取 Express Checkout 详细信息
  • 获取交易详情
  • 退款交易
  • 设置 Express Checkout
  • 交易搜索
  • 更新周期性付款配置文件
  • 管理周期性付款配置文件状态
  • 创建周期性付款配置文件

需求

SpeckCommerce 的依赖项被设置为 Git 子模块,因此您应该不会遇到问题

  • PHP 5.4+(注意:此库应与 PHP 5.3.3+ 兼容,但不再提供官方支持)
  • Zend Framework 2(最新主分支)

贡献者

社区

加入 Freenode IRC 网络上的我们:#speckcommerce。我们目前人数不多,但我们是一个致力于此项目的全职小团队。

示例用法

创建 PayPal 请求对象

//setup config object
$config = array(
    'username'      => 'your_username',
    'password'      => 'your_password',
    'signature'     => 'your_signature',
    'endpoint'      => 'https://api-3t.sandbox.paypal.com/nvp' //this is sandbox endpoint
)
$paypalConfig = new \SpeckPaypal\Element\Config($config);

//set up http client
$client = new \Zend\Http\Client;
$client->setMethod('POST');
$client->setAdapter(new \Zend\Http\Client\Adapter\Curl);
$paypalRequest = new \SpeckPaypal\Service\Request;
$paypalRequest->setClient($client);
$paypalRequest->setConfig($paypalConfig);

直接支付示例(默认情况下,请求以“销售”发送,相当于授权捕获)

$paymentDetails = new \SpeckPaypal\Element\PaymentDetails(array(
    'amt' => '10.00'
));

$payment = new \SpeckPaypal\Request\DoDirectPayment(array('paymentDetails' => $paymentDetails));
$payment->setCardNumber('4744151425799438');
$payment->setExpirationDate('112017');
$payment->setFirstName('John');
$payment->setLastName('Canyon');
$payment->setIpAddress('255.255.255.255');
$payment->setCreditCardType('Visa');
$payment->setCvv2('345');

$address = new \SpeckPaypal\Element\Address;
$address->setStreet('27 Your Street');
$address->setStreet2('Apt 23');
$address->setCity('Some City');
$address->setState('California');
$address->setZip('92677');
$address->setCountryCode('US');
$payment->setAddress($address);

$response = $paypalRequest->send($payment);

echo $response->getTransactionId();

Express Checkout 示例

在使用此 API 之前,了解 PayPal 的 Express Checkout 流程很重要。Paypal Express Checkout Flow

为了将用户重定向到 PayPal,我们首先需要获取一个令牌。

$paymentDetails = new \SpeckPaypal\Element\PaymentDetails(array(
    'amt' => '20.00'
));
$express = new \SpeckPaypal\Request\SetExpressCheckout(array('paymentDetails' => $paymentDetails));
$express->setReturnUrl('http://www.someurl.com/return');
$express->setCancelUrl('http://www.someurl.com/cancel');

$response = $paypalRequest->send($express);

echo $response->isSuccess();

$token = $response->getToken();

一旦您收到令牌,请将用户重定向到 PayPal 服务器,包括您收到的令牌。请参阅文档中的 URL。一旦用户在 PayPal 完成结账流程,他们将被重定向到您在 SetExpressCheckout 中提供的 URL。当用户到达此页面时,您需要向 PayPal 发送回调,包括令牌以接收买家的付款详情。您将使用响应中包含的 payerId 通过 DoExpressCheckoutPayment 捕获付款。

$details = new \SpeckPaypal\Request\GetExpressCheckoutDetails(array('token' => $token));

$response = $paypalRequest->send($details);

$payerId = $response->getPayerId();

现在您已经获得了 payerId,您可以通过调用 DoExpressCheckoutPayment 来捕获付款。

//To capture express payment
$captureExpress = new \SpeckPaypal\Request\DoExpressCheckoutPayment(array(
    'token'             => $token,
    'payerId'           => $payerId,
    'paymentDetails'    => $paymentDetails
));
$response = $paypalRequest->send($captureExpress);

echo $response->isSuccess();

交易搜索示例

$transactionSearch new \SpeckPaypal\Request\TransactionSearch();
$transactionSearch->setStartDate('2014-06-21T00:00:00Z');

$paypalRequest = $serviceManager->get('SpeckPaypal\Service\Request');
$response = $paypalRequest->send($transactionSearch);

var_dump($response->getResults());

待办事项

  • 基于 PayPal 要求进行更好的验证(目前验证较为宽松)
  • 重构到相关的异常类
  • 添加对 eBay 商品、调查问题等和其他缺失的 Payments Pro API 的支持