Rest API 定期支付更新订阅计划问题

时间:2020-12-23 09:40:32

标签: php paypal-sandbox payment paypal-ipn subscription

这是我更新定期付款计划的代码。请对此更新 PayPal 支付 Rest API 提出任何建议。

        if ($plan_id == 1) {
            $product_id = 'plan id 1';
        }elseif ($plan_id == 2) {
            $product_id = 'plan id 2'; 
        }


        $ch = curl_init();
        $clientId ='XXXXXXXX';
        $clientSecret= 'XXXXXXXXX';

        curl_setopt($ch, CURLOPT_URL, "https://api.sandbox.paypal.com/v1/oauth2/token");
        curl_setopt($ch, CURLOPT_HEADER, false);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
        curl_setopt($ch, CURLOPT_USERPWD, $clientId.":".$clientSecret);
        curl_setopt($ch, CURLOPT_POSTFIELDS, "grant_type=client_credentials");

        $result = curl_exec($ch);

        if(empty($result))die("Error: No response.");
        else
        {
            $json = json_decode($result);
        }
        curl_close($ch);

        $transaction_id = Subscription::select('transaction_id')->where('userid',$user_id)->where('subscription_status','=','active')->first();
        
        $curl = curl_init();

        curl_setopt_array($curl, array(
          CURLOPT_URL => 'https://api-m.sandbox.paypal.com/v1/billing/subscriptions/'.$transaction_id->transaction_id.'/revise',
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_ENCODING => '',
          CURLOPT_MAXREDIRS => 10,
          CURLOPT_TIMEOUT => 0,
          CURLOPT_FOLLOWLOCATION => true,
          CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
          CURLOPT_CUSTOMREQUEST => 'POST',
          CURLOPT_POSTFIELDS =>'{
          "plan_id": '.$product_id.',
          "shipping_amount": {
            "currency_code": "USD",
            "value": "10.00"
          },
          "shipping_address": {
            "name": {
              "full_name": "John Doe"
            },
            "address": {
              "address_line_1": "",
              "address_line_2": "",
              "admin_area_2": "",
              "admin_area_1": "",
              "postal_code": "",
              "country_code": "US"
            }
          },
          "application_context": {
            "brand_name": "",
            "locale": "",
            "shipping_preference": "SET_PROVIDED_ADDRESS",
            "payment_method": {
              "payer_selected": "PAYPAL",
              "payee_preferred": "UNRESTRICTED"
            },
            "return_url": "https://example.com/returnUrl",
            "cancel_url": "https://example.com/cancelUrl"
          }
        }',
          CURLOPT_HTTPHEADER => array(
            'Content-Type: application/json',
            'Authorization: Bearer '.$json->access_token.''
          ),
        ));

        $response = curl_exec($curl);

        curl_close($curl);

我只是向您展示我的代码片段。

此代码显示此错误。问题是,当我更新我的订阅计划时,我没有看到更新订阅计划的状态。简而言之,我的代码有问题,或者有什么问题。

        {
"name": "UNPROCESSABLE_ENTITY",
"message": "The requested action could not be performed, semantically incorrect, or failed business validation.",
"debug_id": "001e1c2b0009a",
"details": [
    {
        "issue": "PLAN_PRODUCT_NOT_COMPATIBLE",
        "description": "The old and the new plans should be for the same product."
    }
],
"links": [
    {
        "href": "https://developer.paypal.com/docs/api/v1/billing/subscriptions#UNPROCESSABLE_ENTITY",
        "rel": "information_link",
        "method": "GET"
    }
]

}

0 个答案:

没有答案