2016-03-07 16 views
12

ho giá abilitare futuro l'autorizzazione dei pagamenti nella mia app e utilizzando dashboard.but sviluppatore non ancora lavorando prega di trovare errore http://developer.paypal.com/ e accedere https://developer.paypal.com/developer/accountStatus lì si può vedere ciò che i permessi hai.Qual è problema nel mio codice Sandbox PayPal Payment futuro

$data = array(
       "intent" => "authorize", 
       "payer" => array(
        "payment_method" => "paypal" 
       ), 
       "transactions" => array(
        array("amount" => array(
         "currency" => "USD", 
         "total" => "1.88" 
        ), 
         "description" => "future of sauces") 
       )); 

     $data_string = json_encode($data); 
     $ch = curl_init(); 
     curl_setopt($ch, CURLOPT_URL, "https://api.sandbox.paypal.com/v1/payments/payment"); 
     $headers = array(
      'Content-Type: application/json', 
      'PayPal-Client-Metadata-Id: d6743cbb53ea4470a53bfe458f0cb885', 
      'Authorization: Bearer A103.B7d5318JDS6NA1zGh02avjCx16oxnBPadUat5z9SlGVGEiOhoAeMuqyz0anGSICS.FAkzECypTS1IXfemHcpVa5yyrGu', 
     ); 
     curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 
     //curl_setopt($ch, CURLINFO_HEADER_OUT, true); 
     curl_setopt($ch, CURLOPT_POST, true); 
     curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string); 
     $result = curl_exec($ch); 
     $information = curl_getinfo($ch); 
     curl_close($ch); 
     print_r($information); 
     die; 

fuori messa qui

{"name":"PERMISSION_DENIED","message":"No permission for the requested operation","information_link":"https://developer.paypal.com/docs/api/#PERMISSION_DENIED","debug_id":"5b39efd4cf370"}Array 
(
    [url] => https://api.sandbox.paypal.com/v1/payments/payment 
    [content_type] => application/json 
    [http_code] => 403 
    [header_size] => 592 
+0

Per curiosità, c'è una certa avversione all'utilizzo dell'SDK di PayPal? Gestisce molto di questo e garantisce la coerenza. Chiedo perché non vedo un ID client e un segreto * valido * nella richiesta: penso che sia per questo che si ottengono errori. L'ID sembra essere troppo piccolo (forse lo hai modificato, in tal caso, ignoralo). –

+0

Ha un token al portatore nella richiesta - che dovrebbe essere valido fino a quando il token al portatore non è scaduto. –

+0

È possibile controllare questo se non hai letto questo: https://developer.paypal.com/docs/integration/mobile/make-future-payment/, controlla i passaggi indicati nella sezione "Ottieni un codice di autenticazione" – HardikDG

risposta

2

Come non ho ottenuto alcuna soluzione da nessuno quindi ho scavato nel mio codice passo dopo passo e la soluzione trovata.

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.'); 

    } 
} 
2

Ho fatto un modulo Paypal, spero che questo codice dovrebbe aiutare.

$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 ($ dati) ci sono informazioni aggiuntive che potrebbe non essere utile per la transazione si potrebbe cercando di fare, ma è un esempio.

{ 
    "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": { 
        [...] 
       } 
      } 
     } 
    ] 
} 
Problemi correlati