예제 #1
0
        /**
         * 调用统一下单,获得下单结果
         * @return 统一下单结果
         * @失败时抛异常WxPayException
         */
        public WxPayData GetUnifiedOrderResult(string openid, int total_fee)
        {
            //统一下单
            WxPayData data = new WxPayData();

            data.SetValue("body", "test");
            data.SetValue("attach", "test");
            data.SetValue("out_trade_no", GenerateOutTradeNo());
            LogHelp.WriteTextLog("【out_trade_no】" + "\r\n" + GenerateOutTradeNo(), "", "", "" + "\r\n" + "", System.DateTime.Now);
            data.SetValue("total_fee", total_fee);
            data.SetValue("time_start", DateTime.Now.ToString("yyyyMMddHHmmss"));
            data.SetValue("time_expire", DateTime.Now.AddMinutes(10).ToString("yyyyMMddHHmmss"));
            data.SetValue("goods_tag", "test");
            data.SetValue("trade_type", "JSAPI");
            data.SetValue("openid", openid);

            WxPayData result = UnifiedOrder(data);

            if (!result.IsSet("appId") || !result.IsSet("package"))
            {
                // Log.Error(this.GetType().ToString(), "UnifiedOrder response error!");
                throw new WxPayException("UnifiedOrder response error!");
            }

            unifiedOrderResult = result;
            return(result);
        }
예제 #2
0
        public Wechatpat shuashuashua(string appid, string openid, string Token)
        {
            Wechatpat mode   = new Wechatpat();
            string    strUrl = "https://api.weixin.qq.com/sns/userinfo?access_token=" + appid + "&openid=" + openid + "&lang=zh_CN";

            HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(strUrl);

            req.Method = "GET";
            using (WebResponse wr = req.GetResponse())
            {
                HttpWebResponse myResponse = (HttpWebResponse)req.GetResponse();
                StreamReader    reader     = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);
                string          content    = reader.ReadToEnd();
                if (content.IndexOf("openid") != -1)
                {
                    mode.openid     = JsonHelper.GetVluesParentstr(content, "openid");
                    mode.nickname   = JsonHelper.GetVluesParentstr(content, "nickname");
                    mode.sex        = Convert.ToInt32(JsonHelper.GetVluesParentstr(content, "sex"));
                    mode.province   = JsonHelper.GetVluesParentstr(content, "province");
                    mode.city       = JsonHelper.GetVluesParentstr(content, "city");
                    mode.country    = JsonHelper.GetVluesParentstr(content, "country");
                    mode.headimgurl = JsonHelper.GetVluesParentstr(content, "headimgurl");
                    mode.privilege  = JsonHelper.GetVluesParentstr(content, "privilege");
                    mode.language   = JsonHelper.GetVluesParentstr(content, "language");
                    LogHelp.WriteTextLog("【返回】" + "\r\n" + mode.nickname, mode.openid, "", "" + "\r\n" + "", System.DateTime.Now);
                }
                else
                {
                    mode.errcode = JsonHelper.GetVluesParentstr(content, "errcode");
                    mode.errmsg  = JsonHelper.GetVluesParentstr(content, "errmsg");

                    if (mode.errcode.Equals("40001"))
                    {
                        OpenPat open = GetReAccess_token(Token);
                        if (open.errmsg != null)
                        {
                            if (open.errmsg.IndexOf("invalid refresh_token") == 0)
                            {
                                //refresh_token过期,需重新授权
                                mode.errcode = "-1";
                                mode.errmsg  = "refresh_token过期,需重新授权";
                                return(mode);
                            }
                        }
                        DateTime _youxrq = DateTime.Now;
                        _youxrq = _youxrq.AddSeconds(open.expires_in);
                        if (open.access_token != null)
                        {
                            DBOpt.SelAccessToken(open.access_token, _youxrq, open.refresh_token, open.openid);
                            shuashuashua(open.access_token, open.openid, open.refresh_token);
                        }
                    }
                }
                return(mode);
            }
        }
예제 #3
0
        public string Get_Url(string xmlData)
        {
            //转换数据格式并验证签名
            WxPayData data   = new WxPayData();
            WxPayData res    = new WxPayData();
            string    xml    = "";
            double    money  = 0;
            bool      result = false;

            try
            {
                //SortedDictionary<string, object> datalist=data.FromXml(xmlData);
                //data.m_values = datalist;
                //money=Convert.ToInt32(data.GetValue("total_fee"))/100;
                money = 0.01;
                //data.GetValue("openid");
                //LogHelp.WriteTextLog("【返回】" + "\r\n" + xmlData, xml, "", "" + "\r\n" + "", System.DateTime.Now);
                //用订单号去存
                //Dictionary<string, object> dic=bll.Queryout_trade_no(data.GetValue("out_trade_no").ToString());
                Dictionary <string, object> dic = bll.Queryout_trade_no("151564898120190109204445649");
                if (money == Convert.ToDouble(dic["cash"]))
                {
                    Int64 id = Convert.ToInt64(dic["id"]);
                    Dictionary <string, object> by = bll.QueryPatById(id);
                    by.Add("price", money);
                    by.Add("id", id);
                    result = bll.SaveOuInvoice(by);
                }
                else
                {
                    res.SetValue("return_code", "FAIL");
                    res.SetValue("return_msg", "");
                    xml = res.ToXml();
                }
                //保存数据库
                if (!result)
                {
                    res.SetValue("return_code", "FAIL");
                    res.SetValue("return_msg", "");
                    xml = res.ToXml();
                }
            }
            catch (WxPayException ex)
            {
                //若签名错误,则立即返回结果给微信支付后台
                res.SetValue("return_code", "FAIL");
                res.SetValue("return_msg", ex.Message);
                xml = res.ToXml();
            }
            ResultNotify ify = new ResultNotify();

            xml = ify.ProcessNotify(data);
            LogHelp.WriteTextLog("【返回】" + "\r\n" + xmlData, xml, "", "" + "\r\n" + "", System.DateTime.Now);
            return(xml);
        }
예제 #4
0
        //public ResultNotify(Page page)
        //    : base(page)
        //{
        //}

        public override string ProcessNotify(WxPayData notifyData)
        {
            string xml = "";

            //检查支付结果中transaction_id是否存在
            if (!notifyData.IsSet("transaction_id"))
            {
                //若transaction_id不存在,则立即返回结果给微信支付后台
                WxPayData res = new WxPayData();
                res.SetValue("return_code", "FAIL");
                res.SetValue("return_msg", "支付结果中微信订单号不存在");
                //Log.Error(this.GetType().ToString(), "The Pay result is error : " + res.ToXml());
                xml = res.ToXml();
                return(xml);
            }

            string transaction_id = notifyData.GetValue("transaction_id").ToString();

            LogHelp.WriteTextLog("【transaction_id】" + "\r\n" + transaction_id, "", "", "" + "\r\n" + "", System.DateTime.Now);
            //查询订单,判断订单真实性
            if (!QueryOrder(transaction_id))
            {
                //若订单查询失败,则立即返回结果给微信支付后台
                WxPayData res = new WxPayData();
                res.SetValue("return_code", "FAIL");
                res.SetValue("return_msg", "订单查询失败");
                //Log.Error(this.GetType().ToString(), "Order query failure : " + res.ToXml());
                xml = res.ToXml();
                return(xml);
            }
            //查询订单成功
            else
            {
                WxPayData res = new WxPayData();
                res.SetValue("return_code", "SUCCESS");
                res.SetValue("return_msg", "OK");
                //Log.Info(this.GetType().ToString(), "order query success : " + res.ToXml());
                xml = res.ToXml();
                return(xml);
            }
        }
예제 #5
0
        /**
         *
         * 查询订单
         * @param WxPayData inputObj 提交给查询订单API的参数
         * @param int timeOut 超时时间
         * @throws WxPayException
         * @return 成功时返回订单查询结果,其他抛异常
         */
        public static WxPayData OrderQuery(WxPayData inputObj, int timeOut = 6)
        {
            string url = "https://api.mch.weixin.qq.com/pay/orderquery";

            //检测必填参数
            if (!inputObj.IsSet("out_trade_no") && !inputObj.IsSet("transaction_id"))
            {
                throw new WxPayException("订单查询接口中,out_trade_no、transaction_id至少填一个!");
            }

            inputObj.SetValue("appid", WxPayConfig.GetConfig().GetAppID());        //公众账号ID
            inputObj.SetValue("mch_id", WxPayConfig.GetConfig().GetMchID());       //商户号
            inputObj.SetValue("nonce_str", JsApiPay.GenerateNonceStr());           //随机字符串
            inputObj.SetValue("sign_type", WxPayData.SIGN_TYPE_MD5);               //签名类型
            inputObj.SetValue("sign", inputObj.MakeSign(WxPayData.SIGN_TYPE_MD5)); //签名


            string xml = inputObj.ToXml();

            var start = DateTime.Now;

            //Log.Debug("WxPayApi", "OrderQuery request : " + xml);
            string response = HttpService.Post(xml, url, false, timeOut);//调用HTTP通信接口提交数据

            // Log.Debug("WxPayApi", "OrderQuery response : " + response);
            LogHelp.WriteTextLog("【查询订单返回】" + "\r\n" + response, "", "", "" + "\r\n" + "", System.DateTime.Now);
            var end      = DateTime.Now;
            int timeCost = (int)((end - start).TotalMilliseconds);//获得接口耗时

            //将xml格式的数据转化为对象以返回
            WxPayData result = new WxPayData();

            result.FromXml(response);

            JsApiPay.ReportCostTime(url, timeCost, result);//测速上报

            return(result);
        }