string orderid = "11071419409460972870";
string sign = "";
Dictionary<string, string> parameters = new Dictionary<string, string>();
parameters.Add("charset", "00");
parameters.Add("version", "1.0");
parameters.Add("signType", "RSA");
parameters.Add("service", "DYRefund");
parameters.Add("requestId", GenerateOrderSn("req"));// Helpler.CreateOrderNumber(0));
parameters.Add("merchantId", merc_id);
parameters.Add("refundId", GenerateOrderSn("refund")); //Helpler.CreateOrderNumber(0));
parameters.Add("orderId", orderid);
parameters.Add("refundAmount", "31");
parameters.Add("offlineNotifyUrl", "http://XXX.aspx");
parameters.Add("clientIP", "192.168.28.113");
//parameters.Add("platformRefundAmt", "");
//parameters.Add("mercDetail", "");
string signContent = GetSignContent(parameters);
string path = HttpContext.Current.Request.PhysicalApplicationPath;
RSACryptoServiceProvider key = new RSACryptoServiceProvider();
key.FromXmlString(EncryptPrivateKey);
sign = Sign(signContent, key);
string merchantCert = GetMerchantCert(path + "Cert/merchant.pfx", "1234qwer");
parameters.Add("merchantCert", (merchantCert));
parameters.Add("merchantSign", sign);
SerializerHelper serializerHelper = new SerializerHelper();
var jsonString = serializerHelper.GetJsonString(parameters, null);
string url = "http://XXX/mrpos/cashier";
string resultData = Post(jsonString, url, "", false);
Response.Write("退款返回:" + resultData);
//多次调用 rd.next值是一样的 此方法需要修改
private string GenerateOrderSn(string prefix = "")
{
Random rd = new Random();
// 请按照规则自定生成
var bizNo = string.Format("{0:yyyyMMddHHmmssfff}{1}", DateTime.Now, rd.Next(1000, 9999));
return string.Format("{0}{1}", prefix, bizNo);
}
public static string Sign(string contentForSign, RSACryptoServiceProvider privateKey)
{
var rsaClear = new RSACryptoServiceProvider();
var paras = privateKey.ExportParameters(true);
rsaClear.ImportParameters(paras);
using (var sha256 = new SHA256CryptoServiceProvider())
{
//var signData = privateKey.SignData(Encoding.UTF8.GetBytes(contentForSign), sha256);
//System.Text.Encoding.GetEncoding("GBK")
var signData = privateKey.SignData(System.Text.Encoding.GetEncoding("GBK").GetBytes(contentForSign), sha256);
return BytesToHex(signData).ToUpper();
}
}