目前正致力于整合新的电子商务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个部分。谁能告诉我我做错了什么?
答案 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));