using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Linq; using System.Security.Cryptography; using System.Text; using System.Threading.Tasks; namespace PaymentGateway.GatewayApp { public class AllInPayAppConstants { public static string APPID = "00144379"; public static string CUSID = "990440648166000"; public static string APPKEY = "e10adc3949ba59abbe56e057f20f883e"; public static string APIVERSION = "11"; public static string API_URL = "https://vsp.allinpay.com/apiweb/unitorder"; public static string NOTIFY_URL = ""; } public class AllInPayAppUtil { /// /// 将参数排序组装 /// /// /// public static String BuildParamStr(Dictionary param) { if (param == null || param.Count == 0) { return ""; } Dictionary ascDic = param.OrderBy(o => o.Key).ToDictionary(o => o.Key, p => p.Value); StringBuilder sb = new StringBuilder(); foreach (var item in ascDic) { if (!string.IsNullOrEmpty(item.Value)) { sb.Append(item.Key).Append("=").Append(item.Value).Append("&"); } } return sb.ToString().Substring(0, sb.ToString().Length - 1); } public static String BuildParamStr(Dictionary param) { if (param == null || param.Count == 0) { return ""; } Dictionary ascDic = param.OrderBy(o => o.Key).ToDictionary(o => o.Key, p => p.Value); StringBuilder sb = new StringBuilder(); foreach (var item in ascDic) { if (item.Value != null) { if (item.Value is string) { sb.Append(item.Key).Append("=").Append(item.Value).Append("&"); } else if (item.Value is List) { sb.Append(item.Key).Append("=").Append(JsonConvert.SerializeObject(item.Value)).Append("&"); } else if (item.Value is OilStation) { sb.Append(item.Key).Append("=").Append(JsonConvert.SerializeObject(item.Value)).Append("&"); } else { sb.Append(item.Key).Append("=").Append(JsonConvert.SerializeObject(item.Value)).Append("&"); // unexpected type } } } return sb.ToString().Substring(0, sb.ToString().Length - 1); } public static String signParam(Dictionary param, String appkey) { if (param == null || param.Count == 0) { return ""; } param.Add("key", appkey); String blankStr = BuildParamStr(param); return MD5Encrypt(blankStr); } public static String signParam(Dictionary param, String appkey, bool lowerCase = false) { if (param == null || param.Count == 0) { return ""; } param.Add("key", appkey); string blankStr = BuildParamStr(param); return lowerCase ? MD5Encrypt(blankStr).ToLower() : MD5Encrypt(blankStr); } public static bool validSign(Dictionary param, String appkey) { String signRsp = param["sign"]; param.Remove("sign"); String sign = signParam(param, AllInPayAppConstants.APPKEY); return sign.ToLower().Equals(signRsp.ToLower()); } /// /// 将实体转化为json /// /// /// public static string ObjectToJson(object o) { string json = JsonConvert.SerializeObject(o); return json; } /// /// md5加签 /// /// /// public static string MD5Encrypt(string strText) { MD5 md5 = new MD5CryptoServiceProvider(); //var str1 = "appId=test&bizContent={\"amount\":1,\"backUrl\":\"http://www.baidu.com\",\"bizOrderNo\":\"1607592344575\",\"consumeTypes\":[{\"amount\":1,\"type\":\"C0001\"}],\"limitPay\":\"no_credit\",\"oilStation\":{\"oilGunNo\":\"1\",\"oilStationNo\":\"S0012\",\"oilStationPersonNo\":\"\"},\"payType\":\"SCAN_WEIXIN\",\"remark\":\"\",\"shiftsMask\":\"S0012001\",\"shiftsTime\":\"20201210\",\"sysId\":\"1902271423530473681\"}&charset=utf-8&key=123456&service=oil.pay.apply&signType=MD5×tamp=20201210172545&version=1.0"; //byte[] result1 = md5.ComputeHash(System.Text.Encoding.UTF8.GetBytes(str1)); //var s = BitConverter.ToString(result1).Replace("-", ""); byte[] result = md5.ComputeHash(System.Text.Encoding.UTF8.GetBytes(strText)); var resultStr = BitConverter.ToString(result).Replace("-", ""); return resultStr; } } }