我正在尝试将 Swish Payment 与 m-Commerce Api 集成。
请求的步骤。
- 从 Swish Portal 创建一个 .pem 文件
- 使用 .p12 文件创建私钥文件
- 使用此命令将其转换为 private.key
openssl pkcs12 -in out.p12 -nodes -out private.key -nocerts
- 从 Swish 下载 Swish_TLS_RootCA.pem 文件
这是我提出请求的方法。如您所见,我还尝试了 v2 和 v1 版本的 api。V2 被评论。v2 也返回相同的响应。
function createPaymentRequest()
{
// $ch = curl_init('https://cpc.getswish.net/swish-cpcapi/api/v2/paymentrequests/11A86BE70EA346E4B1C39C874173F088');
// curl_setopt($ch, CURLOPT_PUT, true);
$ch = curl_init('https://cpc.getswish.net/swish-cpcapi/api/v1/paymentrequests');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, '2');
curl_setopt($ch, CURLOPT_VERBOSE, true);
curl_setopt($ch, CURLOPT_STDERR, fopen('php://output', 'w'));
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($ch,CURLOPT_FAILONERROR,true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// curl_setopt($ch, CURLOPT_PROXY_SSLCERTTYPE, "PKCS12");
curl_setopt($ch, CURLOPT_CAINFO, getcwd()."/public/Getswish_Test_Certificates/Swish_TLS_RootCA.pem");
curl_setopt($ch, CURLOPT_SSLCERT, getcwd() . "/public/Getswish_Test_Certificates/swish_certificate_202103261346.pem");
curl_setopt($ch, CURLOPT_SSLKEY, getcwd() . "/public/Getswish_Test_Certificates/private.key");
curl_setopt($ch, CURLOPT_SSLKEYPASSWD, "password");
// curl_setopt($ch, CURLOPT_SSLCERTPASSWD, "password");
curl_setopt(
$ch,
CURLOPT_HEADERFUNCTION,
function ($curl, $header) use (&$headers) {
// this function is called by curl for each header received
$len = strlen($header);
$header = explode(':', $header, 2);
if (count($header) < 2) {
// ignore invalid headers
return $len;
}
$name = strtolower(trim($header[0]));
echo "[" . $name . "] => " . $header[1];
return $len;
}
);
$data = array(
// "payeePaymentReference" => "0123456789",
"callbackUrl" => "https://www.kvkkolay.com/kiosk/auth",
// "payerAlias" => "4671234768",
"payeeAlias" => "swishNumber",
"amount" => "100",
"currency" => "SEK",
"message" => "Kingston USB Flash Drive 8 GB"
);
$data_string = json_encode($data);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Content-Length: ' . strlen($data_string)
));
// $response = curl_exec($ch);
// if (curl_errno($ch)) {
// echo 'Request Error:' . curl_error($ch);
// }else{
// echo $response;
// }
$info = curl_getinfo($ch);
print_r($info);
if (!$response = curl_exec($ch)) {
trigger_error(curl_error($ch));
}
curl_close($ch);
// $this->getPaymentRequest();
}
这里的连接问题是日志消息。我搜索所有与 swish 和 ssl 相关的问题,但没有任何帮助。有人可以帮忙吗?
* 即将 connect() 到 cpc.getswish.net 端口 443 (#0) * 正在尝试 213.132.115.86... * 已连接到 cpc.getswish.net (213.132.115.86) 端口 443 (#0) * 使用 certpath 初始化 NSS : sql:/etc/pki/nssdb * CAfile: /home/kvkkolay/public_html/public/Getswish_Test_Certificates/Swish_TLS_RootCA.pem CApath: 无 * NSS: 来自文件的客户端证书 * 主题: C=SE,O=9697326040,CN=1232900561 * 开始日期:格林威治标准时间 2021 年 3 月 26 日 10:46:36 * 到期日期:格林威治标准时间 2026 年 3 月 26 日 10:46:26 * 通用名称:1232900561 * 发行人:CN=Swedbank Customer CA1 v2 for Swish,serialNumber=SWEDSESS,O=Swedbank AB (publ),C=SE * NSS 错误 -12227 (SSL_ERROR_HANDSHAKE_FAILURE_ALERT) * SSL 对等方无法协商一组可接受的安全参数。* 关闭连接 0