예제 #1
0
        public HttpResponseMessage wxpayTest()
        {
            string appid     = "wxd8482615c33b8859";                                     //
            string mch_id    = "1494504712";                                             //微信支付分配的商户号
            string nonce_str = RandHelper.Instance.Str(24, true);;                       //随机字符串,不长于32位。推荐随机数生成算法

            string body         = "饭的支付测试";                                              //商品描述-腾讯充值中心-QQ会员充值
            string out_trade_no = "thisisWXOrder" + DateTime.Now.ToString("yyyy-MM-dd"); //商品订单号只能是数字、大小写字母_-|*@  32位以内
            var    fee          = new Decimal(0.01);

            string total_fee        = (Math.Round((decimal)fee * 100, 0)).ToString(); //总金额
            string spbill_create_ip = "192.168.3.2";                                  //终端ip-用户端实际ip-app传给我
            string notify_url       = apiHost + "/notify/wxpayNotify";                //通知地址
            string trade_type       = "APP";                                          //交易类型

            string mch_key = "2BCF8DD9490E328D2FCEDE7B26643231";

            var dict = new Dictionary <string, string>();

            dict.Add("appid", appid);
            //dict.Add("attach", "attach");
            dict.Add("mch_id", mch_id);
            dict.Add("nonce_str", nonce_str);
            //dict.Add("sign", sign);
            dict.Add("body", body);
            dict.Add("out_trade_no", out_trade_no);
            dict.Add("total_fee", total_fee);
            dict.Add("spbill_create_ip", spbill_create_ip);
            dict.Add("notify_url", notify_url);
            dict.Add("trade_type", trade_type);
            var    signTemp = WXPayHelperHere.getParamSrc(dict) + "&key=" + mch_key;
            string sign     = MD5Helper.Instance.StrToMD5_UTF8(signTemp);//签名-签名生成算法

            var xml = StringHelperHere.Instance.GetWX_XML(appid, "attach", body, mch_id, nonce_str, notify_url, out_trade_no, spbill_create_ip, total_fee, trade_type, sign);
            var url = "https://api.mch.weixin.qq.com/pay/unifiedorder";

            Stream          outstream = null;
            Stream          instream  = null;
            StreamReader    sr        = null;
            HttpWebResponse response  = null;
            HttpWebRequest  request   = null;
            // 要注意的这是这个编码方式,还有内容的Xml内容的编码方式
            Encoding encoding = Encoding.GetEncoding("UTF-8");

            byte[] data = encoding.GetBytes(xml);

            // 准备请求,设置参数
            request             = WebRequest.Create(url) as HttpWebRequest;
            request.Method      = "POST";
            request.ContentType = "text/xml";

            //request.ContentLength = data.Length;

            outstream = request.GetRequestStream();
            outstream.Write(data, 0, data.Length);
            outstream.Flush();
            outstream.Close();
            //发送请求并获取相应回应数据

            response = request.GetResponse() as HttpWebResponse;
            //直到request.GetResponse()程序才开始向目标网页发送Post请求
            instream = response.GetResponseStream();

            sr = new StreamReader(instream, encoding);
            //返回结果网页(html)代码

            string      content = sr.ReadToEnd();
            XmlDocument doc     = new XmlDocument();

            doc.LoadXml(content);
            //string json = Newtonsoft.Json.JsonConvert.SerializeXmlNode(doc);

            //var b = doc.DocumentElement["return_code"].InnerText;

            JObject jo = new JObject();

            foreach (XmlNode item in doc.DocumentElement.ChildNodes)
            {
                jo.Add(item.Name, item.InnerText);
            }
            //return content;
            //var a = 1;
            return(ControllerHelper.Instance.JsonResult(200, JsonConvert.SerializeObject(jo), ""));
        }
예제 #2
0
        public HttpResponseMessage Charge(UserReq req)
        {
            var tokenStr = req.Token;
            var userId   = Convert.ToInt32(req.userId);

            Token token = CacheHelper.GetUserToken(tokenStr);

            if (token == null)
            {
                return(ControllerHelper.Instance.JsonResult(400, "token失效"));
            }
            if (token.Payload.UserID != userId)
            {
                return(ControllerHelper.Instance.JsonResult(400, "token错误"));
            }


            var     payType          = req.payType;
            var     payMoney         = Convert.ToDecimal(req.payMoney);
            var     Spbill_create_ip = req.spbill_create_ip;
            var     out_trade_no     = StringHelperHere.Instance.GetTimeStamp() + StringHelperHere.Instance.GetLastFiveStr(userId.ToString());
            UserPay up = new UserPay();

            up.type       = 0;
            up.status     = false;
            up.userId     = userId;
            up.createTime = DateTime.Now;
            up.takeType   = payType;
            up.outTradeNo = out_trade_no;
            up.money      = payMoney;
            UserPayOper.Instance.Add(up);

            if (payType == "alipay")
            {
                //var str = alipay.CreateAlipayOrder(chargeMoney, out_trade_no, "http://" + apiHost + "/user/chargeByAlipayNotify");

                AlipayHelperHere a = new AlipayHelperHere();
                var b = a.CreateAlipayOrder(req.payMoney, out_trade_no, "https://fan-di.com/notify/chargeByAlipayNotify");

                JObject jo = new JObject();
                jo.Add("payType", "alipay");
                jo.Add("payStr", b);

                return(ControllerHelper.Instance.JsonResult(200, JsonConvert.SerializeObject(jo), ""));
            }
            else
            {
                WXPayHelperHere w = new WXPayHelperHere();
                var             b = w.CreateWXOrder(payMoney, out_trade_no, "https://fan-di.com/notify/ChargeByWxNotify", Spbill_create_ip);

                XmlDocument doc = new XmlDocument();
                doc.LoadXml(b);
                if (doc.DocumentElement["return_code"].InnerText != "SUCCESS")
                {
                    txyInfo txy = new txyInfo();
                    txy.content = JsonConvert.SerializeObject(doc);
                    //txyInfoOper txyOper = new txyInfoOper();
                    txyInfoOper.Instance.Add(txy);
                    return(ControllerHelper.Instance.JsonResult(500, "网络不稳定,请稍后"));
                }

                JObject jo = new JObject();
                jo.Add("payType", "wxpay");
                foreach (XmlNode item in doc.DocumentElement.ChildNodes)
                {
                    if (item.Name != "sign")
                    {
                        jo.Add(item.Name, item.InnerText);
                    }
                }

                var timestamp = StringHelperHere.Instance.GetTimeStamp();
                jo.Add("timestamp", timestamp);
                var dict = new Dictionary <string, string>();

                foreach (var item in jo)
                {
                    if (item.Key == "prepay_id")
                    {
                        dict.Add("prepayid", item.Value.ToString());
                    }
                    if (item.Key == "nonce_str")
                    {
                        dict.Add("noncestr", item.Value.ToString());
                    }
                }

                dict.Add("appid", "wxd8482615c33b8859");
                dict.Add("partnerid", "1494504712");
                dict.Add("package", "Sign=WXPay");
                dict.Add("timestamp", timestamp);

                string sign = StringHelperHere.Instance.GetWXSign(dict, "2BCF8DD9490E328D2FCEDE7B26643231");
                jo.Add("sign", sign);
                return(ControllerHelper.Instance.JsonResult(200, JsonConvert.SerializeObject(jo), ""));
            }
        }