最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當(dāng)前位置: 首頁 - 科技 - 知識百科 - 正文

詳解PHP 如何對接 paypal 支付

來源:懂視網(wǎng) 責(zé)編:小采 時間:2020-11-02 17:28:52
文檔

詳解PHP 如何對接 paypal 支付

詳解PHP 如何對接 paypal 支付: 推薦:《PHP視頻教程》環(huán)境準(zhǔn)備注冊paypal賬號注冊paypal開發(fā)者賬號創(chuàng)建paypal沙盒測試賬戶創(chuàng)建paypal應(yīng)用下載PHP SDK實現(xiàn)支付實現(xiàn)支付成功回調(diào)實現(xiàn)退款更多API代碼模板注冊paypal賬號www.paypal.com 注冊商家賬戶選擇,創(chuàng)建商家用戶,根據(jù)要求填寫信
推薦度:
導(dǎo)讀詳解PHP 如何對接 paypal 支付: 推薦:《PHP視頻教程》環(huán)境準(zhǔn)備注冊paypal賬號注冊paypal開發(fā)者賬號創(chuàng)建paypal沙盒測試賬戶創(chuàng)建paypal應(yīng)用下載PHP SDK實現(xiàn)支付實現(xiàn)支付成功回調(diào)實現(xiàn)退款更多API代碼模板注冊paypal賬號www.paypal.com 注冊商家賬戶選擇,創(chuàng)建商家用戶,根據(jù)要求填寫信

推薦:《PHP視頻教程》

環(huán)境準(zhǔn)備

  • 注冊paypal賬號
  • 注冊paypal開發(fā)者賬號
  • 創(chuàng)建paypal沙盒測試賬戶
  • 創(chuàng)建paypal應(yīng)用
  • 下載PHP SDK
  • 實現(xiàn)支付
  • 實現(xiàn)支付成功回調(diào)
  • 實現(xiàn)退款
  • 更多API代碼模板
  • 注冊paypal賬號

  • www.paypal.com 注冊商家賬戶
  • 選擇,”創(chuàng)建商家用戶”,根據(jù)要求填寫信息,注冊完得去郵箱激活
  • 注冊paypal開發(fā)者賬號

  • developer.paypal.com 使用上一步注冊的賬號登錄
  • 在左側(cè)導(dǎo)航欄點擊Accounts,創(chuàng)建兩個sandbox賬號,一個個人賬號(personal)用于付款,一個商家賬號(business)用于收款,系統(tǒng)已經(jīng)默認(rèn)創(chuàng)建了兩個,可以自己選擇創(chuàng)建,方便記憶; 創(chuàng)建賬號后記得給當(dāng)前賬號添加余額用于接下來的測試。
    創(chuàng)建賬號
  • 用剛才創(chuàng)建的測試賬號登錄沙盒測試站點,查看金額和交易信息www.sandbox.paypal.com
  • 創(chuàng)建沙盒應(yīng)用APP

  • 賬號默認(rèn)給創(chuàng)建好了一個Default Application,點擊查看獲取 ClientId和Secret;保存起來,接下來接口調(diào)用會使用到;(上線時請重新創(chuàng)建一個Live的應(yīng)用)
    查看ClientId和Secret
  • 下載SDK

  • 本人使用laravel框架,使用composer下載paypal包
  • composer require paypal/rest-api-sdk-php
  • 實現(xiàn)支付

  • 以下是生成支付的代碼片段,偽代碼

    function createPayPal(){
     $shippingPrice = 2;
     $taxPrice = 0;
     $subTotal = 26;
     $item1 = new PayPalApiItem();
     $item1->setName("產(chǎn)品2")->setCurrency("USD")->setQuantity(1)->setPrice(10);
     $item2 = new PayPalApiItem();
     $item2->setName("產(chǎn)品1")->setCurrency("USD")->setQuantity(2)->setPrice(8);
    
     $itemList = new PayPalApiItemList();
     $itemList->addItems([$item1,$item2]);
    
     // Set payment details
     $details = new PayPalApiDetails();
     $details->setShipping($shippingPrice)->setTax($taxPrice)->setSubtotal($subTotal);
    
     // Set payment amount
     //注意,此處的subtotal,必須是產(chǎn)品數(shù)*產(chǎn)品價格,所有值必須是正確的,否則會報錯
     $total = $shippingPrice + $subTotal + $taxPrice;
     $amount = new PayPalApiAmount();
     $amount->setCurrency("USD")->setTotal($total)->setDetails($details);
    
     // Set transaction object
     $transaction = new PayPalApiTransaction();
     $transaction->setAmount($amount)->setItemList($itemList)->setDescription("這是交易描述")
     ->setInvoiceNumber(uniqid());//setInvoiceNumber為支付唯一標(biāo)識符,在使用時建議改成訂單號
    
     $payer = new PayPalApiPayer();
     $payer->setPaymentMethod('paypal');//["credit_card", "paypal"]
     $redirectUrls = new PayPalApiRedirectUrls();
     $redirectUrl = "http://test.com/redirect/success";//支付成功跳轉(zhuǎn)的回調(diào)
     $cancelUrl = "http://test.com/redirect/cancel";//取消支付的回調(diào)
     $redirectUrls->setReturnUrl($redirectUrl)->setCancelUrl($cancelUrl);
    
     // Create the full payment object
     $payment = new PayPalApiPayment();
     $payment->setIntent("sale")->setPayer($payer)->setRedirectUrls($redirectUrls)->addTransaction($transaction);
    
     try {
     $clientId = "xxxxxx";//上面應(yīng)用的clientId和secret
     $secret = "XXXXXX";
     $oAuth = new PayPalAuthOAuthTokenCredential($clientId, $secret);
     $apiContext = new PayPalRestApiContext($oAuth);
     if(env('APP_DEBUG') === false ){
     $apiContext->setConfig(['mode' => 'live']);//設(shè)置線上環(huán)境,默認(rèn)是sandbox
     }
     $payment->create($apiContext);
     $approvalUrl = $payment->getApprovalLink();
     dd($approvalUrl);//這個是請求支付的鏈接,在瀏覽器中請求此鏈接就會跳轉(zhuǎn)到支付頁面
     } catch (Exception $e) {
     dd($e->getMessage());//錯誤提示
     }
     }

    交易記錄

  • 以下是支付成功的回調(diào)代碼片段,偽代碼

    function payRedirect(Request $request)
     {
     $paymentID = $request->get('paymentId');
     $payerId = $request->get('PayerID');
    
     $clientId = "xxxxxx";//上面應(yīng)用的clientId和secret
     $secret = "XXXXXX";
     $oAuth = new PayPalAuthOAuthTokenCredential($clientId, $secret);
     $apiContext = new PayPalRestApiContext($oAuth); 
     if(env('APP_DEBUG') === false ){
     $apiContext->setConfig(['mode' => 'live']);//設(shè)置線上環(huán)境,默認(rèn)是sandbox
     }
     $payment = PayPalApiPayment::get($paymentID, $apiContext);
    
     $execute = new PayPalApiPaymentExecution();
     $execute->setPayerId($payerId);
    
     try{
     $payment = $payment->execute($execute, $apiContext);//執(zhí)行,從paypal獲取支付結(jié)果
     $paymentState = $payment->getState();//Possible values: created, approved, failed.
     $invoiceNum = $payment->getTransactions()[0]->getInvoiceNumber();
     $payNum = $payment->getTransactions()[0]->getRelatedResources()[0]->getSale()->getId();//這是支付的流水單號,必須保存,在退款時會使用到
     $total = $payment->getTransactions()[0]->getRelatedResources()[0]->getSale()->getAmount()->getTotal();//支付總金額
     $transactionState = $payment->getTransactions()[0]->getRelatedResources()[0]->getSale()->getState();//Possible values: completed, partially_refunded, pending, refunded, denied.
    
     if($paymentState == 'approved' && $transactionState == 'completed'){
     //處理成功的邏輯,例如:判斷支付金額與訂單金額,更新訂單狀態(tài)等
     return "success";//返回成功標(biāo)識
     }else{
     //paypal回調(diào)錯誤,paypal狀態(tài)不正確
     return "error";//返回錯誤標(biāo)識
     }
     }catch(Exception $e){
     dd($e->getMessage());
     }
     }
  • 退款

  • 退款必須要有支付成功的流水單號

  • 一個流水單號可以進(jìn)行多次退款

  • 退款成功之后,在賬號的交易記錄中不體現(xiàn),測試時請登錄測試賬號自己記錄一下余額的變化情況,以確定退款是否成功

  • 商家賬號會減少余額并增加手續(xù)費(手續(xù)費是之前付款多收的),用戶賬號會增加余額

    function refundOrder()
     {
     try{
     $refundRequest = new PayPalApiRefundRequest();
     $amount = new PayPalApiAmount();
     $amount->setCurrency("USD")->setTotal(10);//退總金額
     $refundRequest->setAmount($amount);
     $refundRequest->setDescription("退款測試");
     $sale = new PayPalApiSale();
     $sale->setId("XXXXXXXXX");//支付單號,支付成功時保存的支付流水單號
     $clientId = "xxxxxx";//上面應(yīng)用的clientId和secret
     $secret = "XXXXXX";
     $oAuth = new PayPalAuthOAuthTokenCredential($clientId, $secret);
     $apiContext = new PayPalRestApiContext($oAuth);
     if(env('APP_DEBUG') === false ){
     $apiContext->setConfig(['mode' => 'live']);//設(shè)置線上環(huán)境,默認(rèn)是sandbox
     }
     $detailedRefund = $sale->refundSale($refundRequest, $apiContext);//調(diào)接口
     $refundState = $detailedRefund->getState();//Possible values: pending, completed, cancelled, failed.
    
     //var_dump($refundedSale);
     if($refundState == 'completed'){
     //退款成功,返回
     }else{
     dd('paypal 退款失敗, 狀態(tài)不正確');
     }
     }catch (Exception $exception){
     dd($exception->getMessage());//發(fā)生異常
     }
     }

    更多接口代碼示例

  • http://paypal.github.io/PayPal-PHP-SDK/sample/

  • 聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文檔

    詳解PHP 如何對接 paypal 支付

    詳解PHP 如何對接 paypal 支付: 推薦:《PHP視頻教程》環(huán)境準(zhǔn)備注冊paypal賬號注冊paypal開發(fā)者賬號創(chuàng)建paypal沙盒測試賬戶創(chuàng)建paypal應(yīng)用下載PHP SDK實現(xiàn)支付實現(xiàn)支付成功回調(diào)實現(xiàn)退款更多API代碼模板注冊paypal賬號www.paypal.com 注冊商家賬戶選擇,創(chuàng)建商家用戶,根據(jù)要求填寫信
    推薦度:
    標(biāo)簽: 支付 付款 php
    • 熱門焦點

    最新推薦

    猜你喜歡

    熱門推薦

    專題
    Top