2016-03-07 8 views
12

मैं alredy मेरे एप्लिकेशन में भविष्य के भुगतानों की अनुमति और अभी तक काम नहीं कर का उपयोग करते हुए डेवलपर dashboard.but त्रुटि http://developer.paypal.com/ खोजने के लिए और वहाँ https://developer.paypal.com/developer/accountStatus में प्रवेश करें आप क्या परमिट देख सकते हैं कृपया सक्षम आपके पास।मेरी कोड सैंडबॉक्स paypal भविष्य भुगतान में मुद्दा है

$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; 

आउट यहाँ

{"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

जिज्ञासा से, क्या पेपैल एसडीके का उपयोग करने के लिए एक निश्चित विचलन है? यह बहुत से संभालता है, और स्थिरता सुनिश्चित करता है। मैं पूछता हूं क्योंकि मैं अनुरोध में * वैध * क्लाइंट आईडी और गुप्त दोनों को नहीं देख रहा हूं - मुझे लगता है कि आपको त्रुटियां मिल रही हैं। आईडी बहुत छोटी दिखती है (शायद आपने इसे संपादित किया है, यदि हां, तो इसे अवहेलना करें)। –

+0

उसे अनुरोध में एक भालू टोकन मिला है - जब तक भालू टोकन की समयसीमा समाप्त नहीं हो जाती है तब तक वैध होना चाहिए। –

+0

यदि आप इसे नहीं पढ़ते हैं तो आप इसे देख सकते हैं: https://developer.paypal.com/docs/integration/mobile/make-future-payment/, 'एथ कोड प्राप्त करें' – HardikDG

उत्तर

2

जैसा कि मैंने किसी को भी किसी भी समाधान नहीं मिला तो मैं कदम और पाया समाधान के आधार पर अपने कोड कदम में खोदे गए।

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

डाल मैं एक Paypal मॉड्यूल बनाया है, उम्मीद है कि इस कोड आप में मदद मिलेगी।

$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 ($ डेटा) वहाँ अतिरिक्त जानकारी है कि लेनदेन तुम क्या करने की कोशिश कर रहा हो सकता है के लिए उपयोगी नहीं हो सकता हैं, लेकिन यह एक उदाहरण है।

{ 
    "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": { 
        [...] 
       } 
      } 
     } 
    ] 
} 
संबंधित मुद्दे