1

Payboxクレジットカード取引ソリューションを統合しようとしています。

私は少なくとも100の異なるソリューションを試しましたが(冗談ではありません)、誰も機能せず、「Problèmed'identification ducommerce。Accèsrefusé!」を取得するたびに。メッセージ(フランス語)。

これが私が持っている最も「安定した」コードです:

<?php

function gen_hmac($site, $rang, $identifiant, $devise, $cmd, $porteur, $hash, $time, $total, $retour, $key) {
    $msg = "PBX_SITE=". $site 
        ."&PBX_RANG=". $rang 
        ."&PBX_IDENTIFIANT=". $identifiant 
        ."&PBC_TOTAL=". $total 
        ."&PBX_DEVISE=". $devise 
        ."&PBC_CMD=". $cmd 
        ."&PBC_PORTEUR=". $porteur 
        ."&PBC_RETOUR=". $retour 
        ."&PBC_HASH=". $hash 
        ."&PBC_TIME=" . $time ; 
        $binkey = pack("H*", $key);
        echo "<!-- " . $msg . " -->";
        $hmac = strtoupper(hash_hmac('sha512', $msg, $binkey));
        echo "<!-- " . $hmac . " -->";
    return $hmac;
}

    // static
    $site = 1999888;
    $rang = 32;
    //$identifiant = 110647233;
    $identifiant = 107904482;
    $devise = 978;
    $hash = "SHA512";
    $key = "0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF";
    $cmd = "TEST Paybox";
    $porteur = "test@paybox.com";
    $time = date("c");
    //$time = "2011-02-28T11:01:50+01:00";

    // variable
    $total = 1000;
    //$retour = "ref:R;trans:T;auto:A;tarif:M;abonnement:B;pays:Y;erreur:E";
    $retour = "Mt:M;Ref:R;Auto:A;Erreur:E";
    $hmac = gen_hmac($site, $rang, $identifiant, $devise, $cmd, $porteur, $hash, $time, $total, $retour, $key);

?>

<html>
<head>
<title>Paybox TEST</title>
</head>
<body>
<?php
//print_r(hash_algos());    
?>
<form method="POST" action="https://preprod-tpeweb.paybox.com/cgi/MYchoix_pagepaiement.cgi">
<!--<form method="POST" action="https://preprod-tpeweb.paybox.com/cgi/MYframepagepaiement_ip.cgi">-->
<!--<form method="POST" action="https://preprod-tpeweb.paybox.com/cgi/ChoixPaiementMobile.cgi">-->
    <input type="hidden" name="PBX_SITE" value="<?php echo $site; ?>" />
    <input type="hidden" name="PBX_RANG" value="<?php echo $rang; ?>" />
    <input type="hidden" name="PBX_IDENTIFIANT" value="<?php echo $identifiant; ?>" />
    <input type="hidden" name="PBX_TOTAL" value="<?php echo $total; ?>" />
    <input type="hidden" name="PBX_DEVISE" value="<?php echo $devise; ?>" />
    <input type="hidden" name="PBX_CMD" value="<?php echo $cmd; ?>" />
    <input type="hidden" name="PBX_PORTEUR" value="<?php echo $porteur; ?>" />
    <input type="hidden" name="PBX_RETOUR" value="<?php echo $retour; ?>" />
    <input type="hidden" name="PBX_HASH" value="<?php echo $hash; ?>" />
    <input type="hidden" name="PBX_TIME" value="<?php echo $time; ?>" />
    <input type="hidden" name="PBX_HMAC" value="<?php echo $hmac; ?>" />
    <!--<input type="hidden" name="PBX_REFUSE" value="http://test.fr/" />
    <input type="hidden" name="PBX_ANNULE" value="http://test.fr/" />
    <input type="hidden" name="PBX_EFFECTUE" value="http://test.fr/" />-->
    <input type="submit" value="envoyer" />
</form>
</body>
</html>

ほとんどの統計値は、ペイボックステストのドキュメントからのものです。

それで、私のコードの何が問題になっているのか、またはペイボックスサーバーに送信されるものの何が問題になっているのかを詳しく知る方法を知っていますか?

心から

編集: 私の目標についての詳細。私の本当の必要性はこれをJavaでコーディングすることですが、最終的に役立つphpのコードサンプルがいくつかありました。

ここで、Javaでクリーンなhmac/sha512を生成する方法を見つけようとします。

<?php 
$key = "0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF";
$binkey = pack("H*", $key); 
echo strtoupper(hash_hmac('sha512', "ABC", $binkey)); 
?>

出力:100A6A016A4B21AE120851D51C93B293D95B7D8A44B16ACBEFC2D1C9DF02B6F54FA3C2D6802E52FED5DF8652DDD244788A204682D2D1CE861FDA4E67F2792643

では、Javaで同じhmacアルゴリズムを再作成するにはどうすればよいでしょうか。

私はたくさんのことを試みましたが、誰も私の目標を達成しませんでしたが、これが私が現在持っているものです:

private String generateHMAC( String datas )
    {

        //                final Charset asciiCs = Charset.forName( "utf-8" );
        Mac mac;
        String result = "";
        try
        {
            byte[] bytesKey = PayboxConstants.KEY.getBytes( );
            final SecretKeySpec secretKey = new SecretKeySpec( bytesKey, "HmacSHA512" );
            mac = Mac.getInstance( "HmacSHA512" );
            mac.init( secretKey );
            final byte[] macData = mac.doFinal( datas.getBytes( ) );
            byte[] hex = new Hex( ).encode( macData );
            result = new String( hex, "ISO-8859-1" );
        }
        catch ( final NoSuchAlgorithmException e )
        {
            AppLogService.error( e );
        }
        catch ( final InvalidKeyException e )
        {
            AppLogService.error( e );
        }
        catch ( UnsupportedEncodingException e )
        {
            AppLogService.error( e );
        }

        return result.toUpperCase( );

    }

ただし、その出力は次のとおりです。AA6492987D7A7AC81109E877315414806F1973CC47B897ECE713171A25A11B279329B1BFF39EA72A5EFB7EDCD71D1F34D5AAC49999A780BD13F019ED99685B80

これは、「クローン」されたphphmacアルゴリズムとは明らかに同等ではありません。

では、Javaコードに何を追加して、PHPと同等のものに準拠させることができますか?

編集: 実際、私はすべてを一緒に機能させることができました、そして私はここで利用可能です:http: //dev.lutece.paris.fr/plugins/plugin-paybox/index.html

4

1 に答える 1