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;
}