Example #1
0
        /// <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))));
        }