/// <summary> /// 订单查询 /// </summary> /// <param name="order">订单号</param> /// <returns>返回调用结果</returns> /// <para name="result">200 是成功其他失败</para> /// <para name="data">对象结果</para> /// <remarks> /// 2018-08-18 林建生 /// </remarks> public static string Get_Order(string order) { using (EFDB db = new EFDB()) { string return_json = null; var b = db.lorder.Where(l => l.order_no == order && l.pay_status == 2).FirstOrDefault(); if (b != null) { ReturnValue retValue = StreamReaderUtils.StreamReader("https://api.mch.weixin.qq.com/pay/orderquery", Encoding.UTF8.GetBytes(b.pay), System.Text.Encoding.UTF8, true); XmlDocument xmldoc = new XmlDocument(); xmldoc.LoadXml(retValue.Message); string return_code = xmldoc.SelectSingleNode("/xml/return_code").InnerText; string result_code = xmldoc.SelectSingleNode("/xml/result_code").InnerText; if (return_code == "SUCCESS" && result_code == "SUCCESS")//验证成功 { //判断支付状态 string trade_state = xmldoc.SelectSingleNode("/xml/trade_state").InnerText; if (trade_state == "SUCCESS") { //微信支付订单号 string trade_no = xmldoc.SelectSingleNode("/xml/transaction_id").InnerText; //金额总金额,以分为单位 string total_fee = xmldoc.SelectSingleNode("/xml/total_fee").InnerText; decimal pay_amount = decimal.Parse(total_fee) / 100; //备注 string attach = xmldoc.SelectSingleNode("/xml/attach").InnerText; return_json = JsonConvert.SerializeObject(new { trade_no, pay_type = 2, pay_amount, attach }); } else { LogManager.WriteLog("微信支付状态错误", "trade_state=" + trade_state); } } else { LogManager.WriteLog("微信对账失败", return_code + " - " + result_code); } } return(return_json); } }
/// <summary> /// 微信支付 /// </summary> /// <param name="openid">用户openid</param> /// <param name="order_no">系统订单号</param> /// <param name="payrmb">支付金额</param> /// <param name="body">商品描述</param> /// <param name="remarks">备注</param> /// <returns>返回调用结果</returns> /// <para name="result">200 是成功其他失败</para> /// <para name="data">对象结果</para> /// <remarks> /// 2018-08-18 林建生 /// </remarks> public static string Get_RequestHtml(string openid, string order_no, decimal payrmb, string body, string attach) { HttpContext Context = HttpContext.Current; //设置package订单参数 SortedDictionary <string, string> dic = new SortedDictionary <string, string>(); string total_fee = (decimal.Parse(payrmb.ToString()) * 100).ToString("f0"); //string wx_timeStamp = ""; string wx_nonceStr = getNoncestr(); dic.Add("appid", APPID); dic.Add("mch_id", PARTNER); //财付通帐号商家 dic.Add("device_info", "WEB"); //可为空 dic.Add("nonce_str", wx_nonceStr); dic.Add("trade_type", "JSAPI"); dic.Add("attach", attach); dic.Add("openid", openid); dic.Add("out_trade_no", order_no); //商家订单号 dic.Add("total_fee", total_fee); //商品金额,以分为单位(money * 100).ToString() dic.Add("notify_url", NOTIFY_URL_Card_Store.ToLower()); //接收通知的URL dic.Add("body", body); //商品描述 dic.Add("spbill_create_ip", Context.Request.UserHostAddress); //用户的公网ip,不是商户服务器IP string get_sign = BuildRequest(dic, PARTNER_KEY); //设置查询订餐参数的签名 SortedDictionary <string, string> paydic = new SortedDictionary <string, string>(); paydic.Add("appid", APPID); paydic.Add("mch_id", PARTNER); paydic.Add("nonce_str", wx_nonceStr); paydic.Add("out_trade_no", order_no); string pay_sign = BuildRequest(paydic, PARTNER_KEY); string url = "https://api.mch.weixin.qq.com/pay/unifiedorder"; string _req_data = "<xml>"; _req_data += "<appid>" + APPID + "</appid>"; _req_data += "<attach><![CDATA[" + attach + "]]></attach>"; _req_data += "<body><![CDATA[" + body + "]]></body> "; _req_data += "<device_info><![CDATA[WEB]]></device_info> "; _req_data += "<mch_id><![CDATA[" + PARTNER + "]]></mch_id> "; _req_data += "<openid><![CDATA[" + openid + "]]></openid> "; _req_data += "<nonce_str><![CDATA[" + wx_nonceStr + "]]></nonce_str> "; _req_data += "<notify_url><![CDATA[" + NOTIFY_URL_Card_Store.ToLower() + "]]></notify_url> "; _req_data += "<out_trade_no><![CDATA[" + order_no + "]]></out_trade_no> "; _req_data += "<spbill_create_ip><![CDATA[" + Context.Request.UserHostAddress + "]]></spbill_create_ip> "; _req_data += "<total_fee><![CDATA[" + total_fee + "]]></total_fee> "; _req_data += "<trade_type><![CDATA[JSAPI]]></trade_type> "; _req_data += "<sign><![CDATA[" + get_sign + "]]></sign> "; _req_data += "</xml>"; //订单查询参数 string pay = "<xml>"; pay += "<appid>" + APPID + "</appid>"; pay += "<mch_id><![CDATA[" + PARTNER + "]]></mch_id> "; pay += "<nonce_str><![CDATA[" + wx_nonceStr + "]]></nonce_str> "; pay += "<out_trade_no><![CDATA[" + order_no + "]]></out_trade_no> "; pay += "<sign><![CDATA[" + pay_sign + "]]></sign> "; pay += "</xml>"; using (EFDB db = new EFDB()) { var b = db.lorder.Where(l => l.order_no == order_no).FirstOrDefault(); if (b != null) { b.pay = pay; if (db.SaveChanges() != 1) { LogManager.WriteLog("支付参数失败", "订单号=" + order_no + "----------参数=" + _req_data); } } else { { LogManager.WriteLog("找不到订单", "订单号=" + order_no + "----------参数=" + _req_data); } } } //通知支付接口,拿到prepay_id ReturnValue retValue = StreamReaderUtils.StreamReader(url, Encoding.UTF8.GetBytes(_req_data), System.Text.Encoding.UTF8, true); //设置支付参数 XmlDocument xmldoc = new XmlDocument(); xmldoc.LoadXml(retValue.Message); XmlNode Event = xmldoc.SelectSingleNode("/xml/prepay_id"); string return_json = ""; if (Event != null) { return_json = "prepay_id=" + Event.InnerText; //小程序不需要以下代码 //string _prepay_id = Event.InnerText; //SortedDictionary<string, string> pay_dic = new SortedDictionary<string, string>(); //wx_timeStamp = WXPay.getTimestamp(); //wx_nonceStr = WXPay.getNoncestr(); //string _package = "prepay_id=" + _prepay_id; //pay_dic.Add("appId", APPID); //pay_dic.Add("timeStamp", wx_timeStamp); //pay_dic.Add("nonceStr", wx_nonceStr); //pay_dic.Add("package", _package); //pay_dic.Add("signType", "MD5"); //string get_PaySign = BuildRequest(pay_dic, PARTNER_KEY); //return_json = JsonUtils.SerializeToJson(new //{ // appId = APPID, // timeStamp = wx_timeStamp, // nonceStr = wx_nonceStr, // package = _package, // paySign = get_PaySign, // signType = "MD5" //}); } else { XmlNode return_msg = xmldoc.SelectSingleNode("/xml/return_msg"); return_json = "下单错误代码: " + return_msg.InnerText; } //Common.LogManager.WriteLog("微信支付package日志", return_json + "\r\n retValue =" + retValue.Message); return(return_json); }
public static JObject Get_RequestHtml(string openid, string order_no, string body, string beizhu, string payrmb) { HttpContext Context = HttpContext.Current; //设置package订单参数 SortedDictionary <string, string> dic = new SortedDictionary <string, string>(); string total_fee = (decimal.Parse(payrmb) * 100).ToString("f0"); string wx_timeStamp = ""; string wx_nonceStr = getNoncestr(); dic.Add("appid", APPID); dic.Add("mch_id", PARTNER); //财付通帐号商家 dic.Add("device_info", "WEB"); //可为空 dic.Add("nonce_str", wx_nonceStr); dic.Add("trade_type", "JSAPI"); dic.Add("attach", beizhu); dic.Add("openid", openid); dic.Add("out_trade_no", order_no); //商家订单号 dic.Add("total_fee", total_fee); //商品金额,以分为单位(money * 100).ToString() dic.Add("notify_url", NOTIFY_URL_Card_Store.ToLower()); //接收通知的URL dic.Add("body", body); //商品描述 dic.Add("spbill_create_ip", Context.Request.UserHostAddress); //用户的公网ip,不是商户服务器IP string get_sign = BuildRequest(dic, PARTNER_KEY); string url = "https://api.mch.weixin.qq.com/pay/unifiedorder"; string _req_data = "<xml>"; _req_data += "<appid>" + APPID + "</appid>"; _req_data += "<attach><![CDATA[" + beizhu + "]]></attach>"; _req_data += "<body><![CDATA[" + body + "]]></body> "; _req_data += "<device_info><![CDATA[WEB]]></device_info> "; _req_data += "<mch_id><![CDATA[" + PARTNER + "]]></mch_id> "; _req_data += "<openid><![CDATA[" + openid + "]]></openid> "; _req_data += "<nonce_str><![CDATA[" + wx_nonceStr + "]]></nonce_str> "; _req_data += "<notify_url><![CDATA[" + NOTIFY_URL_Card_Store.ToLower() + "]]></notify_url> "; _req_data += "<out_trade_no><![CDATA[" + order_no + "]]></out_trade_no> "; _req_data += "<spbill_create_ip><![CDATA[" + Context.Request.UserHostAddress + "]]></spbill_create_ip> "; _req_data += "<total_fee><![CDATA[" + total_fee + "]]></total_fee> "; _req_data += "<trade_type><![CDATA[JSAPI]]></trade_type> "; _req_data += "<sign><![CDATA[" + get_sign + "]]></sign> "; _req_data += "</xml>"; //通知支付接口,拿到prepay_id ReturnValue retValue = StreamReaderUtils.StreamReader(url, Encoding.UTF8.GetBytes(_req_data), System.Text.Encoding.UTF8, true); //设置支付参数 XmlDocument xmldoc = new XmlDocument(); xmldoc.LoadXml(retValue.Message); XmlNode Event = xmldoc.SelectSingleNode("/xml/prepay_id"); string return_json = ""; if (Event != null) { string _prepay_id = Event.InnerText; SortedDictionary <string, string> pay_dic = new SortedDictionary <string, string>(); wx_timeStamp = WXPay.getTimestamp(); wx_nonceStr = WXPay.getNoncestr(); string _package = "prepay_id=" + _prepay_id; pay_dic.Add("appId", APPID); pay_dic.Add("timeStamp", wx_timeStamp); pay_dic.Add("nonceStr", wx_nonceStr); pay_dic.Add("package", _package); pay_dic.Add("signType", "MD5"); string get_PaySign = BuildRequest(pay_dic, PARTNER_KEY); return_json = JsonUtils.SerializeToJson(new { appId = APPID, timeStamp = wx_timeStamp, nonceStr = wx_nonceStr, package = _package, paySign = get_PaySign, signType = "MD5" }); } else { XmlNode return_msg = xmldoc.SelectSingleNode("/xml/return_msg"); return_json = "{\"appId\":\"payerr\",\"return_msg\":\"下单错误代码:" + return_msg.InnerText + "\"}"; } //Common.LogManager.WriteLog("微信支付package日志", return_json + "\r\n retValue =" + retValue.Message); return(JsonConvert.DeserializeObject(return_json) as JObject); }