c# - Securepay 支付网关集成问题

标签 c# asp.net cryptography payment-gateway sha

我正在将 Securepay 与我的 ASP.NET 网页集成,根据他们的文档,我从以下信息生成 SHA1:

Fingerprint 是上述字段的 SHA1 散列加上 SecurePay 交易密码的顺序,带有管道分隔符“|”:

  1. EPS_MERCHANTID
  2. 交易密码(由 SecurePay 支持提供)
  3. EPS_TXNTYPE(为 0)
  4. EPS_REFERENCEID(用于测试目的 123)
  5. EPS_AMOUNT(用于测试目的 100.00)
  6. EPS_TIMESTAMP(用于测试目的 20120910203805)

虽然我已按照上面给出的说明进行操作,但每当我进行付款时,它都会显示“无效指纹”。示例代码:

FormsAuthentication
  .HashPasswordForStoringInConfigFile("xxx|xxx|0|123|100.00|201‌20910203805","sha1")
  .ToLower();`

最佳答案

检查您是否正确结束了该行,或者使用尾随“|”或删除不必要的尾随“|”。

还要检查您正在使用的方法是否没有在方法中添加任何其他会扭曲您期望的内容。 (我在想一种基于你所在的特定机器的盐不知道它是否这样做)

我一直在尝试在这里生成哈希 http://shagenerator.com/使用这个:

ABC|password|1|Te‌​st Reference|1.00|20120912123421

给出:

25a1804285bafc078f45e41056bcdc42e0508b6f

您可以使用我的输入获得与您的代码相同的 key 吗?

更新:

你能试试这个方法而不是 HashPasswordForStoringInConfigFile() 看看你是否更接近:

private string GetSHA1String(string text)
{
    var UE = new UnicodeEncoding();
    var message = UE.GetBytes(text);

    var hashString = new SHA1Managed(); 
    var hex = string.Empty;

    var hashValue = hashString.ComputeHash(message); 
    foreach (byte b in hashValue)
    { 
        hex += String.Format("{0:x2}", b);
    } 

    return hex;
}

更新 2:

检查你的编码,我发现我可以匹配哈希输出:

var UE = new UTF8Encoding();

更新 3:

以下代码在控制台应用程序中为我工作,我看到哈希生成相同的值并且我能够将输出与 http://shagenerator.com/ 进行比较还有:

using System;
using System.Security.Cryptography;
using System.Text;
using System.Web.Security;

namespace SecurepayPaymentGatewayIntegrationIssue
{
    class Program
    {
        static void Main(string[] args)
        {
            var text = @"ABC|password|1|Te‌​st Reference|1.00|20120912123421";
            Console.WriteLine(GetSHA1String(text));

            Console.WriteLine(FormsAuthentication.HashPasswordForStoringInConfigFile(text, "sha1").ToLower());

            Console.ReadKey();
        }

        private static string GetSHA1String(string text)
        {
            var UE = new UTF8Encoding();// ASCIIEncoding(); // UnicodeEncoding();
            var message = UE.GetBytes(text);

            var hashString = new SHA1Managed();
            var hex = string.Empty;

            var hashValue = hashString.ComputeHash(message);
            foreach (byte b in hashValue)
            {
                hex += String.Format("{0:x2}", b);
            }

            return hex;
        }
    }
}

关于c# - Securepay 支付网关集成问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12350043/

相关文章:

c# - 将数据(消息)发送到服务器的最佳(广泛接受)方式是什么

c# - 视觉 C# "Could not load file or assembly or one of its dependencies"

c# - Web Api 2 无状态用户

asp.net - 如何实现 ASP.Net 表单例份验证

c# - 重构大型项目的 DI

c# - 允许使用 itextsharp 在密码安全 pdf 中提取页面

security - 存储加密的 PEM block 安全吗?

java - 发送和接收大型 RSA 加密密码

c# - 验证方法错误

c# - MD5 是对数据进行编码还是仅对其中的 32 位字符串进行编码?