speckcommerce / speck-paypal
一个通用的模块,用于将PayPal支持添加到ZF2应用程序中。
Requires
- php: >=5.4
- zendframework/zendframework: 2.*
This package is auto-updated.
Last update: 2024-09-13 01:58:15 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(最新master版)
贡献者
- [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();
现在,您可以通过调用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物品、调查问题……以及其他缺失的支付专业API的支持