【问题标题】:Signature mismatch error on payfort sdk_token generationpayfort sdk_token 生成上的签名不匹配错误
【发布时间】:2019-05-24 19:20:15
【问题描述】:
String ACCESS_CODE = "My_PAYFORTAcces_Code"
String MERCHANT_ID = "My_Payfory_Merchet_ID"

我发现了我认为问题在于签名生成的问题, 我尝试使用字符串生成签名 “TESTSHAINaccess_code=ACCESS_CODEdevice_id=ffffffff-d6ab-d802-b274-478d7792a1b7language=enmerchant_identifier=MERCHANT_IDservice_command=SDK_TOKENTESTSHAIN”我的签名是“9c804f2c08e36749c75389afc12c50e68307c31052e6434c072cd5b36cc8c607”,当我尝试使用“PASSaccess_code=ACCESS_CODElanguage=enmerchant_identifier=MERCHANT_IDmerchant_reference=53469903-eaac-459c-91b9-78cb026b0712service_command=TOKENIZATIONPASS”时,我的签名是“4568f58e22f46b75fb6157cbc131ab194e1f9a066bdc501171a018d2c1d22e14”。

一旦我尝试使用两个签名生成sdk_token,我得到了“{"response_code":"00008","response_message":"Signature mismatch","service_command":"SDK_TOKEN","device_id":"ffffffff-d6ab-d802-b274-478d7792a1b7","signature":"30eb8f03adc12dd714aac83249ad0b3e763cfadcd6c996bdf49d86125c23335","merchant_identifier":"My_Payfory_Merchet_ID","access_code":"My_PAYFORTAcces_Code","language":"en","status":"00"}” 这是我生成签名的代码,请检查并告诉我它是否正确,

@TargetApi(Build.VERSION_CODES.KITKAT) 
    public static String generateSHA256(String text) throws NoSuchAlgorithmException, UnsupportedEncodingException { 
        MessageDigest md = MessageDigest.getInstance("SHA-256"); 
        byte[] textBytes = text.getBytes(StandardCharsets.UTF_8); 
        md.update(textBytes, 0, textBytes.length); 
        byte[] sha1hash = md.digest(); 
        return convertToHex(sha1hash); 
    } 

    private static String convertToHex(byte[] data) { 
        StringBuilder buf = new StringBuilder(); 
        for (byte b : data) { 
            int halfbyte = (b >>> 4) & 0x0F; 
            int two_halfs = 0; 
            do { 
                buf.append((0 <= halfbyte) && (halfbyte <= 9) ? (char) ('0' + halfbyte) : (char) ('a' + (halfbyte - 10))); 
                halfbyte = b & 0x0F; 
            } while (two_halfs++ < 1); 
        } 
        return buf.toString(); 
    } 

【问题讨论】:

    标签: android digital-signature sha256 payfort


    【解决方案1】:

    这解决了我的问题,

    我更改了我的字符串以生成签名,

    Constants.PayfortRequestPhrase + "access_code=" + Constants.PayfortAccessCode 
    + "device_id=" + deviceId + "language=enmerchant_identifier=" +
    Constants.PayfortMerchantIdentifier + "service_command=SDK_TOKEN" + Constants.PayfortRequestPhrase 
    

    RequestPhrase , AccessCodeMerchantIdentifier 我是从付费帐户获得的。并且签名生成代码保持不变。

    【讨论】:

      【解决方案2】:

      这在 Apple Pay 的生产中运行没有问题。

      public function createSignature($deviceId){
          $requestPhrase = PaymentHelper::paymentInfo('ap_request_phrase');
          $access_code = PaymentHelper::paymentInfo('ap_access_code');
          $merchant_identifier = PaymentHelper::paymentInfo('merchant_identifier');
          if (YII_ENV_DEV) {
              $seckey = '86qCkwevMaIwR3wFnilov.&(';
          } else {
              $seckey = $requestPhrase;
          }
      
          $sdkCredentials = [
              'service_command' => 'SDK_TOKEN',
              'merchant_identifier' => $merchant_identifier,
              'language' => $this->language,
              'device_id' => $deviceId,
              'access_code' => $access_code,
          ];
      
          $arrData = $sdkCredentials;
          $shaString  = '';
      
          ksort($arrData);
          foreach ($arrData as $key => $value) {
              $shaString .= "$key=$value";
          }
      
          $shaString = $seckey . $shaString . $seckey;
          $signature = hash("sha256", $shaString);
      
          $sdkCredentials['signature']  = $signature;
          
          return $sdkCredentials;
      }
      

      【讨论】:

        猜你喜欢
        • 2020-10-08
        • 2017-05-11
        • 2020-12-31
        • 1970-01-01
        • 2018-08-14
        • 2015-03-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多