<!DOCTYPE html><html lang='en'> <head> <meta charset='utf-8'> <title>支付頁面</title> </head> <body> <div> <form action='checkout.php' method='post' autocomplete='off'> <label for='item'> 產品名稱 <input type='text' name='product'> </label> <br> <label for='amount'> 價格 <input type='text' name='price'> </label> <br> <input type='submit' value='去付款'> </form> </div> </body></html>
{ 'require' : { 'paypal/rest-api-sdk-php' : '1.5.1' }}
這里如果是 linux/unix系統就直接再根目錄執行composer install來獲取包內容。
安裝好之后。根目錄下面會產生一個vendor目錄。里面有composer 和 paypal兩個子目錄。composer里面實現了自動加載、paypal則是你的sdk內容。 接下來我們來寫一個公共文件(這里默認用 app/start.php、你的項目中可以自定義)、其實里面就只是實現了 sdk的autoload.php自動加載 和 創建剛才上面的的client id 和 secret生成的paypal支付對象實例。start.php代碼如下:<?phprequire 'vendor/autoload.php'; //載入sdk的自動加載文件define('SITE_URL', 'http://www.paydemo.com'); //網站url自行定義//創建支付對象實例$paypal = new PayPalRestApiContext( new PayPalAuthOAuthTokenCredential( '你的Client ID' '你的secret' ));接下來就來實現表單中提交的處理文件 checkout.php。代碼內容如下:
<?php/** * @author xxxxxxxx * @brief 簡介: * @date 15/9/2 * @time 下午5:00 */use PayPalApiPayer;use PayPalApiItem;use PayPalApiItemList;use PayPalApiDetails;use PayPalApiAmount;use PayPalApiTransaction;use PayPalApiRedirectUrls;use PayPalApiPayment;use PayPalExceptionPayPalConnectionException;require 'app/start.php';if (!isset($_POST['product'], $_POST['price'])) { die('lose some params');}$product = $_POST['product'];$price = $_POST['price'];$shipping = 2.00; //運費$total = $price + $shipping;$payer = new Payer();$payer->setPaymentMethod('paypal');$item = new Item();$item->setName($product) ->setCurrency('USD') ->setQuantity(1) ->setPrice($price);$itemList = new ItemList();$itemList->setItems([$item]);$details = new Details();$details->setShipping($shipping) ->setSubtotal($price);$amount = new Amount();$amount->setCurrency('USD') ->setTotal($total) ->setDetails($details);$transaction = new Transaction();$transaction->setAmount($amount) ->setItemList($itemList) ->setDescription('支付描述內容') ->setInvoiceNumber(uniqid());$redirectUrls = new RedirectUrls();$redirectUrls->setReturnUrl(SITE_URL . '/pay.php?success=true') ->setCancelUrl(SITE_URL . '/pay.php?success=false');$payment = new Payment();$payment->setIntent('sale') ->setPayer($payer) ->setRedirectUrls($redirectUrls) ->setTransactions([$transaction]);try { $payment->create($paypal);} catch (PayPalConnectionException $e) { echo $e->getData(); die();}$approvalUrl = $payment->getApprovalLink();header('Location: {$approvalUrl}');
checkout.php通過表單提交上來的參數對支付具體細節和參數進行初始化和設置。這里只列出了常用的部分。paypal提供了很多參數設置。具體更豐富的可以自己參考paypal官方開發者文檔。
checkout.php設置完參數之后。會生成一個支付鏈接。用header跳轉到這個支付鏈接(就是paypal的支付頁面)到這個支付頁面上面就可以用你的sandbox提供的buyer賬號去支付了。截圖如下:<?phprequire 'app/start.php';use PayPalApiPayment;use PayPalApiPaymentExecution;if(!isset($_GET['success'], $_GET['paymentId'], $_GET['PayerID'])){ die();}if((bool)$_GET['success']=== 'false'){ echo 'Transaction cancelled!'; die();}$paymentID = $_GET['paymentId'];$payerId = $_GET['PayerID'];$payment = Payment::get($paymentID, $paypal);$execute = new PaymentExecution();$execute->setPayerId($payerId);try{ $result = $payment->execute($execute, $paypal);}catch(Exception $e){ die($e);}echo '支付成功!感謝支持!';
好了。到這里一個簡單的paypal支付的demo其實已經走通了。懂得支付原理之后、想要再你自己的項目里面進行更豐富的擴展、就去paypal的官方文檔查看更多具體的開發項設置。包括交易明細的獲取等等都是可以實現的。這里就不具體講下去了。
本文中的demo是在 2015-9-2中 使用 最新的paypal php-sdk版本 1.5.1測試通過的。如sdk版本的相差較遠可能會有些許差別。借閱者自行借助參考即可!希望能給剛剛想要開發paypal支付、確無從入手的人帶來點幫助!PHP編程鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。
新聞熱點
疑難解答