WYSOW / postfinance
本包的最新版本(3.2.0)没有可用的许可证信息。
3.2.0
2019-11-12 08:42 UTC
Requires
- php: >=5.3
Requires (Dev)
- guzzle/guzzle: @stable
- phpunit/phpunit: @stable
- symfony/class-loader: @stable
README
这个库允许您轻松地将PostFinance集成到您的项目中。它提供了完成与PostFinance平台正确支付流程所需的组件。
需求
- PHP 5.3+
- 您的Web服务器与PostFinance平台之间的网络连接
一如既往,这是一项正在进行中的工作。请随意分支此项目,并提交您的拉取请求!
安装
该库符合PSR-4规范,最简单的安装方法是使用composer
composer require wysow/postfinance
概述
- 创建一个包含PostFinance所需所有信息的EcommercePaymentRequest或CreateAliasRequest。
- 生成一个表单
- 将其提交给PostFinance(客户端)
- 从PostFinance接收支付响应(HTTP请求)
EcommercePaymentRequest、CreateAliasRequest和PaymentResponse都通过比较SHA签名(参数的散列和秘密密码)进行认证。您可以使用ShaComposer创建散列。
该库还允许
- 使用DirectLinkQueryRequest通过PostFinance API获取订单信息
- 使用DirectLinkMaintenanceRequest通过PostFinance API执行维护请求
SHA Composers
PostFinance提供了两种生成SHA签名的方法
<?php use PostFinance\ShaComposer\LegacyShaComposer; $shaComposer = new LegacyShaComposer($passphrase);
<?php use PostFinance\ShaComposer\AllParametersShaComposer; $shaComposer = new AllParametersShaComposer($passphrase);
此库目前支持传统的“仅主参数”方法和新的“每个参数后跟密码短语”方法。两种方法都可以使用SHA-1(默认)、SHA-256或SHA-512加密。
EcommercePaymentRequest和FormGenerator
<?php use PostFinance\Passphrase; use PostFinance\Ecommerce\EcommercePaymentRequest; use PostFinance\ShaComposer\AllParametersShaComposer; use PostFinance\FormGenerator\SimpleFormGenerator; $passphrase = new Passphrase('my-sha-in-passphrase-defined-in-postfinance-interface'); $shaComposer = new AllParametersShaComposer($passphrase); $shaComposer->addParameterFilter(new ShaInParameterFilter); //optional $ecommercePaymentRequest = new EcommercePaymentRequest($shaComposer); // Optionally set PostFinance uri, defaults to TEST account //$ecommercePaymentRequest->setPostFinanceUri(EcommercePaymentRequest::PRODUCTION); // Set various params: $ecommercePaymentRequest->setOrderid('123456'); $ecommercePaymentRequest->setAmount(150); // in cents $ecommercePaymentRequest->setCurrency('EUR'); // ... $ecommercePaymentRequest->validate(); $formGenerator = new SimpleFormGenerator; $html = $formGenerator->render($ecommercePaymentRequest); // Or use your own generator. Or pass $ecommercePaymentRequest to a view
CreateAliasRequest
<?php use PostFinance\Passphrase; use PostFinance\DirectLink\CreateAliasRequest; use PostFinance\ShaComposer\AllParametersShaComposer; use PostFinance\DirectLink\Alias; $passphrase = new Passphrase('my-sha-in-passphrase-defined-in-postfinance-interface'); $shaComposer = new AllParametersShaComposer($passphrase); $shaComposer->addParameterFilter(new ShaInParameterFilter); //optional $createAliasRequest = new CreateAliasRequest($shaComposer); // Optionally set PostFinance uri, defaults to TEST account // $createAliasRequest->setPostFinanceUri(CreateAliasRequest::PRODUCTION); // set required params $createAliasRequest->setPspid('123456'); $createAliasRequest->setAccepturl('http://example.com/accept'); $createAliasRequest->setExceptionurl('http://example.com/exception'); // set optional alias, if empty, PostFinance creates one $alias = new Alias('customer_123'); $createAliasRequest->setAlias($alias); $createAliasRequest->validate(); // Now pass $createAliasRequest to a view to build a custom form, you have access to // $createAliasRequest->getPostFinanceUri(), $createAliasRequest->getParameters() and $createAliasRequest->getShaSign() // Be sure to add the required fields CN (Card holder's name), CARDNO (Card/account number), ED (Expiry date (MMYY)), CVC (Card Verification Code) // and the SHASIGN
DirectLinkPaymentRequest
<?php use PostFinance\DirectLink\DirectLinkPaymentRequest; use PostFinance\Passphrase; use PostFinance\ShaComposer\AllParametersShaComposer; use PostFinance\DirectLink\Alias; $passphrase = new Passphrase('my-sha-in-passphrase-defined-in-postfinance-interface'); $shaComposer = new AllParametersShaComposer($passphrase); $shaComposer->addParameterFilter(new ShaInParameterFilter); //optional $directLinkRequest = new DirectLinkPaymentRequest($shaComposer); $directLinkRequest->setOrderid('order_1234'); $alias = new Alias('customer_123'); $directLinkRequest->setAlias($alias); $directLinkRequest->setPspid('123456'); $directLinkRequest->setUserId('postfinance-api-user'); $directLinkRequest->setPassword('postfinance-api-password'); $directLinkRequest->setAmount(100); $directLinkRequest->setCurrency('EUR'); $directLinkRequest->validate(); // now create a url to be posted to PostFinance // you have access to $directLinkRequest->toArray(), $directLinkRequest->getPostFinanceUri() and directLinkRequest->getShaSign()
DirectLinkQueryRequest
<?php use PostFinance\DirectLink\DirectLinkQueryRequest; use PostFinance\Passphrase; use PostFinance\ShaComposer\AllParametersShaComposer; use PostFinance\DirectLink\Alias; $passphrase = new Passphrase('my-sha-in-passphrase-defined-in-postfinance-interface'); $shaComposer = new AllParametersShaComposer($passphrase); $shaComposer->addParameterFilter(new ShaInParameterFilter); //optional $directLinkRequest = new DirectLinkQueryRequest($shaComposer); $directLinkRequest->setPspid('123456'); $directLinkRequest->setUserId('postfinance-api-user'); $directLinkRequest->setPassword('postfinance-api-password'); $directLinkRequest->setPayId('order_1234'); $directLinkRequest->validate(); // now create a url to be posted to PostFinance // you have access to $directLinkRequest->toArray(), $directLinkRequest->getPostFinanceUri() and directLinkRequest->getShaSign()
DirectLinkQueryRequest
<?php use PostFinance\DirectLink\DirectLinkQueryRequest; use PostFinance\Passphrase; use PostFinance\ShaComposer\AllParametersShaComposer; use PostFinance\DirectLink\Alias; $passphrase = new Passphrase('my-sha-in-passphrase-defined-in-postfinance-interface'); $shaComposer = new AllParametersShaComposer($passphrase); $shaComposer->addParameterFilter(new ShaInParameterFilter); //optional $directLinkRequest = new DirectLinkQueryRequest($shaComposer); $directLinkRequest->setPspid('123456'); $directLinkRequest->setUserId('postfinance-api-user'); $directLinkRequest->setPassword('postfinance-api-password'); $directLinkRequest->setPayId('order_1234'); $directLinkRequest->validate(); // now create a url to be posted to PostFinance // you have access to $directLinkRequest->toArray(), $directLinkRequest->getPostFinanceUri() and directLinkRequest->getShaSign()
DirectLinkMaintenanceRequest
<?php use PostFinance\DirectLink\DirectLinkMaintenanceRequest; use PostFinance\Passphrase; use PostFinance\ShaComposer\AllParametersShaComposer; use PostFinance\DirectLink\Alias; $passphrase = new Passphrase('my-sha-in-passphrase-defined-in-postfinance-interface'); $shaComposer = new AllParametersShaComposer($passphrase); $shaComposer->addParameterFilter(new ShaInParameterFilter); //optional $directLinkRequest = new DirectLinkMaintenanceRequest($shaComposer); $directLinkRequest->setPspid('123456'); $directLinkRequest->setUserId('postfinance-api-user'); $directLinkRequest->setPassword('postfinance-api-password'); $directLinkRequest->setPayId('order_1234'); $directLinkRequest->setOperation(DirectLinkMaintenanceRequest::OPERATION_AUTHORISATION_RENEW); $directLinkRequest->validate(); // now create a url to be posted to PostFinance // you have access to $directLinkRequest->toArray(), $directLinkRequest->getPostFinanceUri() and directLinkRequest->getShaSign()
EcommercePaymentResponse
<?php use PostFinance\Ecommerce\EcommercePaymentResponse; use PostFinance\ShaComposer\AllParametersShaComposer; // ... $ecommercePaymentResponse = new EcommercePaymentResponse($_REQUEST); $passphrase = new Passphrase('my-sha-out-passphrase-defined-in-postfinance-interface'); $shaComposer = new AllParametersShaComposer($passphrase); $shaComposer->addParameterFilter(new ShaOutParameterFilter); //optional if($ecommercePaymentResponse->isValid($shaComposer) && $ecommercePaymentResponse->isSuccessful()) { // handle payment confirmation } else { // perform logic when the validation fails }
CreateAliasResponse
<?php use PostFinance\DirectLink\CreateAliasResponse; use PostFinance\ShaComposer\AllParametersShaComposer; // ... $createAliasResponse = new CreateAliasResponse($_REQUEST); $passphrase = new Passphrase('my-sha-out-passphrase-defined-in-postfinance-interface'); $shaComposer = new AllParametersShaComposer($passphrase); $shaComposer->addParameterFilter(new ShaOutParameterFilter); //optional if($createAliasResponse->isValid($shaComposer) && $createAliasResponse->isSuccessful()) { // Alias creation is succesful, get the Alias object $alias = $createAliasResponse->getAlias(); } else { // validation failed, retry? }
DirectLinkPaymentResponse
由于DirectLink支付从服务器获得即时反馈(没有异步响应),我们不需要SHA验证。
<?php use PostFinance\DirectLink\DirectLinkPaymentResponse; $directLinkResponse = new DirectLinkPaymentResponse('postfinance-direct-link-result-as-xml'); if($directLinkResponse->isSuccessful()) { // handle payment confirmation } else { // perform logic when the validation fails }
参数过滤器
ParameterFilters用于过滤提供的参数(显而易见)。提供了ShaIn-和ShaOutParameterFilters,它们基于PostFinance文档中定义的参数列表。参数过滤是可选的,但我们建议使用它们来强制执行预期参数。