首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有证书和密钥文件的php curl未与swish支付api连接

带有证书和密钥文件的php curl未与swish支付api连接
EN

Stack Overflow用户
提问于 2019-03-21 21:43:11
回答 2查看 876关注 0票数 0

我需要实现与我的网站支付电子商务API。使用Git Bash可以很好地测试swish提供的代码。样本在这里

代码语言:javascript
复制
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中转换它时,它给我错误错误#:cURL :14094410:SSL routines:ssl3_read_bytes:sslv3警报握手失败。

我的php代码在这里

代码语言:javascript
复制
    $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;
}
EN

回答 2

Stack Overflow用户

发布于 2022-01-29 00:48:36

您缺少CA证书。

添加以下curl选项

代码语言:javascript
复制
curl_setopt($curl, CURLOPT_CAINFO, getcwd() . './Swish_TLS_RootCA.pem');
票数 1
EN

Stack Overflow用户

发布于 2019-03-22 01:27:53

我认为这里的问题是你的php/libcurl默认为SSLv3,而且mss.cpc.getswish.net已经关闭了对SSLv3的支持(大多数网站不再支持它,因为它不安全)。

1:您正在运行curl_setopt而不进行错误检查,请解决此问题

2:您忘记将CURLOPT_SSLVERSION设置为CURL_SSLVERSION_TLSv1_1,请修复此问题

代码语言:javascript
复制
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安装。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55281820

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档