bllem / speck-paypal
一个通用的模块,用于将 PayPal 支持添加到 ZF2 应用程序。
Requires
- php: >=5.4
- zendframework/zendframework: >=2.5
This package is auto-updated.
Last update: 2024-09-11 03:04:38 UTC
README
一个通用的模块,用于将 PayPal 支付支持添加到 ZF2 应用程序。
简介
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(最新主分支)
贡献者
- [Steve Rhoades] (https://github.com/SteveRhoades) (IRC: srhoades)
社区
加入 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,我们首先需要获取一个令牌。
$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 的支持