anouar / paypalpayment
laravel-paypalpayment 是一个简单的包,可以帮助您使用 PayPal REST API SDK 在 Laravel 4 项目中处理直接信用卡支付、存储信用卡支付和 PayPal 账户支付。
3.0
2017-11-06 13:26 UTC
Requires
- php: >=5.3.0
- ext-curl: *
- ext-json: *
- illuminate/support: ~5.0
- paypal/rest-api-sdk-php: 1.11.0
Requires (Dev)
- phpspec/phpspec: ~2.0
README
重要:使用 PayPal REST /payments API 接受信用卡支付受到 PayPal 限制,他们建议如果您想接受信用卡支付,请使用 Braintree Direct。
更新:我可能会在未来重新创建使用 Braintree 的包,但没有截止日期。您也可以使用 braintree/braintree_php 库。
注意
如果您打算使用此包与 Laravel 4,请确保需要 Laravel 4 分支 laravel-paypalpayment
"require": { "anouar/paypalpayment": "dev-l4" }
laravel-paypalpayment
laravel-paypalpayment 是一个简单的包,可以帮助您使用 PayPal REST API SDK 在 Laravel 4/5 项目中处理直接信用卡支付、存储信用卡支付和 PayPal 账户支付。
捐赠
观看快速演示
安装
通过 Composer 安装此包。在你的 composer.json
文件中
"require": { "anouar/paypalpayment": ">=3.0" }
然后运行 composer update
。
将服务提供者添加到 config/app.php
(Laravel 4 的 app/config/app.php
),在 providers
数组中。
'providers' => array( // ... Anouar\Paypalpayment\PaypalpaymentServiceProvider::class, )
然后在 aliases
数组中添加一个别名。
'aliases' => array( // ... 'Paypalpayment' => Anouar\Paypalpayment\Facades\PaypalPayment::class, )
最后,通过运行以下 CMD 发布包配置
php artisan vendor:publish --provider="Anouar\Paypalpayment\PaypalpaymentServiceProvider"
配置
在 config/paypal_payment.php
配置文件中设置您的 PayPal client_id
和 client_secret
密钥
示例
注意:如果您不喜欢使用外观调用,您可以将 PayPal 支付服务解析为 app('paypalpayment')
,然后将其分配给一个属性。
1-使用信用卡作为支付方式
创建新的控制器 PaypalPaymentController
use Paypalpayment; class PaypalPaymentController extends BaseController { /* * Process payment using credit card */ public function paywithCreditCard() { // ### Address // Base Address object used as shipping or billing // address in a payment. [Optional] $shippingAddress = Paypalpayment::shippingAddress(); $shippingAddress->setLine1("3909 Witmer Road") ->setLine2("Niagara Falls") ->setCity("Niagara Falls") ->setState("NY") ->setPostalCode("14305") ->setCountryCode("US") ->setPhone("716-298-1822") ->setRecipientName("Jhone"); // ### CreditCard $card = Paypalpayment::creditCard(); $card->setType("visa") ->setNumber("4758411877817150") ->setExpireMonth("05") ->setExpireYear("2019") ->setCvv2("456") ->setFirstName("Joe") ->setLastName("Shopper"); // ### FundingInstrument // A resource representing a Payer's funding instrument. // Use a Payer ID (A unique identifier of the payer generated // and provided by the facilitator. This is required when // creating or using a tokenized funding instrument) // and the `CreditCardDetails` $fi = Paypalpayment::fundingInstrument(); $fi->setCreditCard($card); // ### Payer // A resource representing a Payer that funds a payment // Use the List of `FundingInstrument` and the Payment Method // as 'credit_card' $payer = Paypalpayment::payer(); $payer->setPaymentMethod("credit_card") ->setFundingInstruments([$fi]); $item1 = Paypalpayment::item(); $item1->setName('Ground Coffee 40 oz') ->setDescription('Ground Coffee 40 oz') ->setCurrency('USD') ->setQuantity(1) ->setTax(0.3) ->setPrice(7.50); $item2 = Paypalpayment::item(); $item2->setName('Granola bars') ->setDescription('Granola Bars with Peanuts') ->setCurrency('USD') ->setQuantity(5) ->setTax(0.2) ->setPrice(2); $itemList = Paypalpayment::itemList(); $itemList->setItems([$item1,$item2]) ->setShippingAddress($shippingAddress); $details = Paypalpayment::details(); $details->setShipping("1.2") ->setTax("1.3") //total of items prices ->setSubtotal("17.5"); //Payment Amount $amount = Paypalpayment::amount(); $amount->setCurrency("USD") // the total is $17.8 = (16 + 0.6) * 1 ( of quantity) + 1.2 ( of Shipping). ->setTotal("20") ->setDetails($details); // ### Transaction // A transaction defines the contract of a // payment - what is the payment for and who // is fulfilling it. Transaction is created with // a `Payee` and `Amount` types $transaction = Paypalpayment::transaction(); $transaction->setAmount($amount) ->setItemList($itemList) ->setDescription("Payment description") ->setInvoiceNumber(uniqid()); // ### Payment // A Payment Resource; create one using // the above types and intent as 'sale' $payment = Paypalpayment::payment(); $payment->setIntent("sale") ->setPayer($payer) ->setTransactions([$transaction]); try { // ### Create Payment // Create a payment by posting to the APIService // using a valid ApiContext // The return object contains the status; $payment->create(Paypalpayment::apiContext()); } catch (\PPConnectionException $ex) { return response()->json(["error" => $ex->getMessage()], 400); } return response()->json([$payment->toArray()], 200); } }
2-使用 Express Checkout 作为支付方式
/* * Process payment with express checkout */ public function paywithPaypal() { // ### Address // Base Address object used as shipping or billing // address in a payment. [Optional] $shippingAddress= Paypalpayment::shippingAddress(); $shippingAddress->setLine1("3909 Witmer Road") ->setLine2("Niagara Falls") ->setCity("Niagara Falls") ->setState("NY") ->setPostalCode("14305") ->setCountryCode("US") ->setPhone("716-298-1822") ->setRecipientName("Jhone"); // ### Payer // A resource representing a Payer that funds a payment // Use the List of `FundingInstrument` and the Payment Method // as 'credit_card' $payer = Paypalpayment::payer(); $payer->setPaymentMethod("paypal"); $item1 = Paypalpayment::item(); $item1->setName('Ground Coffee 40 oz') ->setDescription('Ground Coffee 40 oz') ->setCurrency('USD') ->setQuantity(1) ->setTax(0.3) ->setPrice(7.50); $item2 = Paypalpayment::item(); $item2->setName('Granola bars') ->setDescription('Granola Bars with Peanuts') ->setCurrency('USD') ->setQuantity(5) ->setTax(0.2) ->setPrice(2); $itemList = Paypalpayment::itemList(); $itemList->setItems([$item1,$item2]) ->setShippingAddress($shippingAddress); $details = Paypalpayment::details(); $details->setShipping("1.2") ->setTax("1.3") //total of items prices ->setSubtotal("17.5"); //Payment Amount $amount = Paypalpayment::amount(); $amount->setCurrency("USD") // the total is $17.8 = (16 + 0.6) * 1 ( of quantity) + 1.2 ( of Shipping). ->setTotal("20") ->setDetails($details); // ### Transaction // A transaction defines the contract of a // payment - what is the payment for and who // is fulfilling it. Transaction is created with // a `Payee` and `Amount` types $transaction = Paypalpayment::transaction(); $transaction->setAmount($amount) ->setItemList($itemList) ->setDescription("Payment description") ->setInvoiceNumber(uniqid()); // ### Payment // A Payment Resource; create one using // the above types and intent as 'sale' $redirectUrls = Paypalpayment::redirectUrls(); $redirectUrls->setReturnUrl(url("/payments/success")) ->setCancelUrl(url("/payments/fails")); $payment = Paypalpayment::payment(); $payment->setIntent("sale") ->setPayer($payer) ->setRedirectUrls($redirectUrls) ->setTransactions([$transaction]); try { // ### Create Payment // Create a payment by posting to the APIService // using a valid ApiContext // The return object contains the status; $payment->create(Paypalpayment::apiContext()); } catch (\PPConnectionException $ex) { return response()->json(["error" => $ex->getMessage()], 400); } return response()->json([$payment->toArray(), 'approval_url' => $payment->getApprovalLink()], 200); }
3-列出支付
将 index()
函数添加到 PaypalPaymentController
控制器
/* Use this call to get a list of payments. url:payment/ */ public function index() { $payments = Paypalpayment::getAll(['count' => 1, 'start_index' => 0], Paypalpayment::apiContext()); return response()->json([$payments->toArray()], 200); }
4-获取支付详情
将 show()
函数添加到 PaypalPaymentController
控制器
/* Use this call to get details about payments that have not completed, such as payments that are created and approved, or if a payment has failed. url:payment/PAY-3B7201824D767003LKHZSVOA */ public function show($payment_id) { $payment = Paypalpayment::getById($payment_id, Paypalpayment::apiContext()); return response()->json([$payment->toArray()], 200); }
在 (routes.php
旧版本) 或 web.php
文件中注册您的路由。
结论
请随时报告问题并打开任何您认为有助于改进包的 PR。