6

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

谁能告诉我要使用哪个签名?

网址 - https://sbpaymentservices.payfort.com/FortAPI/paymentApi

4

7 回答 7

6

让我一步一步地指导你:

注意:以下是商家页面 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_IDENTIFIERACCESS_CODESHA_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 步:创建一个函数以从第 2 步中的 concatenatedString 生成 SHA-256 类型签名

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);
于 2019-04-27T16:59:26.623 回答
1

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

按字母顺序对数组中的密钥进行排序,在密码短语之前和之后添加,然后使用您的算法加密字符串。

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

于 2017-05-02T20:27:16.710 回答
0

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

于 2017-01-31T10:14:07.567 回答
0

在这里您可以找到如何生成签名

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

于 2018-03-30T11:27:05.873 回答
0

还要确保商家参考是字母数字,如果您想添加特殊字符,您只能添加 . _ -

于 2017-10-24T03:42:38.550 回答
0

我遇到了同样的问题,发现集成设置有问题。只需登录您的支付帐户并转到支付集成设置,然后您的商家参考 ID 位置检查 SHA 类型为 SHA-256 和 SHA 响应解析,SHA 请求解析将相同的文本。在源代码参数中将相同的文本添加到您的访问代码和 sdk-token 中。请检查下图一次。 在此处输入图像描述

于 2019-01-19T06:37:19.080 回答
-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);

快乐编码:)

于 2019-02-22T08:42:46.230 回答