這篇文章給大家分享的是有關(guān)Laravel接入paypal支付的示例的內(nèi)容。小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過來看看吧。
成都創(chuàng)新互聯(lián)是一家專業(yè)提供尖草坪企業(yè)網(wǎng)站建設(shè),專注與成都網(wǎng)站制作、成都網(wǎng)站建設(shè)、外貿(mào)營(yíng)銷網(wǎng)站建設(shè)、H5頁面制作、小程序制作等業(yè)務(wù)。10年已為尖草坪眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站建設(shè)公司優(yōu)惠進(jìn)行中。
PayPal
PayPal, 全球眾多用戶使用的國(guó)際貿(mào)易支付工具, 能夠輕松完成境外收付款! 一個(gè)賬戶全球通用, 成為PayPal商家, 就能在任何地方接受更多付款方式。
下載paypal sdk
在 composer.json 中加入 “paypal/rest-api-sdk-php” : “1.7.4”,如圖:
執(zhí)行composer update
注冊(cè)開發(fā)者賬號(hào),創(chuàng)建測(cè)試應(yīng)用,測(cè)試賬戶
地址:
https://developer.paypal.com
創(chuàng)建沙盒測(cè)試賬戶
賬號(hào)后臺(tái)(可以看到自己的消費(fèi)記錄):
https://www.sandbox.paypal.com/signin?returnUri=https%3A%2F%2Fwww.sandbox.paypal.com%2Fmyaccount%2Fsummary&state=%2F
創(chuàng)建應(yīng)用
查看應(yīng)用配置
點(diǎn)擊創(chuàng)建的應(yīng)用,查看配置Client ID,Secret,后面請(qǐng)求接口需要用到,sandbox為測(cè)試環(huán)境,live為線上環(huán)境
新建測(cè)試賬號(hào)
可設(shè)置金額及密碼
接入代碼
下單邏輯
<?php namespace App\Http\Controllers\Api; use Illuminate\Http\Request; use App\Http\Controllers\Controller; use PayPal\Api\Payer; use PayPal\Api\Item; use PayPal\Api\ItemList; use PayPal\Api\Details; use PayPal\Api\Amount; use PayPal\Api\Transaction; use PayPal\Api\RedirectUrls; use PayPal\Api\Payment; use PayPal\Auth\OAuthTokenCredential; use PayPal\Exception\PayPalConnectionException; use PayPal\Rest\ApiContext; use PayPal\Api\PaymentExecution; class paypalController extends Controller { const clientId = 'xxxxxxxxx';//應(yīng)用Client ID const clientSecret = 'xxxxxxxx';//Secret const accept_url = 'http://xxx.laravel.com/Api/paypal/Callback'; //支付成功和取消交易的跳轉(zhuǎn)地址 const Currency = 'USD';//貨幣單位 protected $PayPal; public function __construct() { $this->PayPal = new ApiContext( new OAuthTokenCredential( self::clientId, self::clientSecret ) ); //如果是沙盒測(cè)試環(huán)境不設(shè)置,請(qǐng)注釋掉 // $this->PayPal->setConfig( // array( // 'mode' => 'live', // ) // ); } /** * @param * $product 商品 * $price 價(jià)錢 * $shipping 運(yùn)費(fèi) * $description 描述內(nèi)容 */ public function pay() { $product = '1123'; $price = 1; $shipping = 0; $description = '1123123'; $paypal = $this->PayPal; $total = $price + $shipping;//總價(jià) $payer = new Payer(); $payer->setPaymentMethod('paypal'); $item = new Item(); $item->setName($product)->setCurrency(self::Currency)->setQuantity(1)->setPrice($price); $itemList = new ItemList(); $itemList->setItems([$item]); $details = new Details(); $details->setShipping($shipping)->setSubtotal($price); $amount = new Amount(); $amount->setCurrency(self::Currency)->setTotal($total)->setDetails($details); $transaction = new Transaction(); $transaction->setAmount($amount)->setItemList($itemList)->setDescription($description)->setInvoiceNumber(uniqid()); $redirectUrls = new RedirectUrls(); $redirectUrls->setReturnUrl(self::accept_url . '?success=true')->setCancelUrl(self::accept_url . '/?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}"); }
走完下單邏輯會(huì)跳轉(zhuǎn)到paypal的支付頁面,第一次需要輸入賬號(hào)密碼,如圖:
進(jìn)入支付頁面,選擇Paypal余額支付,支付完成或取消交易會(huì)自動(dòng)跳轉(zhuǎn)到你下單時(shí)傳的跳轉(zhuǎn)地址,并會(huì)傳兩個(gè)參數(shù) paymentId(paypal訂單號(hào)),PayerID(用戶id),你可以根據(jù)你的業(yè)務(wù)邏輯寫對(duì)應(yīng)邏輯,一般同步回調(diào)確認(rèn)用戶是否付款,異步回調(diào)處理業(yè)務(wù)邏輯
同步回調(diào)
/** * 回調(diào) */ public function Callback() { $success = trim($_GET['success']); if ($success == 'false' && !isset($_GET['paymentId']) && !isset($_GET['PayerID'])) { echo '取消付款';die; } $paymentId = trim($_GET['paymentId']); $PayerID = trim($_GET['PayerID']); if (!isset($success, $paymentId, $PayerID)) { echo '支付失敗';die; } if ((bool)$_GET['success'] === 'false') { echo '支付失敗,支付ID【' . $paymentId . '】,支付人ID【' . $PayerID . '】';die; } $payment = Payment::get($paymentId, $this->PayPal); $execute = new PaymentExecution(); $execute->setPayerId($PayerID); try { $payment->execute($execute, $this->PayPal); } catch (Exception $e) { echo ',支付失敗,支付ID【' . $paymentId . '】,支付人ID【' . $PayerID . '】';die; } echo '支付成功,支付ID【' . $paymentId . '】,支付人ID【' . $PayerID . '】';die; }
異步回調(diào)
回調(diào)地址配置在后臺(tái),地址必須為https開頭,設(shè)置一般過一段時(shí)間才會(huì)生效(我是下午申請(qǐng),第二天上午才生效的,如圖:
你可以勾選很多事件發(fā)送通知,不過最重要的還是支付完成(Payment sale completed)以及退款(Payment sale refunded)
支付完成
public function notify(){ //獲取回調(diào)結(jié)果 $json_data = $this->get_JsonData(); if(!empty($json_data)){ Log::debug("paypal notify info:\r\n".json_encode($json_data)); }else{ Log::debug("paypal notify fail:參加為空"); } //自己打印$json_data的值看有那些是你業(yè)務(wù)上用到的 //比如我用到 $data['invoice'] = $json_data['resource']['invoice_number']; $data['txn_id'] = $json_data['resource']['id']; $data['total'] = $json_data['resource']['amount']['total']; $data['status'] = isset($json_data['status'])?$json_data['status']:''; $data['state'] = $json_data['resource']['state']; try { //處理相關(guān)業(yè)務(wù) } catch (\Exception $e) { //記錄錯(cuò)誤日志 Log::error("paypal notify fail:".$e->getMessage()); return "fail"; } return "success"; } public function get_JsonData(){ $json = file_get_contents('php://input'); if ($json) { $json = str_replace("'", '', $json); $json = json_decode($json,true); } return $json; }
處理退款
public function returnMoney() { try { $txn_id = "xxxxxxx"; //異步加調(diào)中拿到的id $amt = new Amount(); $amt->setCurrency('USD') ->setTotal('99'); // 退款的費(fèi)用 $refund = new Refund(); $refund->setAmount($amt); $sale = new Sale(); $sale->setId($txn_id); $refundedSale = $sale->refund($refund, $this->PayPal); } catch (\Exception $e) { // PayPal無效退款 return json_decode(json_encode(['message' => $e->getMessage(), 'code' => $e->getCode(), 'state' => $e->getMessage()])); // to object } // 退款完成 return $refundedSale; }
查看相關(guān)流水
總結(jié)
paypal對(duì)于擴(kuò)展海外支付的業(yè)務(wù)還是很有幫助的,它支持多種貨幣,可綁定各種信用卡,銀行卡,缺點(diǎn)是接入時(shí)不會(huì)有paypal技術(shù)人員和你對(duì)接,反正我是在接入完成之后才聯(lián)系到paypal對(duì)接人的,好在接入難度不大,網(wǎng)上資料比較豐富,希望此文章可以給各位帶來幫助,對(duì)于海外支付有興趣的可以和我來討論。
感謝各位的閱讀!關(guān)于“Laravel接入paypal支付的示例”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!
網(wǎng)站欄目:Laravel接入paypal支付的示例
標(biāo)題路徑:http://aaarwkj.com/article26/igejcg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站內(nèi)鏈、Google、動(dòng)態(tài)網(wǎng)站、全網(wǎng)營(yíng)銷推廣、網(wǎng)頁設(shè)計(jì)公司、網(wǎng)站策劃
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)