LePay融合支払いプロセス

2109 ワード

開発ドキュメント:https://lepay.unionpay95516.cc/payapi/apiPOST方式のパラメータインタフェースアドレス:https://openapi.unionpay95516.cc/pre.lepay.api/order/add開発には証明書が必要ですpdtclient.pfxおよび署名証明書pdtserver.pem鍵を取得するにはファイルリソースハンドルを取得する必要があるので、CIフレームワークでfileファイル補助関数のread_を使用しました.file関数は、ファイルパスがindexに対して相対する.phpエントリファイルが存在するパスインタフェースに必要なパラメータは、開発ドキュメントを参照し、署名プロセスについて説明します.暗号化に必要なpdtclient.pfxは証明書ファイルであるため、証明書鍵を用いて関連データを取得する必要がある.
  •     //       
        function getSignCertId($cert_path, $cert_pwd) {
            $pkcs12certdata = read_file ( $cert_path );
            openssl_pkcs12_read ( $pkcs12certdata, $certs, $cert_pwd ); //         PKCS12   ,     ,      ,   cert pkey(private_key)
            $x509data = $certs ['cert'];
            openssl_x509_read ( $x509data ); //  cert
            $certdata = openssl_x509_parse ( $x509data ); x509       
            $cert_id = $certdata ['serialNumber']; //     
            return $cert_id;
        }
        //  
        function sign(&$params, $cert_path, $cert_pwd) {
            if(isset($params['signature'])){
                unset($params['signature']);
            }
            //    key=val& 
            $params_str = createLinkString ( $params, true, false );
            // $log->LogInfo ( "  key=val&...  >" . $params_str );
    
            $params_sha1x16 = sha1 ( $params_str, FALSE ); //sha1  
    
            $private_key = getPrivateKey ( $cert_path, $cert_pwd );
            //   
            $sign_falg = openssl_sign ( $params_sha1x16, $signature, $private_key, OPENSSL_ALGO_SHA1 );
            if ($sign_falg) {
                $signature_base64 = base64_encode ( $signature );
                $params ['signature'] = $signature_base64;
            } else {
                // $log->LogInfo ( ">>>>>    <<<<<<LogInfo ( '   [signature] key=val& >' . $params_str );
            $signature = base64_decode (    $signature_str  );
            $params_sha1x16 = sha1 ( $params_str, FALSE ););    
            $isSuccess = openssl_verify ( $params_sha1x16, $signature,$public_key  ,OPENSSL_ALGO_SHA1 );//
            return $isSuccess;
        }