我使用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;}
我在这里需要帮助,我做错了什么以及如何纠正?
答案 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);