Yii2 對接 PayPal 支付接口

PayPal 的開發者中心: https://developer.paypal.com

PayPal對接比較複雜,而且文檔多,接口也多,不知道要調用哪個。

我用的是PHP的Releases版本 , https://paypal.github.io/PayPal-PHP-SDK/,點進Releases下載就行

下載完後,直接放到components(我用的是yii2框架)

直接引用進來

require_once dirname(dirname(__FILE__)).'/components/PayPal/autoload.php';

先看前端

$("#pay").click(function(){
        var pay_way = $("input[type='radio']:checked").val();
        if(pay_way == 1){
            wap_pay(1)  //支付寶
        }else if(pay_way == 2){
            wap_pay(2)  //微信
        }else if(pay_way == 3){
            paypal_pay() //調用paypal
        }
    });        

paypal_pay()函數

function paypal_pay(){
        var CREATE_PAYMENT_URL = "<?php echo Yii::$app->request->getHostInfo().'/'.Yii::$app->params['paypal_url'];?>";
        paypal.request.post(CREATE_PAYMENT_URL,{_csrf:_csrf,ssid:ssid}).then(function(data){
            window.location.href = data 
        })
    }
上面的 CREATE_PAYMENT_URL ,其實就是後臺的一個路由:

'paypal_url' => 'order/paypal',
內容如下
public function actionPaypal()
    {
        $ssid = Yii::$app->request->post("ssid");
        $online_order = OnlineOrder::find()->where('order_code = :ssid',[':ssid'=>$ssid])->one();
        $data = OnlineOrder::findOrderDetail($online_order);
        $url = Helper::PayPal($data);
        echo $url;
    }

Helper.php 的 PayPal函數

public static function PayPal($data)
        {
            $clientId = Yii::$app->params['clientId'];
            $clientSecret = Yii::$app->params['clientSecret'];
           
            $paypal = new ApiContext( new OAuthTokenCredential($clientId, $clientSecret));
            
            //汇率
            $mop = Helper::HKDrate();   //第三方匯率轉換
            $money = $data['total_money'] * $mop;
           
            $product = '商品名';
            
            $payer = new Payer();
            $payer->setPaymentMethod('paypal');
            
            $item = new Item();
            $item->setName($product)
            ->setCurrency('HKD')
            ->setQuantity(1)
            ->setPrice($money);
            
            $itemList = new ItemList();
            $itemList->setItems([$item]);
            
            $details = new Details();
            $details->setShipping(0)
            ->setSubtotal($money);
            
            $amount = new Amount();
            $amount->setCurrency('HKD')
                ->setTotal($money)
                ->setDetails($details);
            
            $transaction = new Transaction();
            $transaction->setAmount($amount)
            ->setItemList($itemList)
            ->setDescription("商品描述")
            ->setInvoiceNumber(uniqid());
            
            $redirectUrls = new RedirectUrls();
            $redirectUrls->setReturnUrl(Yii::$app->request->getHostInfo().'/'. Yii::$app->params['pay_success_url'])
            ->setCancelUrl(Yii::$app->request->getHostInfo().'/'. Yii::$app->params['pay_cancel_url']);
            
            $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();
            return $approvalUrl;
        }


原文地址:https://www.cnblogs.com/weishuan/p/7464190.html