/// <summary> /// 生成支付预处理的 WxPayData /// </summary> /// <param name="jsApiPay"></param> /// <param name="totalfee"></param> /// <param name="token"></param> /// <returns></returns> //public static WxPayData GenerateUnifiedWxPayData(this JsApiPay jsApiPay, string payKey,IWxApp app, Payment payment,string nonceStr) //{ // var data = new WxPayData(); // var ran = new Random(); // data.Body = "test"; // data.Attach = "test"; // data.OutTradeNo = string.Format("{0}{1}{2}", payment.MchId, DateTime.Now.ToString("yyyyMMddHHmmss"), ran.Next(999));// "150848433120180905090411634"; // // data.TimeStart = DateTime.Now.ToString("yyyyMMddHHmmss");// "20180905090412";// "20180905091412"; // // data.TimeExpire = DateTime.Now.AddMinutes(10).ToString("yyyyMMddHHmmss"); //"20180905091412"; // // data.AppId = app.AppId; // data.OpenId = jsApiPay.OpenId; // data.TradeType = "JSAPI"; // data.GoodsTag = "test"; // data.MchId = payment.MchId.ToString(); // data.Totalfee = jsApiPay.TotalFee; // data.NotifyUrl = "https://www.yourc.club/api/"; // data.SpbillCreateIp = "118.24.139.228"; // data.NonceStr = nonceStr; // data.SignType = WxPayData.SIGN_TYPE_HMAC_SHA256; // data.Sign = data.MakeSign(payKey); // //data.ProductId = "12235413214070356458058"; // //data.SceneInfo = ""; // if (data.WithRequired(out string errMsg) == false) // { // throw new WeChatPayException(errMsg); // } // return data; //} public static string PrepareSign(this WxPayData data) { var @params = data.GetType().GetProperties().Select((ctx) => { var elm = ctx.GetCustomAttributes <XmlElementAttribute>().FirstOrDefault(); if (elm == null || elm.ElementName.Equals("sign")) { return(null); } var v = ctx.GetValue(data); if (v == null) { return(null); } return(new { name = elm.ElementName, value = v }); }) .Where(o => o != null) .OrderBy(o => o.name);//必须对参数排序否则签名不正确 return(string.Join("&", @params.Select(o => string.Format("{0}={1}", o.name, o.value)))); }