我需要通过我的网站实现Swish付款电子商务API。SWISH给出的测试代码使用Git Bash工作正常。样本在这里
curl -s -S -i --cert ./Swish_Merchant_TestCertificate_1231181189.pem --key ./Swish_Merchant_TestCertificate_1231181189.key --cacert ./Swish_TLS_RootCA.pem --tlsv1.1 --header "Content-Type: application/json" https://mss.cpc.getswish.net/swish-cpcapi/api/v1/paymentrequests --data '{ "payeePaymentReference" : "0123456789", "callbackUrl" : "https://myfakehost.se/swishcallback.cfm", "payerAlias" : "4671234768", "payeeAlias" : "1231181189", "amount" : "100", "currency" : "SEK", "message" : "Kingston USB Flash Drive 8 GB" }'
但是当我以PHP转换时,它会给我错误卷曲错误#:错误:14094410:SSL例程:SSL3_READ_BYTES:SSLV3警报握手失败
我的php代码在这里
$data = array(
"content-type: application/json",
"accept: application/json",
"payeePaymentReference: 0123456789",
"callbackUrl: https://myfakehost.se/swishcallback.cfm",
"payerAlias: 4671234768",
"payeeAlias: 1231181189",
"amount: 100",
"currency: SEK",
"message: Kingston USB Flash Drive 8 GB"
);
$curl = curl_init();
curl_setopt($curl, CURLOPT_SSLCERT, getcwd() . '/Swish_Merchant_TestCertificate_1231181189.pem');
curl_setopt($curl, CURLOPT_SSLKEY, getcwd() .'/Swish_Merchant_TestCertificate_1231181189.key');
curl_setopt($curl, CURLOPT_SSLKEYPASSWD, 'swish');
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://mss.cpc.getswish.net/swish-cpcapi/v1/paymentrequests/',
CURLOPT_RETURNTRANSFER => TRUE,
CURLOPT_TIMEOUT => 30,
CURLOPT_POSTFIELDS => json_encode($data),
CURLOPT_HTTPHEADER => array(
"content-type: application/json"
)
));
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo "Well:" .$response;
}
您缺少CA证书。
添加以下卷曲选项
curl_setopt($curl, CURLOPT_CAINFO, getcwd() . './Swish_TLS_RootCA.pem');
我认为这里的问题是您的php/libcurl默认为SSLV3,并且mss.cpc.getswish.net
已关闭对SSLV3的支持(大多数网站不再支持它,因为它是不安全的),
1:您正在运行curl_setopt而没有错误检查,修复该
2:您忘记将curlopt_sslversion设置为curl_sslversion_tlsv1_1,修复该
if(!curl_setopt($ch,CURLOPT_SSLVERSION,CURL_SSLVERSION_TLSv1_1)){
throw new RuntimeException('failed to set CURL_SSLVERSION_TLSv1_1');
}
- 但是,鉴于您的php/libcurl安装默认为SSLV3,您的PHP安装可能太旧了,无法使用TLS1.1 ..这意味着您可能需要更新PHP/libcurl安装。