Files
g.hnyhua.cn/Mtxfw.Utility/WXPay.Interface_WxeditAddress.cs

141 lines
4.7 KiB
C#
Raw Normal View History

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Security.Cryptography;
using System.Text;
using System.Xml;
namespace Mtxfw.Utility
{
public class Interface_WxeditAddress
{
public static string Get_RequestHtml(HttpContext Context, string APPID,string accessToken, string webUrl)
{
//设置package订单参数
SortedDictionary<string, string> dic = new SortedDictionary<string, string>();
string wx_nonceStr = getNoncestr();
dic.Add("url", webUrl);
dic.Add("appid", APPID);
dic.Add("timestamp", getTimestamp());
dic.Add("noncestr", wx_nonceStr);
dic.Add("accesstoken", accessToken);
string get_sign = BuildRequest(dic);
return "\"appId\" : \"" + APPID + "\",\"scope\" : \"jsapi_address\",\"signType\" : \"SHA1\",\"addrSign\" : \"" + get_sign + "\",\"timeStamp\" : \"" + getTimestamp() + "\",\"nonceStr\" : \"" + wx_nonceStr + "\"";
}
public static string getNoncestr()
{
Random random = new Random();
return GetMD5(random.Next(1000).ToString(), "utf-8");
}
public static string getTimestamp()
{
TimeSpan ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0);
return Convert.ToInt64(ts.TotalSeconds).ToString();
}
public static string BuildRequest(SortedDictionary<string, string> sParaTemp)
{
//获取过滤后的数组
Dictionary<string, string> dicPara = new Dictionary<string, string>();
dicPara = FilterPara(sParaTemp);
//组合参数数组
string prestr = CreateLinkString(dicPara);
//拼接支付密钥
string stringSignTemp = prestr;
//获得加密结果
string mySign = GetSHA(stringSignTemp);
//返回转换为大写的加密串
return mySign;
}
/// <summary>
/// 除去数组中的空值和签名参数并以字母a到z的顺序排序
/// </summary>
/// <param name="dicArrayPre">过滤前的参数组</param>
/// <returns>过滤后的参数组</returns>
public static Dictionary<string, string> FilterPara(SortedDictionary<string, string> dicArrayPre)
{
Dictionary<string, string> dicArray = new Dictionary<string, string>();
foreach (KeyValuePair<string, string> temp in dicArrayPre)
{
if (temp.Key != "sign" && !string.IsNullOrEmpty(temp.Value))
{
dicArray.Add(temp.Key, temp.Value);
}
}
return dicArray;
}
//组合参数数组
public static string CreateLinkString(Dictionary<string, string> dicArray)
{
StringBuilder prestr = new StringBuilder();
foreach (KeyValuePair<string, string> temp in dicArray)
{
prestr.Append(temp.Key + "=" + temp.Value + "&");
}
int nLen = prestr.Length;
prestr.Remove(nLen - 1, 1);
return prestr.ToString();
}
public static string GetSHA(string pwd)
{
string tmpStr = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(pwd, "SHA1");
return tmpStr;
}
//加密
public static string GetMD5(string pwd)
{
MD5 md5Hasher = MD5.Create();
byte[] data = md5Hasher.ComputeHash(Encoding.UTF8.GetBytes(pwd));
StringBuilder sBuilder = new StringBuilder();
for (int i = 0; i < data.Length; i++)
{
sBuilder.Append(data[i].ToString("x2"));
}
return sBuilder.ToString();
}
/** 获取大写的MD5签名结果 */
public static string GetMD5(string encypStr, string charset)
{
string retStr;
MD5CryptoServiceProvider m5 = new MD5CryptoServiceProvider();
//创建md5对象
byte[] inputBye;
byte[] outputBye;
//使用GB2312编码方式把字符串转化为字节数组
try
{
inputBye = Encoding.GetEncoding(charset).GetBytes(encypStr);
}
catch (Exception ex)
{
inputBye = Encoding.GetEncoding("GB2312").GetBytes(encypStr);
}
outputBye = m5.ComputeHash(inputBye);
retStr = System.BitConverter.ToString(outputBye);
retStr = retStr.Replace("-", "").ToUpper();
return retStr;
}
}
}