【问题标题】:What is issue in my code Sandbox paypal future payment我的代码沙盒贝宝未来付款有什么问题
【发布时间】:2016-06-20 15:39:27
【问题描述】:

我已经在我的应用中启用了未来的付款权限并使用开发者仪表板。但还没有工作,请查找错误 http://developer.paypal.com/ 并登录 https://developer.paypal.com/developer/accountStatus 在那里你可以看到你有什么许可证。

 $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

【问题讨论】:

  • 出于好奇,使用 PayPal SDK 是否有一定的反感?它处理了很多,并确保了一致性。我问是因为我在请求中没有看到 valid Client ID 和 Secret - 我认为这就是你收到错误的原因。 ID 看起来太小了(也许你把它删掉了,如果是,请忽略这个)。
  • 他在请求中有一个不记名令牌——只要不记名令牌没有过期,它就应该是有效的。
  • 如果您没有阅读此内容,可以查看此内容:developer.paypal.com/docs/integration/mobile/…,请查看“获取授权码”中提到的步骤
  • 您是在使用 https 拨打电话吗?

标签: php ios curl paypal paypal-sandbox


【解决方案1】:

我做了一个 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($data) 有一些附加信息可能对您可能尝试执行的事务没有用,但这只是一个示例。

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

【讨论】:

    【解决方案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.');
    
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2012-02-03
      • 2017-08-28
      • 2016-05-07
      • 1970-01-01
      • 2017-08-23
      • 2011-10-08
      • 2013-03-08
      • 2016-07-29
      • 2018-04-17
      相关资源
      最近更新 更多