zoukankan      html  css  js  c++  java
  • 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;
            }


  • 相关阅读:
    PAT顶级 1024 Currency Exchange Centers (35分)(最小生成树)
    Codeforces 1282B2 K for the Price of One (Hard Version)
    1023 Have Fun with Numbers (20)
    1005 Spell It Right (20)
    1092 To Buy or Not to Buy (20)
    1118 Birds in Forest (25)
    1130 Infix Expression (25)
    1085 Perfect Sequence (25)
    1109 Group Photo (25)
    1073 Scientific Notation (20)
  • 原文地址:https://www.cnblogs.com/weishuan/p/7464190.html
Copyright © 2011-2022 走看看