Payfort付款集成中的签名不匹配

时间:2016-12-27 12:17:32

标签: android payfort

我正在我的Android应用程序中集成Payfort支付网关。我正在使用FORT SDKv1.2。 在用于创建令牌的帖子网址中,我收到错误"签名不匹配"总是

有人可以告诉我使用哪个签名吗?

url - https://sbpaymentservices.payfort.com/FortAPI/paymentApi

7 个答案:

答案 0 :(得分:2)

让我一步一步地指导您:

注意 :以下是 Merchant Page 2.0 请求签名生成的示例:

  

步骤1:在文件顶部添加这些变量

private final static String KEY_MERCHANT_IDENTIFIER = "merchant_identifier";
private final static String KEY_SERVICE_COMMAND = "service_command";
private final static String KEY_LANGUAGE = "language";
private final static String KEY_ACCESS_CODE = "access_code";
private final static String KEY_MERCHANT_REFERENCE = "merchant_reference";

private final static String MERCHANT_IDENTIFIER = "YOUR_MERCHANT_IDENTIFIER";
private final static String ACCESS_CODE = "YOUR_ACCESS_CODE";
private final static String SHA_TYPE = "SHA-256";
private final static String SHA_REQUEST_PHRASE = "YOUR_SHA_REQUEST_PHRASE ";
private final static String LANGUAGE_TYPE = "en"; 

请确保您使用的是Payfort提供的 MERCHANT_IDENTIFIER ACCESS_CODE SHA_REQUEST_PHRASE

  

步骤2:创建一个字符串

String concatenatedString = SHA_REQUEST_PHRASE +
                KEY_ACCESS_CODE + "=" + ACCESS_CODE +
                KEY_LANGUAGE + "=" + LANGUAGE_TYPE +
                KEY_MERCHANT_IDENTIFIER + "=" + MERCHANT_IDENTIFIER +
                KEY_MERCHANT_REFERENCE + "=" + YOUR_MERCHANT_REFERENCE +
                KEY_SERVICE_COMMAND + "=" + "TOKENIZATION" +
                SHA_REQUEST_PHRASE;

此处 YOUR_MERCHANT_REFERENCE 是您唯一的商家参考。对于每个请求,它应该是唯一的

  

步骤3:创建一个函数,以从您的计算机生成SHA-256类型签名   步骤2中的concatenatedString

private String createSignature(String s) {
    try {
        // Create MD5 Hash
        MessageDigest digest = MessageDigest.getInstance(SHA_TYPE);
        digest.update(s.getBytes());
        byte messageDigest[] = digest.digest();

        return String.format("%0" + (messageDigest.length * 2) + 'x', new BigInteger(1, messageDigest));
    } catch (NoSuchAlgorithmException e) {
        e.printStackTrace();
    }
    return "";
}
  

最后   通过在第2步中传递concatenatedString来调用createSignature函数。

String signature = createSignature(concatenatedString);

答案 1 :(得分:0)

我遇到了同样的问题,发现在生成签名时使用的算法存在问题。因此plz在生成签名时检查参数序列。并检查您在帐户中设置的算法,并在生成签名时使用相同的算法

答案 2 :(得分:0)

将'merchant_reference'值更改为之前未使用过的值。它应该是独一无二的。我遇到了同样的麻烦,并且使用它进行了修复。

按字母顺序对数组进行排序,在秘密短语之前和之后添加,然后使用你的algorythm加密字符串。

之后,您可以在请求中使用它。

答案 3 :(得分:0)

还要确保商家参考是alphanumric,如果你想添加特殊字符,你只能添加。 _ -

答案 4 :(得分:0)

Here您可以找到如何生成签名

由于将错误的 SHA请求短语连接到签名的开头和结尾,我遇到了此signature mismatch错误。

答案 5 :(得分:0)

我遇到了同样的问题,发现集成设置存在问题。只需登录您的payfort帐户并转到付款集成设置,然后再检查您的商家参考ID位置    SHA类型为SHA-256,SHA响应解析,SHA请求解析将是相同的文本。此文本已添加到您的访问码和sdk令牌的源代码参数中。请检查下图一次。 enter image description here

答案 6 :(得分:-1)

使用此代码

 String concatenatedString = SHA_REQUEST_PHRASE +
                KEY_ACCESS_CODE + "=" + ACCESS_CODE +
                KEY_DEVICE_ID + "=" + device_id +
                KEY_LANGUAGE + "=" + LANGUAGE_TYPE +
                KEY_MERCHANT_IDENTIFIER + "=" + MERCHANT_IDENTIFIER +
                KEY_SERVICE_COMMAND + "=" + SDK_TOKEN +
                SHA_REQUEST_PHRASE;

然后,通过以下方法传递此串联字符串,

  private static String getSignatureSHA256(String s) {
    try {
        // Create MD5 Hash
        MessageDigest digest = MessageDigest.getInstance(SHA_TYPE);
        digest.update(s.getBytes());
        byte messageDigest[] = digest.digest();

        return String.format("%0" + (messageDigest.length * 2) + 'x', new BigInteger(1, messageDigest));
    } catch (NoSuchAlgorithmException e) {
        e.printStackTrace();
    }
    return "";
}

使用以下代码获取签名,

            String signature = getSignatureSHA256(concatenatedString);

快乐编码:)