我要传递给doExpressCheckouPaymentt()的哪些参数?

时间:2020-08-01 10:51:18

标签: php laravel

我有一个应该执行PayPal付款的控制器。支付功能运行良好,但是在成功使用功能时,出现错误Illegal string offset 'total' 。我正在按照此question中的建议通过$this->productData($request)。我尝试创建一个变量$total = $response['AMT'],它是setCheckoutDetails的响应,但是仍然出现相同的错误。我该怎么办?

    <?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Srmklive\PayPal\Services\ExpressCheckout;

class PayPalController extends Controller
{
        private function projectData(Request $request){
                    // dd($request->all());
            $item = [];
            $datat = array_map(function($item){
                return [
                    'name'=>$request->project_id,
                    'price'=>$request->budget,
                    'desc'=>'Deposit',
                    'qty'=>1
                ];
            }, $item);
            $data = [
                    'items'=>$datat,
                    'invoice_id' => uniqid(),
                    'invoice_description' => "Payment for Project No.".$request->project_id." Amount ".$request->budget,
                    'return_url' => route('payment.success'),
                    'cancel_url' => route('payment.cancel'),
                    'total'=>$request->budget
            ];  
            // dd($data);

            return $data;
        }
            /**
         * Responds with a welcome message with instructions
         *
         * @return \Illuminate\Http\Response
         */
        public function payment(Request $request)    {
            $data = $this->projectData($request);
            $provider = new ExpressCheckout;
            $response = $provider->setExpressCheckout($data);
            // dd($response);
            // $response = $provider->setExpressCheckout($data, true);

            return redirect($response['paypal_link']);
        }

/**
 * Responds with a welcome message with instructions
 *
 * @return \Illuminate\Http\Response
 */
public function cancel()
{
    dd('Your payment is canceled. You can create cancel page here.');
}

/**
 * Responds with a welcome message with instructions
 *
 * @return \Illuminate\Http\Response
 */
public function success(Request $request)
    {
        $provider = new ExpressCheckout;
        $response = $provider->getExpressCheckoutDetails($request->token);

        $token = $response['TOKEN'];
        $payerId = $response['PAYERID'];
        $total = $response['AMT'];
        // dd($response);
        if (in_array(strtoupper($response['ACK']), ['SUCCESS', 'SUCCESSWITHWARNING'])) {
            // dd('Payment successful');
           //Performing transaction
        $payment_status = $provider->doExpressCheckoutPayment($token, $payerId, $this->projectData($request));
        dd($payment_status);
        }

        dd('Something is wrong.');
    }
}

1 个答案:

答案 0 :(得分:0)

您必须传递三个参数 数据,令牌,PAYERID

数据可以为类似的信息提供服务

$data = array(
    'total' => Total amount,
    'invoice_id' => Invoicen number,
    'invoice_description' => invoice descrption     
);

以及包含名称,价格,desc和数量的商品

相关问题