0

我正在尝试将 Swish Payment 与 m-Commerce Api 集成。

请求的步骤。

  1. 从 Swish Portal 创建一个 .pem 文件
  2. 使用 .p12 文件创建私钥文件
  3. 使用此命令将其转换为 private.key

openssl pkcs12 -in out.p12 -nodes -out private.key -nocerts

  1. 从 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
4

0 回答 0