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;
}
}
}