Exemple #1
0
 /// <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);
     }
 }
Exemple #2
0
        /// <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);
        }
Exemple #3
0
        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);
        }