Ejemplo n.º 1
0
        public string WxRedPackCreate(string openid, int amount, string mch_billno, string act_name, string send_name, string remark, string wishing)
        {
            //Wx_WebOauthAccessToken webToken = utilities.getWebOauthAccessToken(code);
            string nonce_str = CommonUtilities.generateNonce();
            //string mch_billno = "WXREDPACK" + CommonUtilities.generateTimeStamp() + random.Next(1000, 9999);
            string mch_id       = WeUtil.getMchId();
            string wxappid      = WeUtil.getAppId();
            string re_openid    = openid;
            int    total_amount = amount;
            int    total_num    = 1;
            string client_ip    = WeChatUtilities.getConfigValue(WeChatUtilities.IP);
            List <QueryParameter> redpackParameter = new List <QueryParameter>();

            redpackParameter.Add(new QueryParameter("nonce_str", nonce_str));
            redpackParameter.Add(new QueryParameter("mch_billno", mch_billno));
            redpackParameter.Add(new QueryParameter("mch_id", mch_id));
            redpackParameter.Add(new QueryParameter("wxappid", wxappid));
            redpackParameter.Add(new QueryParameter("send_name", send_name));
            redpackParameter.Add(new QueryParameter("re_openid", re_openid));
            redpackParameter.Add(new QueryParameter("total_amount", total_amount.ToString()));
            redpackParameter.Add(new QueryParameter("total_num", total_num.ToString()));
            redpackParameter.Add(new QueryParameter("wishing", wishing));
            redpackParameter.Add(new QueryParameter("client_ip", client_ip));
            redpackParameter.Add(new QueryParameter("act_name", act_name));
            redpackParameter.Add(new QueryParameter("remark", remark));
            string           sign     = WeChatUtilities.createPaySign(redpackParameter);
            string           content  = parseXml(redpackParameter, sign);
            string           post_url = "https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack";
            var              request  = WebRequest.Create(post_url) as HttpWebRequest;
            string           certpath = @"D:\apiclient_cert.p12";
            string           password = "******";
            X509Certificate2 cert     = new X509Certificate2(certpath, password);

            request.ClientCertificates.Add(cert);
            try
            {
                request.Method = "post";
                StreamWriter streamWriter = new StreamWriter(request.GetRequestStream());
                streamWriter.Write(content);
                streamWriter.Flush();
                streamWriter.Close();
                var          response = request.GetResponse();
                StreamReader reader   = new StreamReader(response.GetResponseStream());
                //return reader.ReadToEnd();
                XmlSerializer   xmldes = new XmlSerializer(typeof(WxHBSend_Result));
                WxHBSend_Result info   = xmldes.Deserialize(reader) as WxHBSend_Result;
                // 是否成功
                string err_code_des = "";
                if (info.return_code == "SUCCESS")
                {
                    if (info.result_code == "SUCCESS")
                    {
                        WxRedPackOrder item = new WxRedPackOrder()
                        {
                            act_name      = act_name,
                            mch_billno    = mch_billno,
                            err_code_desc = err_code_des,
                            status        = "SENDING",
                            send_time     = DateTime.Now,
                            re_openid     = openid,
                            send_name     = send_name,
                            total_amount  = amount,
                            total_num     = 1,
                            remark        = remark,
                            wishing       = wishing
                        };
                        PaymentDb.WxRedPackOrder.Add(item);
                        PaymentDb.SaveChanges();
                        return("SUCCESS");
                    }
                    else
                    {
                        err_code_des = info.err_code_des;
                    }
                }
                else
                {
                    err_code_des = info.return_msg;
                }
                WxRedPackOrder redpack = new WxRedPackOrder()
                {
                    act_name      = act_name,
                    mch_billno    = mch_billno,
                    err_code_desc = err_code_des,
                    status        = "FAILED",
                    re_openid     = openid,
                    send_name     = send_name,
                    total_amount  = amount,
                    total_num     = 1,
                    remark        = remark,
                    wishing       = wishing
                };
                PaymentDb.WxRedPackOrder.Add(redpack);
                PaymentDb.SaveChanges();
                return("FAIL");
            }
            catch (Exception ex)
            {
                return(ex.Message);
            }
        }
Ejemplo n.º 2
0
        public ActionResult wx_pay_nofity()
        {
            StreamReader reader = new StreamReader(Request.InputStream, Encoding.UTF8);
            XmlDocument  doc    = new XmlDocument();

            doc.Load(reader);
            //CommonUtilities.writeLog(doc.OuterXml);
            string return_code = doc.GetElementsByTagName("return_code")[0].InnerText;

            try
            {
                if (return_code == "SUCCESS")
                {
                    string appid          = doc.GetElementsByTagName("appid")[0] == null ? "" : doc.GetElementsByTagName("appid")[0].InnerText;
                    string mch_id         = doc.GetElementsByTagName("mch_id")[0] == null ? "" : doc.GetElementsByTagName("mch_id")[0].InnerText;
                    string is_subscribe   = doc.GetElementsByTagName("is_subscribe")[0] == null ? "" : doc.GetElementsByTagName("is_subscribe")[0].InnerText;
                    string nonce_str      = doc.GetElementsByTagName("nonce_str")[0] == null ? "" : doc.GetElementsByTagName("nonce_str")[0].InnerText;
                    string request_sign   = doc.GetElementsByTagName("sign")[0] == null ? "" : doc.GetElementsByTagName("sign")[0].InnerText;
                    string result_code    = doc.GetElementsByTagName("result_code")[0] == null ? "" : doc.GetElementsByTagName("result_code")[0].InnerText;
                    string openid         = doc.GetElementsByTagName("openid")[0] == null ? "" : doc.GetElementsByTagName("openid")[0].InnerText;
                    string trade_type     = doc.GetElementsByTagName("trade_type")[0] == null ? "" : doc.GetElementsByTagName("trade_type")[0].InnerText;
                    string bank_type      = doc.GetElementsByTagName("bank_type")[0] == null ? "" : doc.GetElementsByTagName("bank_type")[0].InnerText;
                    string total_fee      = doc.GetElementsByTagName("total_fee")[0] == null ? "" : doc.GetElementsByTagName("total_fee")[0].InnerText;
                    string fee_type       = doc.GetElementsByTagName("fee_type")[0] == null ? "" : doc.GetElementsByTagName("fee_type")[0].InnerText;
                    string transaction_id = doc.GetElementsByTagName("transaction_id")[0] == null ? "" : doc.GetElementsByTagName("transaction_id")[0].InnerText;
                    string out_trade_no   = doc.GetElementsByTagName("out_trade_no")[0] == null ? "" : doc.GetElementsByTagName("out_trade_no")[0].InnerText;
                    string attach         = doc.GetElementsByTagName("attach")[0] == null ? "" : doc.GetElementsByTagName("attach")[0].InnerText;
                    string time_end       = doc.GetElementsByTagName("time_end")[0] == null ? "" : doc.GetElementsByTagName("time_end")[0].InnerText;
                    string device_info    = doc.GetElementsByTagName("device_info")[0] == null ? "" : doc.GetElementsByTagName("device_info")[0].InnerText;
                    var    order          = payDB.WxPaymentOrder.SingleOrDefault(m => m.Trade_No == out_trade_no);
                    if (order != null)
                    {
                        // 已成功订单
                        CommonUtilities.writeLog("有订单");
                        if (order.Trade_Status == WeChatUtilities.TRADE_STATUS_SUCCESS)
                        {
                            CommonUtilities.writeLog("已成功");
                            string xmldoc = "<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>";
                            return(Content(xmldoc, "text/plain"));
                        }
                        // 通知成功
                        if (result_code == "SUCCESS")
                        {
                            //order.Attach = attach;
                            order.Bank_Type    = bank_type;
                            order.Fee_Type     = fee_type;
                            order.Trade_Status = WeChatUtilities.TRADE_STATUS_SUCCESS;
                            order.Trade_Type   = trade_type;
                            //CommonUtilities.writeLog("修改订单");

                            order.Time_Expire = DateTime.ParseExact(time_end, "yyyyMMddHHmmss", System.Globalization.CultureInfo.CurrentCulture);
                            payDB.SaveChanges();
                            //判断是否需要打印小票
                            if (device_info != "")
                            {
                                string printContent = "上海寿全斋电子商务有限公司\r\n" +
                                                      "订单编号:" + transaction_id + "\r\n" +
                                                      "订单金额:" + (double)Convert.ToInt32(total_fee) / 100 + "元\r\n" +
                                                      "付款时间:" + time_end + "\r\n" + "<q>http://www.shouquanzhai.cn/</q>";
                                //GPRSPrint.SendGprsPrintContent(printContent);
                            }
                            string xmldoc = "<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>";
                            return(Content(xmldoc, "text/plain"));
                        }
                        else
                        {
                            string xmldoc = "<xml><return_code><![CDATA[FAIL]]></return_code><return_msg><![CDATA[未知错误]]></return_msg></xml>";
                            return(Content(xmldoc, "text/plain"));
                        }
                    }
                    CommonUtilities.writeLog("无订单");
                }
                else
                {
                    string err_code     = doc.GetElementsByTagName("err_code")[0].InnerText;
                    string err_code_des = doc.GetElementsByTagName("err_code_des")[0].InnerText;
                    string out_trade_no = doc.GetElementsByTagName("out_trade_no")[0].InnerText;
                    var    order        = payDB.WxPaymentOrder.SingleOrDefault(m => m.Trade_No == out_trade_no);
                    if (order != null)
                    {
                        // 已成功订单
                        if (order.Trade_Status == WeChatUtilities.TRADE_STATUS_SUCCESS)
                        {
                            string xmldoc = "<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>";
                            return(Content(xmldoc, "text/plain"));
                        }
                        // 不成功订单
                        else
                        {
                            order.Error_Msg     = err_code;
                            order.Error_Msg_Des = err_code_des;
                            order.Trade_Status  = WeChatUtilities.TRADE_STATUS_CLOSE;
                            payDB.SaveChanges();

                            string xmldoc = "<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>";
                            return(Content(xmldoc, "text/plain"));
                        }
                    }
                }
            }
            catch (Exception e)
            {
                CommonUtilities.writeLog(e.Message + "," + e.StackTrace + "," + e.Source + "," + e.InnerException);
            }
            string xml = "<xml><return_code><![CDATA[FAIL]]></return_code><return_msg><![CDATA[未知错误]]></return_msg></xml>";

            return(Content(xml, "text/plain"));
        }