错误:"回复":" X006","说明":"无效哈希"

时间:2016-12-30 18:12:17

标签: c# asp.net json

我使用Restsharp与ASP.net C#中的Gridview行命令中的以下代码进行了调用:

const string task = "pay";
const string command_api_token = "D3Kc4vMatqQ7pQtU39D22j35aKqy8";
const string merchant_email_on_voguepay = "abc@wyz.com";

                Random rnd = new Random();
                string refl = DateTime.Now + rnd.Next(1, 9999999).ToString();
                byte[] hash_target = Encoding.UTF8.GetBytes(command_api_token + task + merchant_email_on_voguepay + refl);

                string hash = BitConverter.ToString(new SHA512CryptoServiceProvider().ComputeHash(hash_target)).Replace("-", string.Empty).ToUpper();


                // //load all fields as json and serialize
                var keyValues = new Dictionary<string, string>
                    {
                         { "task", "pay"},
                         { "merchant", "1234-4567"},
                         { "ref",refl},
                         { "hash",hash},
                         { "remarks", "secure trade"},
                         { "seller", "seller@website.com"},
                         { "cur", "usd"},
                         { "amount", "20"}
                    };

           //serialization using Newtonsoft JSON
            string json = JsonConvert.SerializeObject(keyValues);

          //url encode the json
           var postString = HttpUtility.UrlEncode(json);

//calling API with Restsharp
var client = new RestClient("https://voguepay.com/api/");
var request = new RestRequest(Method.POST);
request.AddParameter("json", json);
IRestResponse response = client.Execute(request);

当我使用email_on_voguepay和command_api_token的真实参数时,调用会返回以下错误。

这就是它的回报:

{&#34;响应&#34;:&#34; X006&#34;,&#34;说明&#34;:&#34;无效的哈希&#34;,&#34;值&#34;: &#34;&#34;&#34;盐&#34;:&#34; 58656ba1d162a&#34;&#34;散列&#34;:&#34; 2638fb45f266d35bc78524490a3329a3fecf7b5189c473e82e45d7d6a22f07656743e2cb9ae28dfc81e77eef49eb24d46e0fd4a71cab16847a7afd225310feb5&#34;&#34;用户名& #34;:&#34; MYNAME&#34;}

我在这里需要帮助,我做错了什么以及如何纠正?

1 个答案:

答案 0 :(得分:0)

似乎是你的请求有一个无效的哈希(令牌)。我建议你查看string refl = DateTime.Now + rnd.Next(1, 9999999).ToString(); php中的时间函数(根据voguePay API,返回unix时间戳。

所以在C#中请考虑使用DateTimeOffset.ToUnixTimeSeconds(DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1))).TotalSeconds

有关详细信息,请考虑按照说明检查生成的令牌:

连接以下生成的所需安全代码,并通过 sha512 加密传递结果 你的命令api令牌 上面指定的任务 您的voguepay电子邮件 上面指定的 ref

ref每个请求的唯一ID(必填)$ field [&#39; ref&#39;] = time()。mt_rand(0,999999999);

https://voguepay.com/developers