PHP cURL POST返回不支持的媒体类型

时间:2016-01-24 21:19:11

标签: php ssl curl

目前正致力于整合新的电子商务API(Swish),但有一点困难。我在我的应用程序中使用PHP和cURL来执行与Merchant Simulator的测试连接。代码如下:

$post = array(
    "payeePaymentReference"=> "0123456789",
    "callbackUrl"=> "https://myssldomain.com",
    "payerAlias"=> "4671234768",
    "payeeAlias"=> "1231181189",
    "amount"=> "100", 
    "currency"=> "SEK",
    "message"=> "Kingston USB Flash Drive 8 GB"
);

$ch = curl_init(); 

curl_setopt($ch,CURLOPT_RETURNTRANSFER, false); 
curl_setopt($ch,CURLOPT_HEADER, true);
curl_setopt($ch,CURLOPT_URL, 'https://mss.swicpc.bankgirot.se/swish-cpcapi/api/v1/paymentrequests/'); 
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($ch,CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch,CURLOPT_POSTFIELDS, $post);
curl_setopt($ch,CURLOPT_SSLKEY, 'sslkey.key');
curl_setopt($ch,CURLOPT_SSLCERT, 'sslcert.crt');
curl_setopt($ch, CURLOPT_CAINFO, 'cainfo.crt');

$data = curl_exec($ch);

$error = curl_error($ch);

curl_close($ch); 

var_dump($data);

注意:post-array中的callback-url是不同的。我在那里设置了一个有效的SSL域作为回调URL。

进行上述代码时得到的答案是:

HTTP/1.1 415 Unsupported Media Type
Server: Apache-Coyote/1.1
Accept-Ranges: bytes
ETag: W/"0-1448896356000"
Last-Modified: Mon, 30 Nov 2015 15:12:36 GMT
Content-Type: text/html
Content-Length: 0
Date: Sun, 24 Jan 2016 21:07:00 GMT

如果您下载测试工具(Guide Testverktyg),则可以在Swish's API site找到SSL证书的3个部分。谁能告诉我我做错了什么?

2 个答案:

答案 0 :(得分:1)

您是否尝试过添加

curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));

答案 1 :(得分:0)

如果您将一个数组直接发布到POST,它将转移为Content-Type: multipart/form-data; boundary=----------------------------,这就是为什么您收到此不受支持的媒体类型错误的原因。

在您的阵列上使用http_build_query,您应该没问题,因为它会将数据发送为Content-Type: application/x-www-form-urlencoded

curl_setopt($ch,CURLOPT_POSTFIELDS, http_build_query($post));