Example #1
0
        public JsonResult setRandomMoney(string _openId, string body)
        {
            //随机数字,并且生成Prepay
            string appid  = WeChatUtilities.getConfigValue(WeChatUtilities.APP_ID);
            string mch_id = WeChatUtilities.getConfigValue(WeChatUtilities.MCH_ID);
            //先确认,之后做随机数
            string nonce_str    = CommonUtilities.generateNonce();
            string out_trade_no = "WXJSAPI_" + DateTime.Now.Ticks;
            Random r            = new Random();
            int    total_fee    = 1580;
            int    baseRandom   = r.Next(0, 99);

            if (baseRandom < 3)
            {
                total_fee = r.Next(40, 158) * 10;
            }
            else
            {
                total_fee = r.Next(108, 158) * 10;
            }
            try
            {
                Wx_OrderResult result = createUnifiedOrder(_openId, body, out_trade_no, total_fee, WeChatUtilities.TRADE_TYPE_JSAPI, "");
                if (result.Result == "SUCCESS")
                {
                    WxPaymentOrder order = new WxPaymentOrder()
                    {
                        Body         = body,
                        Time_Start   = DateTime.Now,
                        Mch_Id       = mch_id,
                        Open_Id      = _openId,
                        Trade_No     = out_trade_no,
                        Total_Fee    = total_fee,
                        Prepay_Id    = result.PrepayId,
                        Trade_Status = WeChatUtilities.TRADE_STATUS_CREATE,
                        Trade_Type   = WeChatUtilities.TRADE_TYPE_JSAPI
                    };
                    payDB.WxPaymentOrder.Add(order);
                    payDB.SaveChanges();
                    return(Json(new { result = "SUCCESS", prepay_id = result.PrepayId, total_fee }, JsonRequestBehavior.AllowGet));
                }
                return(Json(new { result = "FAIL", msg = result.Message }, JsonRequestBehavior.AllowGet));
            }
            catch (Exception e)
            {
                return(Json(new { result = "FAIL", msg = e.ToString() }, JsonRequestBehavior.AllowGet));
            }
        }
Example #2
0
        public ContentResult wx_native_notify()
        {
            StreamReader reader = new StreamReader(Request.InputStream, Encoding.UTF8);
            XmlDocument  doc    = new XmlDocument();

            doc.Load(reader);
            string appid        = doc.GetElementsByTagName("appid")[0].InnerText;
            string openid       = doc.GetElementsByTagName("openid")[0].InnerText;
            string mch_id       = doc.GetElementsByTagName("mch_id")[0].InnerText;
            string is_subscribe = doc.GetElementsByTagName("is_subscribe")[0].InnerText;
            string nonce_str    = doc.GetElementsByTagName("nonce_str")[0].InnerText;
            string product_id   = doc.GetElementsByTagName("product_id")[0].InnerText;
            string request_sign = doc.GetElementsByTagName("sign")[0].InnerText;
            string trade_no     = "WXNATIVE_" + DateTime.Now.Ticks;
            int    total_fee    = 10;
            string _body        = "未知商品";
            string _detail      = "未知商品";

            try
            {
                int _product_id = Convert.ToInt32(product_id);
                var product     = payDB.WxPaymentProduct.SingleOrDefault(m => m.Id == _product_id);
                if (product != null)
                {
                    _body     = product.ProductName;
                    _detail   = product.ProductDetails;
                    total_fee = Convert.ToInt32(product.Total_Fee * 100);
                }
            }
            catch (Exception e)
            {
                CommonUtilities.writeLog(e.ToString());
                total_fee = 10;
                _body     = "未知商品";
                _detail   = "未知商品";
            }

            Wx_OrderResult result = createUnifiedOrder(openid, _body, trade_no, total_fee, WeChatUtilities.TRADE_TYPE_NATIVE, "");

            if (result.Result == "SUCCESS")
            {
                WxPaymentOrder order = new WxPaymentOrder()
                {
                    Body         = _body,
                    Time_Start   = DateTime.Now,
                    Mch_Id       = mch_id,
                    Open_Id      = openid,
                    Detail       = _detail,
                    Trade_No     = trade_no,
                    Product_Id   = product_id,
                    Prepay_Id    = result.PrepayId,
                    Total_Fee    = total_fee,
                    Trade_Status = WeChatUtilities.TRADE_STATUS_CREATE,
                    Trade_Type   = WeChatUtilities.TRADE_TYPE_NATIVE
                };
                payDB.WxPaymentOrder.Add(order);
                payDB.SaveChanges();
                List <QueryParameter> parameters = new List <QueryParameter>();
                parameters.Add(new QueryParameter("return_code", result.Result));
                parameters.Add(new QueryParameter("return_msg", result.Message));
                parameters.Add(new QueryParameter("appid", appid));
                parameters.Add(new QueryParameter("mch_id", mch_id));
                parameters.Add(new QueryParameter("nonce_str", CommonUtilities.generateNonce()));
                parameters.Add(new QueryParameter("prepay_id", result.PrepayId));
                parameters.Add(new QueryParameter("result_code", result.Result));
                parameters.Add(new QueryParameter("err_code_des", result.Message));
                string response_sign = WeChatUtilities.createPaySign(parameters);
                string xmlcontent    = parseXml(parameters, response_sign);
                return(Content(xmlcontent, "text/plain"));
            }
            else
            {
                List <QueryParameter> parameters = new List <QueryParameter>();
                parameters.Add(new QueryParameter("return_code", result.Result));
                parameters.Add(new QueryParameter("return_msg", result.Message));
                string response_sign = WeChatUtilities.createPaySign(parameters);
                string xmlcontent    = parseXml(parameters, response_sign);
                return(Content(xmlcontent, "text/plain"));
            }
        }