簡體   English   中英

使用Paypal REST API和PHP cURL發布發票(草稿)不斷返回415不支持的媒體類型

[英]Using Paypal REST api and PHP cURL to post invoice (draft) constantly returns 415 Unsupported Media Type

我在他們的網站上使用paypal的創建發票樣本json

我得到一個令牌足夠好,我用帖子提交,因為錯誤不是401未經授權而是415不支持的媒體類型(現在最近500內部服務器錯誤)讓我相信我可能會得到那部分是正確的...所以我會提供一些代碼,希望有人能抓住一些我不知道的東西:

createPaypalInvoice.php

function paypalCreateDraftRequest($token,$jsondraft){
    global $url;
    $sUrl = "/v1/invoicing/invoices";
    $accept = "Accept:application/json";
    $acceptlang = "Accept-Language:en_US";
    $contenttype = "Content-Type: application/json";
    $contentlen = "Content-Length: " . strlen($jsondraft);
            // $jsondraft is a string of json from paypal example
    $authorization = "Authorization: Bearer ".$token["access_token"];
    $headers = array($accept,$acceptlang,$contenttype,$contentlen,$authorization);
    $fields_string = $jsondraft;
    $ch = curl_init();
    $options = array (CURLOPT_RETURNTRANSFER => true, // return web page
        CURLOPT_FAILONERROR => true,
        CURLOPT_URL => $url.$sUrl,
        CURLOPT_HTTPHEADER => $headers,
        CURLOPT_CUSTOMREQUEST => "POST",
        CURLOPT_POSTFIELDS => $fields_string,
        CURLOPT_HEADER => false,                      // don't return headers
        CURLOPT_SSL_VERIFYPEER => false,              // TODO: fix certificate provider list problem later
        CURLOPT_CONNECTTIMEOUT => 6,                  // timeout on connect
        CURLOPT_TIMEOUT => 10  );                      // timeout on response

    curl_setopt_array ( $ch, $options );
    try {
        $result=curl_exec( $ch );
        $log->LogDebug($result);
        //$header = curl_getinfo ( $ch );
        $err = curl_errno ( $ch );
        $errmsg = curl_error ( $ch );
        curl_close($ch);
        if ($errmsg) throw new Exception($errmsg);
        return $result;
     } catch (Exception $e) {  throw $e;  }

}

paypal的示例發票:

{
    "merchant_info": {
    "email": "dennis@sample.com",
        "first_name": "Dennis",
        "last_name": "Doctor",
        "business_name": "Medical Professionals, LLC",
        "phone": {
        "country_code": "001",
            "national_number": "5032141716"
    },
    "address": {
        "line1": "1234 Main St.",
            "city": "Portland",
            "state": "OR",
            "postal_code": "97217",
            "country_code": "US"
    }
},
    "billing_info": [
    {
        "email": "example@example.com"
    }
],
    "items": [
    {
        "name": "Sutures",
        "quantity": 100,
        "unit_price": {
            "currency": "USD",
            "value": 5
        }
    }
],
    "note": "Medical Invoice 16 Jul, 2013 PST",
    "payment_term" :{
    "term_type": "NET_45"
},
    "shipping_info": {
    "first_name": "Sally",
        "last_name": "Patient",
        "business_name": "Not applicable",
        "address": {
        "line1": "1234 Broad St.",
            "city": "Portland",
            "state": "OR",
            "postal_code": "97216",
            "country_code": "US"
        }
    }
}

我發現了這個問題:

從paypal的發票文件:

注意:發票中指定的商家必須擁有信譽良好的PayPal帳戶。

顯然,不應使用示例帳戶“dennis@sample.com”。 當我使用自己的沙盒帳戶獲取商家信息時,一切都神奇地起作用了......

也許其他人可能有這個問題,現在解決方案已經發布。 也許我的示例代碼也可能有幫助......

我無法找到顯示在PayPal REST文檔中使用Accept / Accept-Language的示例。

$accept = "Accept:application/json";
$acceptlang = "Accept-Language:en_US";

我會從你的標題中刪除這些,看看這是否會改變你得到的錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM