銀行のリンクを完成させるのに行き詰まっていて、署名が間違っているという応答があります。
これは銀行が送った署名部分のマニュアルです
デジタル署名MACは、送信者の秘密鍵で暗号化されたXMLデータハッシュ値です。
ハッシュ値の計算にはSHA-1アルゴリズムが使用されますが、署名の計算にはRSAアルゴリズムが使用されます。デジタル署名は、BASE64エンコーディングを使用してテキスト形式に変換され、MACフィールドに配置されます。
そして私が築き上げてきたもの:
// the key is loaded succesfull
private function setPrivateKey ( $key_name ) {
$fp = fopen( $this -> getKeyLocation() . '/' . $key_name, "r" );
$priv_key = fread( $fp, 8192 );
fclose( $fp );
$this -> private_key = openssl_get_privatekey( $priv_key );
}
// signature is created, but not the way bank expects it
private function setSignature () {
// also tried sha1( $data, true );
// signature contains no special chars ( meaning no UTF8 specific coding )
$pre_mac = sha1( $this -> getXMLData() );
openssl_sign( $pre_mac, $signature, $this -> getPrivateKey() );
$this -> signature = $signature;
}
// can't be a problem here
private function setMac () {
$this -> mac = base64_encode( $this -> getSignature() );
}
// this is set correctly
private function setXMLData () {
$bank_xml = '<?xml version="1.0" ?>
<bl>
<snd>PHP_COMPANY</snd>
<query>NEW</query>
<type>PHP_TYPE</type>
<data>
<client_id>A71045</client_id>
<amount>PHP_AMOUNT</amount>
<ccy_name>PHP_CURR</ccy_name>
<ccy_code>1</ccy_code>
<bnf_name>PHP_COMPANY</bnf_name>
<bnf_account>PHP_ACCOUNT</bnf_account>
<bnf_id>PHP_CID</bnf_id>
<residence_id>LV</residence_id>
<residence_name>LV-LATVIA</residence_name>
<details>PHP_DETAILS</details>
</data>
<date>PHP_DATE</date>
<time>PHP_TIME</time>
<reply>
<session_id>PHP_SESSION</session_id>
</reply>
<reply_url>PHP_REPLY</reply_url>
</bl>';
$this -> bank_xml = $bank_xml;
}
私はそれを正しく暗号化していないようです。何が間違っている可能性がありますか?私は銀行が必要とするすべてのステップを踏んだと信じています。
私はすでにこれを銀行に送りました、しかし彼らは一週間かそこらで応答します。
PS:get関数はすべて、設定された変数を返すように設定されています。投稿する必要はないと思いました。