2017-10-19 9 views
1

私はadyen hppページを統合しようとしています。私は基本的に、githubの例のような同じコードを使用します。https://github.com/Adyen/adyen-java-sample-code/blob/master/src/com/adyen/examples/hpp/CreatePaymentOnHpp_SHA_256.javaadyen HPP統合

その例では、私はちょうど私のデータにmerchantAccount、skinCodeとhmacの秘密コードを設定しました。

は、さらに私は、HMAC計算のためのテストのURLを作成するために、いくつかのコードを追加:

 String queryString = params.keySet().stream() 
      .map(key -> { 
       try { 
        return key + "=" + URLEncoder.encode(params.get(key), "UTF-8"); 
       } catch (UnsupportedEncodingException e) { 
        e.printStackTrace(); 
       } 
       return "Error: could not URL-encode value"; 
      }).collect(Collectors.joining("&")); 

     String testUrl = "https://ca-test.adyen.com/ca/ca/skin/checkhmac.shtml" + "?" + queryString; 

     System.out.println(testUrl); 

私もHPPのURLを作成するために、いくつかのコードを作成しました。

 URIBuilder b = new URIBuilder(hppUrl); 
     for (Map.Entry<String, String> entry : params.entrySet()) { 
      b.addParameter(entry.getKey(), URLEncoder.encode(entry.getValue(), "UTF-8")); 
     } 

     return b.build().toString(); 

したがって、testUrlは常に正しいため、HMACの計算は正しいようです。 しかし、生成されたhppのリンクをクリックすると、HMACの計算をチェックする必要があるというエラーが表示されます。

私は誰かが私にそれを修正する方法についてのヒント

答えて

2

URIBuilderはすでにデフォルトでは、あなたのためのパラメータをURLエンコードを与えることができることを望みます。投稿した実装はパラメータを2回エンコードし、merchantReferenceなどのパラメータをマーチャントの署名を計算するために使用された署名文字列とは異なるものにします。

次のコードの問題を修正し、有効なHPPリンク作成します。

URIBuilder b = new URIBuilder(hppUrl); 
params.entrySet().forEach(e-> b.addParameter(e.getKey(),e.getValue())); 
System.out.println(b.build().toString()); 
関連する問題