What is issue in my code Sandbox paypal future payment What is issue in my code Sandbox paypal future payment curl curl

What is issue in my code Sandbox paypal future payment


I made a Paypal Module, hope this code would help you.

$result_json = json_decode($result);/* Check if authentication is valid */if (isset($result_json->access_token)){    $enc_data = json_encode($data);    $ch = curl_init();    curl_setopt($ch, CURLOPT_URL, 'https://api.sandbox.paypal.com/v1/payments/payment');    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, !in_array($_SERVER['REMOTE_ADDR'], array('127.0.0.1', '::1')));    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);    curl_setopt($ch, CURLOPT_VERBOSE, true);    curl_setopt($ch, CURLOPT_POST, true);    curl_setopt($ch, CURLOPT_POSTFIELDS, $enc_data);    curl_setopt($ch, CURLOPT_HTTPHEADER, array(        'Content-Type: application/json',        'Authorization: Bearer '.$result_json->access_token,        'PayPal-Client-Metadata-Id: ************'    ));    $result = curl_exec($ch);    $json_result = json_decode($result);    curl_close($ch);}

json_encode($data) there are additional information that may not be useful for the transaction you might trying to do but it is an example.

{    "intent": "sale",    "payer": {        "payment_method": "credit_card",        "payer_info": {            "email": "...",            "shipping_address": {                [...]            }        },        "funding_instruments": [            {                "credit_card": {                    [...]                    }                }            }        ]    },    "transactions": [        {            "amount": {                "total": 32.91,                "currency": "USD"            },            "item_list": {                "items": [                    {                        "quantity": 1,                        "name": "Product Name",                        "price": 16.51,                        "currency": "USD"                    },                    {                        "quantity": 1,                        "name": "Product Name 2",                        "price": "16.40",                        "currency": "USD"                    },                    {                        "quantity": 1,                        "name": "Shipping",                        "price": 0,                        "currency": "USD"                    }                ],                "shipping_address": {                    [...]                }            }        }    ]}


As I didn't get any solution from anybody so I dug into my code step by step and found solution.

function paypalFuturePayment($userID,$amount){    $amount=number_format($amount,2);    /* paypal App truxx dev client and secret key*/    if($userID && $amount){    $userData = selectById('tbl_users','*',"id='".$userID."'");    $refresh_token = $userData['paypal_refresh_tokens'];    $Metadata_id = $userData['paypal_metadata_id'];    if($refresh_token && $Metadata_id){        if ($_SERVER['SERVER_NAME'] == 'syonserver.com') {            $clientId = "xxxxx";            $secret = "xxx";            $url1="https://api.sandbox.paypal.com/v1/oauth2/token";            $url2="https://api.sandbox.paypal.com/v1/payments/payment";        }else{            $account = 0; // 0 for sandbox ,1 for live            if ($account == 1) {                //client live                $clientId = "xxx";                $secret = xxx";                $url1 = "https://api.paypal.com/v1/oauth2/token";                $url2 = "https://api.paypal.com/v1/payments/payment";            } else {                //client sandbox                $clientId = "xxx";                $secret = "xxx";                $url1 = "https://api.sandbox.paypal.com/v1/oauth2/token";                $url2 = "https://api.sandbox.paypal.com/v1/payments/payment";        }    }//print_r($refresh_token);die;        $ch = curl_init();        curl_setopt($ch, CURLOPT_URL, $url1);        curl_setopt($ch, CURLOPT_HEADER, "Content-Type: application/x-www-form-urlencoded");        curl_setopt($ch, CURLOPT_USERPWD, $clientId . ":" . $secret);        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);        curl_setopt($ch, CURLOPT_POSTFIELDS, "grant_type=refresh_token&refresh_token=" . $refresh_token);        $result = curl_exec($ch);        curl_close($ch);        $result=json_decode($result);       //11111111   for payment Authorize: For example, to first authorize the payment, use a request similar to this:        $access_token =  $result->access_token;        $data = array(            "intent" => "authorize",            "payer" => array(                "payment_method" => "paypal"            ),            "transactions" => array(                array("amount" => array(                    "currency" => "USD",                    "total" => $amount                ),                    "description" => "future of sauces")            ));        $data_string = json_encode($data);        $ch1 = curl_init();        curl_setopt($ch1, CURLOPT_URL, $url2);        $headers = array(            'Content-Type: application/json',            'PayPal-Client-Metadata-Id: '.$Metadata_id,            'Authorization: Bearer '.$access_token,            'Content-Length: ' . strlen($data_string)        );        curl_setopt($ch1, CURLOPT_HTTPHEADER, $headers);        curl_setopt($ch1, CURLOPT_POST, true);        curl_setopt($ch1, CURLOPT_RETURNTRANSFER, 1);        curl_setopt($ch1, CURLOPT_POSTFIELDS, $data_string);        $result1 = curl_exec($ch1);        curl_close($ch1);        $result1=json_decode($result1);        $message  = $result1->message;       if($result1->state=='approved'){           $access_id=  $result1->transactions[0]->related_resources[0]->authorization->id;       }else{           if(empty($message)){               $message ='Authorization error, Please try again.';           }           return array('response' => '', 'success' => '0','message'=>$message);       }       // print_r($result1);die;      //2222222   capture the payment:        $data =  array("amount" => array(            "currency" => "USD",            "total" => $amount        ),            "is_final_capture" => "true"        );        $data_string = json_encode($data);        $ch2 = curl_init();        if ($_SERVER['SERVER_NAME'] == 'syonserver.com') {            curl_setopt($ch2, CURLOPT_URL, "https://api.sandbox.paypal.com/v1/payments/authorization/$access_id/capture");        }else {            $account = 0; // 0 for sandbox ,1 for live            if ($account == 1) {                //client live             curl_setopt($ch2, CURLOPT_URL, "https://api.paypal.com/v1/payments/authorization/$access_id/capture");        }else{                curl_setopt($ch2, CURLOPT_URL, "https://api.sandbox.paypal.com/v1/payments/authorization/$access_id/capture");            }        }        $headers = array(            'Content-Type: application/json',            'Authorization: Bearer '.$access_token,            'Content-Length: ' . strlen($data_string)        );        curl_setopt($ch2, CURLOPT_HTTPHEADER, $headers);        curl_setopt($ch2, CURLOPT_POST, true);        curl_setopt($ch2, CURLOPT_RETURNTRANSFER, 1);        curl_setopt($ch2, CURLOPT_POSTFIELDS, $data_string);        $response = curl_exec($ch2);        curl_close($ch2);        $response_a = json_decode($response, true);        $state = $response_a['state'];        $message = $response_a['message'];        if(!empty($response_a)){            if($state=='completed') {                return array('response' => $response_a, 'success' => '1','message'=>'Data received');            }else{                if(empty($message)){                    $message ='Payment authorization error, Please try again.';                }                return array('response' => '', 'success' => '0','message'=>$message);             }        }       else{           return array('response' => '','success'=>'0','message'=>'Response nil');           }        }      else        {            return array('response' => '', 'success' => '0','message'=>'Authorization code not available.');        }}else{        return array('response' => '', 'success' => '0','message'=>'Unauthorize request.');    }}