using Newtonsoft.Json; using Sugar.Enties; using System; using System.Collections.Generic; using System.Text; namespace WxPayAPI { public class JSAPIPay { /// /// nlog日志 /// private static NLog.Logger Log = NLog.LogManager.GetCurrentClassLogger(); /// /// 生成JSAPI所需的数据 (先下单,然后获取返回的数据) /// /// 商品ID /// 订单金额,单位为分,类型为整数 /// 从商户传来的订单号 /// 模式二URL public WxPayDTO GetJSAPIWxPayData(int total_fee, string openid, string out_trade_no) { //统一下单: 调用统一下单接口 Log.Info(this.GetType().ToString() + "JSAPI-GetPayUrl"); WxPayData data = new WxPayData(); data.SetValue("body", "缴费"); //商品描述 //data.SetValue("detail", "缴费"); //商品详情 data.SetValue("out_trade_no", out_trade_no); //商户订单号 data.SetValue("total_fee", Convert.ToDouble(total_fee).ToString()); //订单总金额,以分为单位 data.SetValue("trade_type", "JSAPI");//交易类型 data.SetValue("openid", openid); //string xml = data.ToXml(); //转换成XML //var startTime = DateTime.Now; //开始时间 Log.Info($"【GetJSAPIWxPayData】data组装:{JsonConvert.SerializeObject(data)}"); WxPayData result = WxPayApi.UnifiedOrder(data);//调用统一下单接口 //获取微信返回数据 TimeSpan timeSpan = (DateTime.UtcNow - new DateTime(1970, 1, 1)); string appId = result.GetValue("appid") == null ? "" : result.GetValue("appid").ToString(); string timeStamp = ((int)timeSpan.TotalSeconds).ToString() + ""; string nonceStr = result.GetValue("nonce_str") == null ? "" : result.GetValue("nonce_str").ToString(); string package = result.GetValue("prepay_id") == null ? "prepay_id=" : "prepay_id=" + result.GetValue("prepay_id").ToString(); string signType = "MD5"; string prepay_id = result.GetValue("prepay_id") == null ? "" : result.GetValue("prepay_id").ToString(); string result_code = result.GetValue("result_code") == null ? "" : result.GetValue("result_code").ToString(); string return_code = result.GetValue("return_code") == null ? "" : result.GetValue("return_code").ToString(); string err_code = ""; string err_code_des = ""; if (return_code == "SUCCESS" || result_code== "FAIL") { err_code = result.GetValue("err_code") == null ? "" : result.GetValue("err_code").ToString(); err_code_des = result.GetValue("err_code_des") == null ? "" : result.GetValue("err_code_des").ToString(); } //获取微信签名 WxPayData wxPaydata = new WxPayData(); wxPaydata.SetValue("appId", appId); //公众号名称 wxPaydata.SetValue("timeStamp", timeStamp); //时间戳,自1970年以来的秒数 wxPaydata.SetValue("nonceStr", nonceStr); //随机串 wxPaydata.SetValue("package", package); //商品描述 wxPaydata.SetValue("signType", signType); //微信签名方式 string sign = wxPaydata.MakeSign(); //wxPaydata.SetValue("sign", sign);//微信签名 WxPayDTO wxpaydto = new WxPayDTO(); wxpaydto.AppId = appId; wxpaydto.TimeStamp = timeStamp; wxpaydto.NonceStr = nonceStr; wxpaydto.Package = package; wxpaydto.SignType = signType; wxpaydto.PaySign = sign; wxpaydto.PrepayId = prepay_id; wxpaydto.ReturnCode = return_code; wxpaydto.ResultCode = result_code; wxpaydto.ErrCode = err_code; wxpaydto.ErrCodeDes = err_code_des; wxpaydto.OutTradeNo = out_trade_no; //string mweb_url = result.GetValue("mweb_url") == null ? "" : result.GetValue("mweb_url").ToString();//mweb_url为拉起微信支付收银台的中间页面,可通过访问该url来拉起微信客户端,完成支付,mweb_url的有效期为5分钟。 return wxpaydto; } /// /// 取消支付或其他原因,关闭预支付订单 /// /// /// public WxPayDTO CloseOrder(string out_trade_no) { //统一下单: 调用统一下单接口 Log.Info(this.GetType().ToString() + "JSAPI-Reverse"); WxPayData data = new WxPayData(); data.SetValue("out_trade_no", out_trade_no); //商户订单号 Log.Info($"【CloseOrder】data组装:{JsonConvert.SerializeObject(data)}"); WxPayData result = WxPayApi.CloseOrder(data);//调用撤销订单 WxPayDTO wxpaydto = new WxPayDTO(); wxpaydto.AppId = result.GetValue("appid") == null ? "" : result.GetValue("appid").ToString(); wxpaydto.ResultCode = result.GetValue("result_code") == null ? "" : result.GetValue("result_code").ToString(); wxpaydto.ReturnCode = result.GetValue("return_code") == null ? "" : result.GetValue("return_code").ToString(); //wxpaydto.TimeStamp = timeStamp; //wxpaydto.NonceStr = nonceStr; //wxpaydto.Package = package; //wxpaydto.SignType = signType; //wxpaydto.PaySign = sign; //wxpaydto.PrepayId = prepay_id; //wxpaydto.ReturnMsg = return_msg; return wxpaydto; } } }