成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Laravel中集成PayPal

xiaoqibTn / 2919人閱讀

摘要:最近在寫一個面向國外買家的一個商城項目,既然面向國外,那就要用到這個支付平臺。因為在對接的過程中遇到了一些問題,花費了一些時間,所以把對接的過程記下來,也希望能幫助到用到的朋友。以下皆以代碼的形式展現(xiàn),沒有截圖,但我盡量用代碼講解明白。

最近在寫一個面向國外買家的一個商城項目,既然面向國外,那就要用到PayPal這個支付平臺。因為在對接PayPal的過程中遇到了一些問題,花費了一些時間,所以把對接的過程記下來,也希望能幫助到用到PayPal的朋友。

我集成的是paypal/rest-api-sdk-php。PayPalapiv1v2兩個版本,我用的這個是v1版本。

以下皆以代碼的形式展現(xiàn),沒有截圖,但我盡量用代碼講解明白。
假設(shè)你已經(jīng)有了用laravel寫的一個項目:

Step:1安裝擴展包
composer require paypal/rest-api-sdk-php
Step:2創(chuàng)建payment.php配置文件

Config目錄新建payment.php配置文件,內(nèi)容如下

return [
    "paypal" => [
        /** set your paypal credential **/
        "client_id" =>"paypal client_id",
        "secret" => "paypal secret ID",
        /**
         * SDK 配置
         */
        "settings" => array(
            /**
             * 沙盒測試"sandbox" 或者 "live"
             */
               "mode" => "sandbox",
            /**
             * 請求超時時間
             */
            "http.ConnectionTimeOut" => 1000,
            /**
             * 是否開啟日志:true開啟,false不開啟
             */
            "log.LogEnabled" => true,
            /**
             * 日志存儲的文件
             */
            "log.FileName" => storage_path() . "/logs/paypal.log",
            /**
             * 日志級別 "DEBUG", "INFO", "WARN" or "ERROR"
                *
             */
            "log.LogLevel" => "INFO"
        ),
    ],
    
    "2checkout" => [
        //
    ]
];
Step:3創(chuàng)建路由
    // 第一步:顯示表單,這是一個簡單的表單頁面,我們把金額輸入,然后點擊提交
    Route::get("paypal-form", "PaymentPayPalController@payPalShow")->name("paypal-form");

    // 第二步:第一步提交后發(fā)送請求,請求該方法,該方法用于創(chuàng)建訂單,創(chuàng)建支付流程
    Route::post("paypal-pay", "PaymentPayPalController@pay")->name("payment.paypay.pay");

    // 第三步:異步回調(diào)
    Route::post("paypal-notify", "PaymentPayPalController@payPalNotify")->name("payment.paypal.notify");

    // 第三步:前端回調(diào)
    Route::get("paypal-return", "PaymentPayPalController@payPalReturn")->name("payment.paypal.return");

    // 第三步:取消
    Route::get("paypal-cancel", "PaymentPayPalController@payPalCancel")->name("payment.paypal.cancel");
Step:3創(chuàng)建控制器
_api_context = new ApiContext(new OAuthTokenCredential(
            $payPal_config["client_id"],
            $payPal_config["secret"]
        ));
        $this->_api_context->setConfig($payPal_config["setting"]);
    }

    // 顯示表單
    public function payPalShow()
    {
        return view("payment.paypal");
    }
    
    // 第二步,請求這里
    public function pay(Request $request)
    {
        $payer = new Payer();
        $payer->setPaymentMethod("paypal");

        // 產(chǎn)品名稱,幣種,數(shù)量,單個產(chǎn)品金額
        $item1 = new Item();
        $item1->setName("item1")
            ->setCurrency("USD")
            ->setQuantity(1)
            ->setPrice($request->get("amount"));

        // 將所有產(chǎn)品集合到 ItemList中
        $item_list = new ItemList();
        $item_list->setItems([$item1]);

        $amount = new Amount();
        $amount->setCurrency("USD")
            ->setTotal($request->get("amount"));

        // 生成交易
        $transaction = new Transaction();
        $transaction->setAmount($amount)
            ->setItemList($item_list)
            ->setDescription("你的交易")
            ->setNotifyUrl(route("notify_url")) // 注意,這里設(shè)置異步回調(diào)地址
            ->setInvoiceNumber($order->order_number); // 這里設(shè)置訂單號

        // 設(shè)置前端回調(diào)地址和取消支付地址
        $redirect_urls = new RedirectUrls();
        $redirect_urls->setReturnUrl(route("payment.paypal.return"))
        ->setCancelUrl(route("payment.paypal.cancel"));
        
        $payment = new Payment();
        $payment->setIntent("Sale")
            ->setPayer($payer)
            ->setRedirectUrls($redirect_urls)
            ->setTransactions(array($transaction));
        try {
            // 這里生成支付流程
            $payment->create($this->_api_context);
        } catch (PayPalExceptionPayPalConnectionException $ex) {
            if (config("app.debug")) {
                session()->put("error","Connection timeout");
                return redirect()->route("paypal-form");

                /** echo "Exception: " . $ex->getMessage() . PHP_EOL; **/
                /** $err_data = json_decode($ex->getData(), true); **/
                /** exit; **/

            } else {
                session()->put("error","Some error occur, sorry for inconvenient");
                return redirect()->route("paypal-form");
            }
        }

        foreach($payment->getLinks() as $link) {
            if($link->getRel() == "approval_url") {
                $redirect_url = $link->getHref();
                break;
            }
        }

        // $payment->getId()得到的是支付流水號
        session()->put("paypal_payment_id", $payment->getId());

        if(isset($redirect_url)) {
            // 跳轉(zhuǎn)到支付頁面
            return redirect()->away($redirect_url);
        }

        session()->put("error","Unknown error occurred");
        return session()->route("paypal-form");
    }
    
    
    public function payPalReturn(Request $request)
    {
        // 支付成功后,在前端頁面跳轉(zhuǎn)回來時,url地址中會帶有paymentID 和 PayerID
        $payment_id = session()->get("paypal_payment_id");
        session()->forget("paypal_payment_id");

        if (empty(Input::get("PayerID")) || empty(Input::get("token"))) {
            session()->put("error","Payment failed");

            return redirect()->route("paypal-form");
        }
        $payment = Payment::get($payment_id, $this->_api_context);
        $execution = new PaymentExecution();
        $execution->setPayerId(Input::get("PayerID"));
        $result = $payment->execute($execution, $this->_api_context);


        // 當(dāng)拿到的狀態(tài)時approved表示支付成功
        if ($result->getState() == "approved") {

            session()->put("success","Payment success");
            return redirect()->route("paypal-form");
        }
        session()->put("error","Payment failed");

        return redirect()->route("paypal-form");
    }
    
    public function payPalNotify()
    {
        Log::info(12312, Input::get());
        // 這里寫我們的業(yè)務(wù)邏輯,訂單狀態(tài)更新,物流信息等等.
    }
}
Step:4創(chuàng)建表單
{{ csrf_field() }}
@if ($errors->has("amount")) {{ $errors->first("amount") }} @endif

以上既是我做商城項目時PayPal的對接流程,因為英語不好的問題,開發(fā)起來會出現(xiàn)很多問題,
如果英文好,想知道更多的用法,可以看PayPal的開發(fā)者文檔,還有demo演示。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/31266.html

相關(guān)文章

  • 聯(lián)想懂得流量卡 「api 2.0」php SDK(laravel 擴展)

    摘要:原文地址不知道是不是有和我一樣使用到聯(lián)想懂得物聯(lián)網(wǎng)卡的兄。戳這里以下是使用說明此擴展是聯(lián)想的,可以方便的在中集成。由于聯(lián)想懂得的接口還在開發(fā)中,所以這個擴展包將處于開發(fā)階段,等穩(wěn)定之后會發(fā)布版本。 原文地址 不知道是不是有和我一樣使用到聯(lián)想懂得物聯(lián)網(wǎng)卡的兄dei。我將接口封裝成了laravel框架的擴展,也可以在laravel之外的項目中使用。 github戳這里 以下是使用說明: 此...

    Paul_King 評論0 收藏0
  • Laravel 5 中使用 Laravel Excel 實現(xiàn) Excel/CSV 文件導(dǎo)入導(dǎo)出功

    摘要:本文非原創(chuàng),基于學(xué)院在中使用實現(xiàn)文件導(dǎo)入導(dǎo)出功能這篇文章在實際中測試調(diào)整。簡介在中集成套件中的,從而方便我們以優(yōu)雅的富有表現(xiàn)力的代碼實現(xiàn)文件的導(dǎo)入和導(dǎo)出。 本文非原創(chuàng),基于laravel 學(xué)院《在 Laravel 5 中使用 Laravel Excel 實現(xiàn) Excel/CSV 文件導(dǎo)入導(dǎo)出功能》 這篇文章在實際中測試調(diào)整。 showImg(https://segmentfault.c...

    XFLY 評論0 收藏0
  • Laravel學(xué)習(xí)筆記之Errors Tracking神器——Sentry

    摘要:中異常處理類主要包含兩個方法和,其中就是主要用來向第三方發(fā)送異常報告,這里選擇向這個神器發(fā)送異常報告,并使用通知開發(fā)人員。通過也能發(fā)現(xiàn)的執(zhí)行流程。 說明:Laravel學(xué)習(xí)筆記之bootstrap源碼解析中聊異常處理時提到過Sentry這個神器,并打算以后聊聊這款神器,本文主要就介紹這款Errors Tracking神器Sentry,Sentry官網(wǎng)有一句話個人覺得帥呆了: Stop ...

    xiguadada 評論0 收藏0
  • 為PHP程序員的正確姿勢

    摘要:因為這對于一個剛參加工作的工程師來說,這有可能就是一月和一個月的區(qū)別了。多編寫網(wǎng)站編程說到底其實也就是一門手藝,就對于智商差不多的程序員來說,技藝的高超程度往往就在于練的多少了。 利益相關(guān):以下的所有文字都是僅代表個人觀點,不代表全組織的利益。 本人就是一大三狗,自學(xué)PHP時間已經(jīng)快兩年了,感覺自己還是一個入門級的選手。說說自己是如何一步步走過來的。 1. 官方文檔 對,我還是堅...

    mikyou 評論0 收藏0
  • weex踩坑之旅第二彈 ~ 在weex中集vue-router

    摘要:也就是說在中,我們的代碼是要在環(huán)境中運行。而在中,是沒有等以及的,即所有的框架都是不可以使用的。比如相關(guān)組件,相關(guān)組件,等都不能在中引用。是可以在中使用的。 接著第一彈講,我們已經(jīng)搭建好一個屬于自己的weex項目了,然后如何開發(fā)呢?由于之前項目中都是采用vue全家桶進行開發(fā),路由使用vue-router插件,狀態(tài)管理使用vuex,Ajax前后臺交互使用axios,圖標庫使用font-a...

    tyheist 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<