TP5集成PayPal支付

项目需要使用到PayPal支付,在网上找了一圈大多写的太过简陋不易看懂,在这里详细记录集成过程方便后期使用.

第一步:下载PayPal-PHP-SDK集成到项目中

        最新SDK下载地址: https://github.com/paypal/PayPal-PHP-SDK/releases

        官方英文文档:点击打开链接

       

        下载sdk解压,我们需要使用到路径:PayPal-PHP-SDK-1.13.0\PayPal-PHP-SDK\paypal\rest-api-sdk-php\lib下的文件夹

        如图:TP5集成PayPal支付_第1张图片

        将文件夹导入到tp5项目的extend目录下:

                TP5集成PayPal支付_第2张图片

        同时也需要将压缩包中log记录的Psr文件夹导入,否则运行会报错

                TP5集成PayPal支付_第3张图片

第二步:项目中的使用

        step1: 配置ApiContext,也就是设置PayPal官网申请的clientId和clientSecret,具体申请方法很多教程有,这里不写

        $apiContext = new ApiContext(
            new OAuthTokenCredential(
                config('paypal')['clientId'],       // paypal 官网获取的clientId和clientSecret
                config('paypal')['clientSecret']
            )
        );
        $apiContext->setConfig(
            array(
                // 'mode' => 'sandbox',
                'mode' => 'live',
                'log.LogEnabled' => false,
                'log.FileName' => '../PayPal.log',
                'log.LogLevel' => 'Info', // PLEASE USE `INFO` LEVEL FOR LOGGING IN LIVE ENVIRONMENTS
                'cache.enabled' => true,
                'http.CURLOPT_CONNECTTIMEOUT' => 60
                // 'http.headers.PayPal-Partner-Attribution-Id' => '123123123'
                //'log.AdapterFactory' => '\PayPal\Log\DefaultLogFactory' // Factory class implementing \PayPal\Log\PayPalLogFactory
            )
        );

    step2: 创建设置订单,item代表一个订单,ItemList 用于存放多个订单统一支付,支付成功和取消都会跳回你设置的接口,订单创建后会生成一个跳转PayPal支付的地址,和订单号,用户访问该地址就可以在PayPal上操作支付了,具体代码如下:


        $apiContext = $this->initPayPal();  // 获取配置好的ApiContext
        $itemList = new ItemList();
        $items = array();
        $total = 0;
         $product = 'test支付测试';
         $price = 0.01;  // 金额

        $total = $total + $price ;

        $payer = new Payer();
        $payer->setPaymentMethod('paypal');

        $item = new Item();
        $item->setName($product)
            ->setCurrency('HKD')
            ->setQuantity(1)
            ->setPrice($price);
        $items[] = $item;

        $itemList->setItems($items);


        $shipping = 0.00; //运费
        $total = $total  + $shipping;


        $details = new Details();
        $details->setShipping($shipping)
            ->setSubtotal($total);

        $amount = new Amount();
        $amount->setCurrency('HKD')
            ->setTotal($total);

        $transaction = new Transaction();
        $transaction->setAmount($amount)
            ->setItemList($itemList)
            ->setDescription($product)
            ->setInvoiceNumber(uniqid());

        $baseUrl = "http://localhost/home/order/test";

        $redirectUrls = new RedirectUrls();
        $redirectUrls->setReturnUrl($baseUrl.'?lz_type=1')
            ->setCancelUrl($baseUrl.'?lz_type=2');

        $payment = new Payment();
        $payment->setIntent('sale')
            ->setPayer($payer)
            ->setRedirectUrls($redirectUrls)
            ->setTransactions(array($transaction));

        try {
            $payment->create($apiContext);  //错误点
            //

        } catch (PayPalConnectionException $e) {
            echo $e->getData();
            die();
        }
        $approvalUrl = $payment->getApprovalLink();
        $id = $payment->getId();
        $this->redirect($approvalUrl);

你可能感兴趣的:(PHP)