Ejemplo n.º 1
0
        /**
         *
         * 获取收货地址js函数入口参数,详情请参考收货地址共享接口:http://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_9
         * @return string 共享收货地址js函数需要的参数,json格式可以直接做参数使用
         */
        public string GetEditAddressParameters(string AdminHotelid, int Hotelid = 0)
        {
            string parameter = "";

            try
            {
                string host        = page.Request.Url.Host;
                string path        = page.Request.Path;
                string queryString = page.Request.Url.Query;
                //这个地方要注意,参与签名的是网页授权获取用户信息时微信后台回传的完整url
                string url = "http://" + host + path + queryString;

                //构造需要用SHA1算法加密的数据
                WxPayData signData = new WxPayData();
                signData.SetValue("appid", WxPayConfig.APPID(AdminHotelid, Hotelid));
                signData.SetValue("url", url);
                signData.SetValue("timestamp", WxPayApi.GenerateTimeStamp());
                signData.SetValue("noncestr", WxPayApi.GenerateNonceStr());
                signData.SetValue("accesstoken", access_token);
                string param = signData.ToUrl();

                //Log.Debug(this.GetType().ToString(), "SHA1 encrypt param : " + param);
                //SHA1加密
                string addrSign = FormsAuthentication.HashPasswordForStoringInConfigFile(param, "SHA1");
                //Log.Debug(this.GetType().ToString(), "SHA1 encrypt result : " + addrSign);

                //获取收货地址js函数入口参数
                WxPayData afterData = new WxPayData();
                afterData.SetValue("appId", WxPayConfig.APPID(AdminHotelid, Hotelid));
                afterData.SetValue("scope", "jsapi_address");
                afterData.SetValue("signType", "sha1");
                afterData.SetValue("addrSign", addrSign);
                afterData.SetValue("timeStamp", signData.GetValue("timestamp"));
                afterData.SetValue("nonceStr", signData.GetValue("noncestr"));

                //转为json格式
                parameter = afterData.ToJson();
                //Log.Debug(this.GetType().ToString(), "Get EditAddressParam : " + parameter);
            }
            catch (Exception ex)
            {
                Log.Error(this.GetType().ToString(), ex.ToString());
                throw new WxPayException(ex.ToString());
            }

            return(parameter);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 获取扫码支付的Html
        /// </summary>
        /// <param name="transaction">支付交易</param>
        /// <returns></returns>
        public virtual HtmlString GetQRCodePaymentHtml(PaymentTransaction transaction)
        {
            // 获取商户Id等设置
            var apiData = transaction.Api.ExtraData
                          .GetOrDefault <WechatApiHandler.ApiData>("ApiData") ??
                          new WechatApiHandler.ApiData();
            var config = new WxPayConfig(apiData);
            // 获取货币信息,目前仅支持人民币支付
            var templateManager = Application.Ioc.Resolve <TemplateManager>();
            var currencyManager = Application.Ioc.Resolve <CurrencyManager>();
            var info            = currencyManager.GetCurrency(transaction.CurrencyType);

            if (info == null || info.Type != "CNY")
            {
                return(new HtmlString(templateManager.RenderTemplate(
                                          "finance.payment/error_text.html",
                                          new { error = new T("WeChat pay only support CNY") })));
            }
            // 通过微信Api获取二维码Url
            var request = new WxPayData();

            request.SetValue("body", transaction.Description);                           // 交易描述
            request.SetValue("out_trade_no", transaction.Serial);                        // 交易流水号
            request.SetValue("total_fee", ((int)(transaction.Amount * 100)).ToString()); // 总金额,单位分
            request.SetValue("trade_type", "NATIVE");                                    // 扫码支付
            request.SetValue("product_id", transaction.Id.ToString());                   // 商品Id, 这里设置交易id
            var response = WxPayApi.UnifiedOrder(config, request);

            if (response.IsError)
            {
                return(new HtmlString(templateManager.RenderTemplate(
                                          "finance.payment/error_text.html",
                                          new { error = response.ErrMsg })));
            }
            // 生成二维码图片
            var generator    = new QRCodeGenerator();
            var qrCodeUrl    = response.GetValue("code_url") as string;
            var qrCodeData   = generator.CreateQrCode(qrCodeUrl, QRCodeGenerator.ECCLevel.Q);
            var qrCode       = new Base64QRCode(qrCodeData);
            var qrCodeBase64 = qrCode.GetGraphic(20);

            // 返回模板
            return(new HtmlString(templateManager.RenderTemplate(
                                      "finance.payment.wechat/qrcode_pay.html",
                                      new { transactionId = transaction.Id, qrCodeBase64 })));
        }
Ejemplo n.º 3
0
        protected bool IsWeixinSeverIp(ILogger <GameController> logger)
        {
            string clientIp  = httpContextAccessor.HttpContext.Connection.RemoteIpAddress.ToString();
            var    weixinIps = WxPayConfig.GetWeixinIps();
            var    ips       = weixinIps.ip_list;

            logger.LogWarning("客户端Ip:" + clientIp);
            for (int i = 0; i < ips.Length; i++)
            {
                logger.LogWarning("微信severIps:" + ips[i]);
                if (ips[i] == clientIp)
                {
                    return(true);
                }
            }
            return(false);
        }
Ejemplo n.º 4
0
        public WxPayData ReceiveSign(WxPayData res, string city = "")
        {
            string plan_id = res.GetValue("plan_id").ToString();

            city = (plan_id == "107402") ? "杭州市2" : city;
            Log.Write("recesion" + city, res.ToXml());
            var openid = res.GetValue("openid").ToString();

            string mch_id = res.GetValue("mch_id").ToString();

            if (res.IsSet("return_code") && res.IsSet("result_code"))
            {
                string return_code = res.GetValue("return_code").ToString().ToLower().Trim();
                string result_code = res.GetValue("result_code").ToString().ToLower().Trim();
                if (return_code.Equals("success") && result_code.Equals("success"))
                {
                    var Entrustinfo = this.GetEntrustinfo(openid, WxPayConfig.APPID(city), mch_id);
                    if (Entrustinfo != null)
                    {
                        Entrustinfo.DataDriver  = this.DataSource;
                        Entrustinfo.FldSigndata = res.ToXml();

                        string change_type = res.GetValue("change_type").ToString().ToLower();
                        Entrustinfo.FldChangeType = change_type.Equals("add") ? 1 : 0;
                        Entrustinfo.FldContractId = res.GetValue("contract_id").ToString();

                        Entrustinfo.FldMchId = res.GetValue("mch_id").ToString();
                        try
                        {
                            Entrustinfo.FldOperateTime         = DateTime.Parse(res.GetValue("operate_time").ToString());
                            Entrustinfo.FldContractExpiredTime = DateTime.Parse(res.GetValue("contract_expired_time").ToString());
                        }
                        catch
                        {
                            Entrustinfo.FldRequestSerial = res.GetValue("request_serial").ToString();
                        }
                        Entrustinfo.Store();
                    }
                }
            }
            WxPayData pres = new WxPayData();

            pres.SetValue("return_code", "SUCCESS");
            pres.SetValue("return_msg", "回调成功");
            return(pres);
        }
Ejemplo n.º 5
0
        /// <summary>
        /// 查询订单
        /// </summary>
        /// <param name="wxPayConfig"></param>
        /// <param name="transaction_id"></param>
        /// <returns></returns>
        public static bool QueryOrder(WxPayConfig wxPayConfig, string transaction_id)
        {
            WxPayData req = new WxPayData();

            req.SetValue("transaction_id", transaction_id);
            WxPayData res = WxPayApi.OrderQuery(wxPayConfig, req);

            if (res.GetValue("return_code").ToString() == "SUCCESS" &&
                res.GetValue("result_code").ToString() == "SUCCESS")
            {
                return(true);
            }
            else
            {
                return(false);
            }
        }
Ejemplo n.º 6
0
        /**
         * 生成扫描支付模式一URL
         * @param productId 商品ID
         * @return 模式一URL
         */
        public string GetPrePayUrl(string productId, string AdminHotelid, int Hotelid = 0)
        {
            Log.Info(this.GetType().ToString(), "Native pay mode 1 url is producing...");

            WxPayData data = new WxPayData();

            data.SetValue("appid", WxPayConfig.APPID(AdminHotelid, Hotelid));  //公众帐号id
            data.SetValue("mch_id", WxPayConfig.MCHID(AdminHotelid, Hotelid)); //商户号
            data.SetValue("time_stamp", WxPayApi.GenerateTimeStamp());         //时间戳
            data.SetValue("nonce_str", WxPayApi.GenerateNonceStr());           //随机字符串
            data.SetValue("product_id", productId);                            //商品ID
            data.SetValue("sign", data.MakeSign(AdminHotelid, Hotelid));       //签名
            string str = ToUrlParams(data.GetValues());                        //转换为URL串
            string url = "weixin://wxpay/bizpayurl?" + str;

            Log.Info(this.GetType().ToString(), "Get native pay mode 1 url : " + url);
            return(url);
        }
Ejemplo n.º 7
0
        public WxPayConfig GenerateConfigModelW(string machineId)
        {
            WxPayConfig        payConfig = new WxPayConfig();
            List <ConfigModel> lstConfig = GetConfig(machineId);

            if (lstConfig.Count > 0)
            {
                ConfigModel cModel = lstConfig[0];

                payConfig.APPID            = cModel.WxAppId;
                payConfig.MCHID            = cModel.WxMchId;
                payConfig.KEY              = cModel.WxKey;
                payConfig.APPSECRET        = cModel.WxAppSecret;
                payConfig.SSLCERT_PATH     = cModel.WxSslcertPath;
                payConfig.SSLCERT_PASSWORD = cModel.WxSslcertPassword;
            }
            return(payConfig);
        }
        /// <summary>
        /// 绑定手机号
        /// </summary>
        /// <param name="openid"></param>
        /// <param name="mobile"></param>
        /// <param name="code"></param>
        /// <returns></returns>
        public JsonResult BindMobile(string openid, string mobile, string code, string nickname, string city)
        {
            bool      result = false, needCheck = (ConfigurationManager.AppSettings["RNameNeedCheck"] == "1")?true:false;
            string    msg       = string.Empty;
            var       bus       = new Bus(this.DataSource);
            var       user      = bus.GetEntrustinfo(openid, WxPayConfig.APPID(city), WxPayConfig.getMCHID(city));
            var       wxuser    = bus.GetUserInfo(openid, WxPayConfig.APPID(city));
            var       isSign    = bus.isSign(openid, WxPayConfig.APPID(city), city);
            exterData exdata    = null;
            var       dc        = new Tb_Wx_Mobilecode(this.DataSource);
            var       obilecode = dc.FindFirst <Tb_Wx_Mobilecode>(string.Format("lower(FLD_Code)='{0}' and fld_mobile='{1}' and USED=0 order by id desc", code.ToLower(), mobile));

            if (obilecode != null)
            {
                obilecode.Used       = 1;
                obilecode.DataDriver = this.DataSource;
                obilecode.Store();
                if (obilecode.FldExpiredTime.CompareTo(DateTime.Now) < 0)
                {
                    result = false;
                    msg    = "验证码过期!";
                }
                else
                {
                    exdata          = bus.Sign(openid, nickname, Request.UserHostAddress, city);
                    user.DataDriver = this.DataSource;
                    user.FldMobile  = mobile;
                    user.Store();
                    wxuser.DataDriver = this.DataSource;
                    wxuser.Mobile     = mobile;
                    wxuser.Store();
                    result = true;
                }
            }
            else
            {
                msg = "无效验证码!";
            }
            if (!string.IsNullOrEmpty(wxuser.Mobile) && needCheck == false)
            {
                needCheck = (wxuser.Mobile.iEqualsArr(ConfigurationManager.AppSettings["RNameCheckPhones"])) ? true : false;
            }
            return(Json(new { result = result, msg = msg, exdata = exdata, isSign = isSign, needCheck = needCheck, RNameChecked = wxuser.RNameChecked }, JsonRequestBehavior.AllowGet));
        }
Ejemplo n.º 9
0
        public WxPayData getToken(string contract_id, string city, string qrcode_hashs, int token_count = 1)
        {
            string    url  = "https://api.mch.weixin.qq.com/transit/gettoken";
            WxPayData data = new WxPayData();

            data.SetValue("appid", WxPayConfig.APPID(city));
            data.SetValue("mch_id", WxPayConfig.getMCHID(city));
            data.SetValue("nonce_str", WxPayApi.GenerateNonceStr());
            data.SetValue("contract_id", contract_id);
            data.SetValue("sign_type", "HMAC-SHA256");
            data.SetValue("sign", data.MakeSign_SHA256());
            data.SetValue("token_count", token_count);
            data.SetValue("qrcode_hashs", qrcode_hashs);
            string    xml = HttpService.Post(data.ToXml(), url, false, 10);
            WxPayData res = new WxPayData();

            res.FromXml(xml);
            return(res);
        }
Ejemplo n.º 10
0
        public IActionResult GetWxOpenid(string code)
        {
            WxPayConfig wxPayConfig = new WxPayConfig();

            //首先构造微信请求授权url,重定向到该url中,其中redirectUrl是回调地址,必须保证该地址在公网上能访问,本例子构造的是返回到本控制器的方法。
            //若是从微信授权返回进入该方法,则会带上一个参数,code就不为空,若code为空则跳转微信授权
            if (string.IsNullOrEmpty(code))
            {
                var redirectUrl = OAuth.GetAuthorizeUrl(wxPayConfig.appid, wxPayConfig.notify_url);
                return(Redirect(redirectUrl));
            }
            else
            {
                //根据code和微信参数得到openid
                var openId = OAuth.GetOpenid(wxPayConfig.appid, wxPayConfig.appSecret, code);
                //业务处理
            }
            return(View());
        }
Ejemplo n.º 11
0
        /// <summary>
        /// 上传图片或文件 不能大于2M
        /// </summary>
        /// <param name="filePath"></param>
        /// <returns></returns>
        public static string Upfile(string filePath)
        {
            FileStream file = new FileStream(filePath, FileMode.Open);

            byte[] bb = new byte[file.Length];
            file.Read(bb, 0, (int)file.Length);
            file.Close();
            string fileName          = Path.GetFileName(filePath);
            MsMultiPartFormData form = new MsMultiPartFormData();
            string decodeName        = HttpUtility.UrlDecode(Path.GetFileName(fileName));//最终服务器会按原文件名保存文件,所以需要将文件名编码下,防止中文乱码
            string fileKeyName       = "media";

            form.AddStreamFile(fileKeyName, fileName, bb);

            String hashMd5 = Lib.HashHelper.ComputeMD5(filePath);

            WxPayData inputObj = new WxPayData();

            inputObj.SetValue("mch_id", WxPayConfig.GetConfig().GetMchID());
            inputObj.SetValue("media_hash", hashMd5);
            inputObj.SetValue("sign_type", "HMAC-SHA256");
            //inputObj.SetValue("sign", inputObj.MakeSign());//签名

            form.AddFormField("mch_id", WxPayConfig.GetConfig().GetMchID());
            form.AddFormField("media_hash", hashMd5);
            form.AddFormField("sign_type", "HMAC-SHA256");
            form.AddFormField("sign", inputObj.MakeSign());                              //签名

            string SERVICE_URL = "https://api.mch.weixin.qq.com/secapi/mch/uploadmedia"; //最终接收文件上传的服务接口

            string rst = Lib.HttpService.Post(inputObj.ToXml(), SERVICE_URL, form, true, 10);

            inputObj = new WxPayData();
            inputObj.FromXml(rst);

            if (inputObj.GetValue("return_code").ToString() == "SUCCESS")
            {
                return(inputObj.GetValue("media_id").ToString());
            }

            return(inputObj.GetValue("return_msg").ToString());
        }
Ejemplo n.º 12
0
        /// <summary>
        /// 配置支付请求参数,根据当前商家获取
        /// </summary>
        /// <param name="BussId"></param>
        public WxPayConfig GenerateConfig(string BussId)
        {
            WxPayConfig   wxPayConfig = null;
            IDbConnection conn        = new SqlConnection(ConnectionDb.GetBusinessConnection());
            string        query       = "SELECT * FROM Tb_WeiXinPayCertificate WHERE BussId=@BussId";

            Model.Model.Buss.Tb_WeiXinPayCertificate T = conn.Query <Model.Model.Buss.Tb_WeiXinPayCertificate>(query, new { BussId = BussId }).SingleOrDefault();
            if (T != null)
            {
                wxPayConfig                  = new WxPayConfig();
                wxPayConfig.APPID            = T.appid.ToString();
                wxPayConfig.MCHID            = T.mch_id.ToString();
                wxPayConfig.KEY              = T.appkey.ToString();
                wxPayConfig.APPSECRET        = T.appsecret.ToString();
                wxPayConfig.SSLCERT_PATH     = T.SSLCERT_PATH;
                wxPayConfig.SSLCERT_PASSWORD = T.SSLCERT_PASSWORD;
                wxPayConfig.NOTIFY_URL       = Global_Fun.AppWebSettings("WechatPayBuss_Notify_Url").ToString();
            }
            return(wxPayConfig);
        }
Ejemplo n.º 13
0
        public async Task <Tuple <bool, string> > AppPay(string body, string outTradeNo, int totalFee)
        {
            try
            {
                var appId = "XX";
                var mchId = "XX";
                var key   = "XX";
                WxPayConfig.Config(appId, mchId, key);
                var appPay = new AppPay();
                var result = await appPay.Run(body, outTradeNo, totalFee);

                return(result == null
                    ? new Tuple <bool, string>(false, "返回数据为空!")
                    : new Tuple <bool, string>(true, AppSign(result.ToJson())));
            }
            catch (Exception e)
            {
                return(new Tuple <bool, string>(false, e.Message));
            }
        }
Ejemplo n.º 14
0
        /// <summary>
        /// 配置支付请求参数,根据当前小区获取
        /// </summary>
        /// <param name="Row"></param>
        public WxPayConfig GenerateConfig(string CommunityId)
        {
            WxPayConfig             wxPayConfig = null;
            IDbConnection           conn        = new SqlConnection(PubConstant.UnifiedContionString.ToString());
            string                  query       = "SELECT * FROM Tb_WeiXinPayCertificate WHERE CommunityId=@CommunityId";
            Tb_WeiXinPayCertificate T           = conn.Query <Tb_WeiXinPayCertificate>(query, new { CommunityId = CommunityId }).SingleOrDefault();

            if (T != null)
            {
                wxPayConfig                  = new WxPayConfig();
                wxPayConfig.APPID            = T.appid.ToString();
                wxPayConfig.MCHID            = T.mch_id.ToString();
                wxPayConfig.KEY              = T.appkey.ToString();
                wxPayConfig.APPSECRET        = T.appsecret.ToString();
                wxPayConfig.SSLCERT_PATH     = T.SSLCERT_PATH;
                wxPayConfig.SSLCERT_PASSWORD = T.SSLCERT_PASSWORD;
                wxPayConfig.NOTIFY_URL       = Global_Fun.AppWebSettings("WechatPay_Notify_Url").ToString();
            }
            return(wxPayConfig);
        }
Ejemplo n.º 15
0
        public bool isSign(string openid, string appid, string city)
        {
            bool _isSign     = false;
            var  edc         = new Tb_Wx_Entrustinfo(this.DataSource);
            var  Entrustinfo = GetEntrustinfo(openid, appid, WxPayConfig.getMCHID(city));

            if (Entrustinfo != null)
            {
                if (Entrustinfo.FldQuerydate.ToString("yyyy-MM-dd") == ("1753-01-01"))
                {
                    //一天调一次
                    string outxml = string.Empty;
                    _isSign = this.QueryContract(city, Entrustinfo.FldContractId, out outxml);
                    if (_isSign)
                    {
                        Entrustinfo.DataDriver    = this.DataSource;
                        Entrustinfo.FldQuerydate  = DateTime.Now;
                        Entrustinfo.FldChangeType = 1;
                        Entrustinfo.Store();
                    }
                    else
                    {
                        if (Entrustinfo.FldChangeType == 1)
                        {
                            Entrustinfo.DataDriver    = this.DataSource;
                            Entrustinfo.FldChangeType = 0;
                            Entrustinfo.Store();
                        }
                    }
                }
                else
                {
                    if (Entrustinfo.FldChangeType == 1 && DateTime.Compare(Entrustinfo.FldContractExpiredTime, DateTime.Now) > 0)
                    {
                        _isSign = true;
                    }
                }
            }

            return(_isSign);
        }
Ejemplo n.º 16
0
        /***
         * 申请退款完整业务流程逻辑
         * @param transaction_id 微信订单号(优先使用)
         * @param out_trade_no 商户订单号
         * @param total_fee 订单总金额
         * @param refund_fee 退款金额
         * @return 退款结果(xml格式)
         */
        public static string Run(string transaction_id, string out_trade_no, string total_fee, string refund_fee, string AdminHotelid, int hotelid)
        {
            WxPayData data = new WxPayData();

            if (!string.IsNullOrEmpty(transaction_id))//微信订单号存在的条件下,则已微信订单号为准
            {
                data.SetValue("transaction_id", transaction_id);
            }
            else//微信订单号不存在,才根据商户订单号去退款
            {
                data.SetValue("out_trade_no", out_trade_no);
            }
            data.SetValue("total_fee", int.Parse(total_fee));                                   //订单总金额
            data.SetValue("refund_fee", int.Parse(refund_fee));                                 //退款金额
            data.SetValue("out_refund_no", WxPayApi.GenerateOutTradeNo(AdminHotelid, hotelid)); //随机生成商户退款单号
            data.SetValue("op_user_id", WxPayConfig.MCHID(AdminHotelid, hotelid));              //操作员,默认为商户号
            WxPayData result = WxPayApi.Refund(data, AdminHotelid, hotelid);                    //提交退款申请给API,接收返回数据

            //Log.Info("Refund", "Refund process complete, result : " + result.ToXml());
            return(result.ToXml());
        }
Ejemplo n.º 17
0
        /// <summary>
        /// 配置支付请求参数,根据当前小区获取
        /// </summary>
        /// <param name="Row"></param>
        public WxPayConfig GenerateConfig(string CommunityId)
        {
            WxPayConfig             wxPayConfig = null;
            string                  strcon      = PubConstant.GetConnectionString("APPConnection");
            IDbConnection           conn        = new SqlConnection(strcon);
            string                  query       = "SELECT * FROM Tb_WeiXinPayCertificate WHERE CommunityId=@CommunityId";
            Tb_WeiXinPayCertificate T           = conn.Query <Tb_WeiXinPayCertificate>(query, new { CommunityId = CommunityId }).SingleOrDefault();

            if (T != null)
            {
                wxPayConfig                  = new WxPayConfig();
                wxPayConfig.APPID            = T.appid.ToString();
                wxPayConfig.MCHID            = T.mch_id.ToString();
                wxPayConfig.KEY              = T.appkey.ToString();
                wxPayConfig.APPSECRET        = T.appsecret.ToString();
                wxPayConfig.SSLCERT_PATH     = T.SSLCERT_PATH;
                wxPayConfig.SSLCERT_PASSWORD = T.SSLCERT_PASSWORD;
                wxPayConfig.NOTIFY_URL       = PubConstant.GetConnectionString("WeiXinPayBackURL");
            }
            return(wxPayConfig);
        }
Ejemplo n.º 18
0
        public JsonResult GetPaySign(string openid)
        {
            string nonceStr       = WxPayApi.GenerateNonceStr();                       //随机字符串,不长于32位
            string outTradeNo     = WxPayApi.GenerateOutTradeNo();                     //订单号:32个字符内、不得重复
            string spbillCreateIp = WxPayConfig.GetIP(System.Web.HttpContext.Current); //用户端IP
            int    total_fee      = 1;                                                 //订单金额(单位:分),整数
            string trade_type     = "JSAPI";                                           //JSAPI,NATIVE,APP,WAP

            #region 调用统一支付接口获得prepay_id(预支付交易会话标识)
            WxPayData wxPayData = new WxPayData();
            wxPayData.SetValue("appid", WxPayConfig.APPID);            //appid
            wxPayData.SetValue("body", WxPayConfig.BODY);              //支付描述
            wxPayData.SetValue("mch_id", WxPayConfig.MCHID);           //商户id
            wxPayData.SetValue("nonce_str", nonceStr);                 //随机字符串
            wxPayData.SetValue("notify_url", WxPayConfig.NOTIFY_URL);  //回调地址
            wxPayData.SetValue("openid", openid);                      //openid
            wxPayData.SetValue("out_trade_no", outTradeNo);            //订单号
            wxPayData.SetValue("spbill_create_ip", spbillCreateIp);    //客户端ip地址
            wxPayData.SetValue("total_fee", total_fee.ToString());     //订单金额(单位:分),整数
            wxPayData.SetValue("trade_type", trade_type);              //交易类型
            wxPayData.SetValue("sign", wxPayData.MakeSign());          //签名
            string data     = wxPayData.ToXml();
            string prepayId = WeChatTools.UnifiedOrder(data);
            #endregion

            #region 支付参数
            string timeStamp = WxPayApi.GenerateTimeStamp();
            nonceStr = WxPayApi.GenerateNonceStr();
            WxPayData wxPaySign = new WxPayData();
            wxPaySign.SetValue("appId", WxPayConfig.APPID);
            wxPaySign.SetValue("timeStamp", timeStamp);
            wxPaySign.SetValue("nonceStr", nonceStr);
            wxPaySign.SetValue("package", string.Format("prepay_id={0}", prepayId));
            wxPaySign.SetValue("signType", "MD5");
            string paysign = wxPaySign.MakeSign();
            wxPaySign.SetValue("paySign", paysign);
            #endregion

            return(Json(new { data = wxPaySign.GetValues(), openid = openid }, JsonRequestBehavior.AllowGet));
        }
Ejemplo n.º 19
0
        /// <summary>
        /// 获取小程序openId
        /// </summary>
        /// <param name="code"></param>
        /// <returns></returns>
        public AuthCode2Session authCode2Session(string code)
        {
            try
            {
                #region 获取小程序授权信息
                WxPayData data = new WxPayData();
                data.SetValue("appid", WxPayConfig.GetConfig().GetAppIDmini());
                data.SetValue("secret", WxPayConfig.GetConfig().GetAppSecretmini());
                data.SetValue("code", code);
                data.SetValue("grant_type", "authorization_code");
                string           url  = "https://api.weixin.qq.com/sns/oauth2/access_token?" + data.ToUrl();
                AuthCode2Session auth = wxPageApi.authCode2Session(data.GetValue("appid").ToString(), data.GetValue("secret").ToString(), data.GetValue("code").ToString(), data.GetValue("grant_type").ToString());
                #endregion

                return(auth);
            }
            catch (Exception ex)
            {
                Log.Error(this.GetType().ToString(), ex.ToString());
                throw new WxPayException(ex.ToString());
            }
        }
Ejemplo n.º 20
0
        protected void Page_Load(object sender, EventArgs e)
        {
            if (Request.QueryString["code"] != null)
            {
                string state        = "";
                string AdminHotelid = "1";
                int    Hotelid      = 0;
                if (Request["state"] != null)
                {
                    state = Server.UrlDecode(Request["state"]);
                    string[] urlid = state.Split('?');    //dh.sewa-power.com/Reservation/HotelDetails.aspx?AdminHotelid=SEWA006637&hotelid=36
                    string[] a     = urlid[1].Split('&'); //AdminHotelid=SEWA006637&hotelid=36
                    string[] b     = a[0].Split('=');     //AdminHotelid=SEWA006637
                    string[] c     = a[1].Split('=');     //hotelid=36
                    AdminHotelid = b[1];
                    Hotelid      = Convert.ToInt32(c[1]);
                }


                string code    = Request["code"].ToString();
                string postUrl = "https://api.weixin.qq.com/sns/oauth2/access_token?appid={0}&secret={1}&code={2}&grant_type=authorization_code";
                postUrl = string.Format(postUrl, WxPayConfig.APPID(AdminHotelid, Hotelid), WxPayConfig.APPSECRET(AdminHotelid, Hotelid), code);
                string returnJason = GetJson(postUrl);
                //获取返回信息

                JavaScriptSerializer        serializer = new JavaScriptSerializer();
                Dictionary <string, object> json       = (Dictionary <string, object>)serializer.DeserializeObject(returnJason);
                object value;
                string openid = "";
                if (json.TryGetValue("openid", out value))
                {
                    openid = value.ToString();
                    Session["zfzdyopenid" + AdminHotelid + Hotelid] = openid.ToString();
                    Session.Timeout = 60 * 60 * 24;
                }
                Log.Info("获取支付到店zfzdyopenid:" + openid + ",URL:", state);
                Response.Redirect(state, false);
            }
        }
Ejemplo n.º 21
0
        /// <summary>
        /// 整个验证的核心
        /// </summary>
        /// <param name="model"></param>

        //可以给WeChatRequestModel 加东西,比如我加了Code。
        //登录的时候我就可以从微信拿到Code
        public async Task <GetUser> Valid(WeChatRequestModel model)
        {
            //获取请求来的 echostr 参数
            string echoStr = model.echostr;

            //通过验证,出于安全考虑。(也可以跳过)
            if (CheckSignature(model))
            {
                if (!string.IsNullOrEmpty(echoStr))
                {
                    //将随机生成的 echostr 参数 原样输出
                    await Response.WriteAsync(echoStr);

                    //截止输出流
                    //Response.end();
                }
            }
            //解析连接的类
            WxPayConfig wxPayConfig = new WxPayConfig();
            //通过code换取网页授权access_token
            string     url          = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" + wxPayConfig.appid + "&secret=" + wxPayConfig.appSecret + "&code=" + model.code + "&grant_type=authorization_code";
            HttpClient httpClient   = new HttpClient();
            var        getParameter = await httpClient.GetStringAsync(url); //getHttp.GetJson(url);

            //把结果字符串反序列化成List对象。
            var parameter = JsonConvert.DeserializeObject <GetToken>(getParameter);
            //拉取用户信息
            //如果网页授权作用域为snsapi_userinfo,则此时开发者可以通过access_token和openid拉取用户信息了。
            string Userurl = "https://api.weixin.qq.com/sns/userinfo?access_token=" + parameter.access_token + "&openid=" + parameter.openid + "&lang=zh_CN";
            //获得连接字符串的数据

            var getUser = await httpClient.GetStringAsync(Userurl);

            //把结果字符串反序列化成List对象。1
            var User = JsonConvert.DeserializeObject <GetUser>(getUser);

            return(User);
        }
Ejemplo n.º 22
0
        /// <summary>
        /// 微信支付异步回调
        /// </summary>
        /// <returns></returns>
        public string WxNotify()
        {
            try
            {
                //使用微信工具获取ResponseHandler
                ResponseHandler wxResponseHandler = new ResponseHandler(HttpContext);
                string          out_trade_no      = wxResponseHandler.GetParameter("1010");      //订单号
                string          total_fee         = wxResponseHandler.GetParameter("total_fee"); //订单金额,单位分
                total_fee = (Convert.ToDecimal(total_fee) / 100).ToString("9.00");               //订单金额,单位元
                Console.WriteLine("微信测试收到数据,订单号:" + out_trade_no + "订单金额:" + total_fee, "【微信支付回调】");

                //验证订单是否有支付过逻辑

                //验证订单信息,获取支付配置
                WxPayConfig payConfigModel = new WxPayConfig();//后面去可以去配置或者数据库中获取<br>
                //验证是否通过微信安全认证
                WxPayService wxPayService = new WxPayService();
                //还没开始写
                bool vxCheck = wxPayService.WxPayCheck(wxResponseHandler);//使用sdk去验证
                if (vxCheck)
                {
                    //更新订单
                    //ProcessOrder(out_trade_no);
                    Log.Info("微信验证成功" + out_trade_no, "【微信支付回调】");
                    return("成功");
                }
                else
                {
                    Log.Info("微信测试失败" + out_trade_no, "【微信支付回调】");
                    return("微信测试失败");
                }
            }
            catch (Exception ex)
            {
                Log.Error("微信测试回调异常", ex, "【微信支付回调】");
                return("微信测试回调异常");
            }
        }
Ejemplo n.º 23
0
        /**
         *
         * 通过code换取网页授权access_token和openid的返回数据,正确时返回的JSON数据包如下:
         * {
         *  "access_token":"ACCESS_TOKEN",
         *  "expires_in":7200,
         *  "refresh_token":"REFRESH_TOKEN",
         *  "openid":"OPENID",
         *  "scope":"SCOPE",
         *  "unionid": "o6_bmasdasdsad6_2sgVt7hMZOPfL"
         * }
         * 其中access_token可用于获取共享收货地址
         * openid是微信支付jsapi支付接口统一下单时必须的参数
         * 更详细的说明请参考网页授权获取用户基本信息:http://mp.weixin.qq.com/wiki/17/c0f37d5704f0b64713d5d2c37b468d75.html
         * @失败时抛异常WxPayException
         */
        public UserInfo GetOpenidAndAccessTokenFromCode(string code)
        {
            try
            {
                #region 构造获取openid及access_token的url
                WxPayData data = new WxPayData();
                data.SetValue("appid", WxPayConfig.GetConfig().GetAppID());
                data.SetValue("secret", WxPayConfig.GetConfig().GetAppSecret());
                data.SetValue("code", code);
                data.SetValue("grant_type", "authorization_code");
                string url = "https://api.weixin.qq.com/sns/oauth2/access_token?" + data.ToUrl();
                //请求url以获取数据
                string result = HttpService.Get(url);
                Log.Debug(this.GetType().ToString(), "GetOpenidAndAccessTokenFromCode response : " + result);
                //保存access_token,用于收货地址获取
                JsonData jd = JsonMapper.ToObject(result);
                #endregion

                string access_token = (string)jd["access_token"];
                string openid       = (string)jd["openid"];

                #region 记录用户授权授,模式必须为snsapi_userinfo,保存用户基本信息
                UserInfo info = wxPageApi.GetUserInfo(access_token, openid, WxPayConfig.GetConfig().GetLang());
                info.accesstoken = access_token;
                Log.UserAuthorizeInfo("GetUserInfo", "UserInfo : " + Newtonsoft.Json.JsonConvert.SerializeObject(info));                                                  //记录用户授权后的用户信息
                Log.UserAuthorizeInfo("GetUserInfo", "oauthrizeInfo : " + result);                                                                                        //记录用户授权后的用户信息
                Log.UserAuthorizeInfo("GetUserInfo", "end~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ : " + result); //记录用户授权后的用户信息
                #endregion

                return(info);
            }
            catch (Exception ex)
            {
                Log.Error(this.GetType().ToString(), ex.ToString());
                throw new WxPayException(ex.ToString());
            }
        }
Ejemplo n.º 24
0
        public WxPayConfig GenerateConfigModelWByClientId(string clientId)
        {
            var         conditions = new List <Condition>();
            WxPayConfig payConfig  = new WxPayConfig();

            if (string.IsNullOrEmpty(clientId))
            {
                return(payConfig);
            }

            conditions.Add(new Condition
            {
                LeftBrace    = "  AND ",
                ParamName    = "ClientId",
                DbColumnName = "client_id",
                ParamValue   = clientId,
                Operation    = ConditionOperate.Equal,
                RightBrace   = "",
                Logic        = ""
            });

            List <ConfigModel> lstConfig = GenerateDal.LoadByConditions <ConfigModel>(CommonSqlKey.GetPayConfigByClientId, conditions);


            if (lstConfig.Count > 0)
            {
                ConfigModel cModel = lstConfig[0];

                payConfig.APPID            = cModel.WxAppId;
                payConfig.MCHID            = cModel.WxMchId;
                payConfig.KEY              = cModel.WxKey;
                payConfig.APPSECRET        = cModel.WxAppSecret;
                payConfig.SSLCERT_PATH     = cModel.WxSslcertPath;
                payConfig.SSLCERT_PASSWORD = cModel.WxSslcertPassword;
            }
            return(payConfig);
        }
        /// <summary>
        /// 实名认证 回调
        /// </summary>
        /// <returns></returns>
        public ViewResult Paycallback()
        {
            var       notify      = new Notify(this.Request);
            var       res         = notify.GetNotifyData();
            string    return_code = res.GetValue("return_code").ToString();
            string    result_code = res.GetValue("result_code").ToString();
            WxPayData wres        = new WxPayData();

            if (return_code.iEquals("success") && return_code.iEquals("success"))
            {
                var openid   = res.GetValue("openid").ToString();
                var bus      = new Bus(this.DataSource);
                var userinfo = bus.GetUserInfo(openid, WxPayConfig.APPID(""));
                if (userinfo != null)
                {
                    userinfo.RNameChecked = 1;
                    userinfo.DataDriver   = this.DataSource;
                    userinfo.Store();
                }
            }
            wres.SetValue("return_code", "SUCCESS");
            wres.SetValue("return_msg", "回调成功");
            return(View("callback", wres));
        }
Ejemplo n.º 26
0
        public string SearchBankOrder(string CommunityId, string out_trade_no)
        {
            string Result = "";

            WxPayConfig          wxPayConfig = GenerateConfig(CommunityId);
            string               strcon      = PubConstant.GetConnectionString("APPConnection");
            IDbConnection        conn        = new SqlConnection(strcon);
            string               query       = "SELECT * FROM Tb_OL_WeiXinPayOrder WHERE out_trade_no=@out_trade_no";
            Tb_OL_WeiXinPayOrder T_Order     = conn.Query <Tb_OL_WeiXinPayOrder>(query, new { out_trade_no = out_trade_no }).SingleOrDefault();

            if (T_Order == null)
            {
                Result = "未找到该物业订单";
                return(Result);
            }

            WxPayData data = new WxPayData();

            data.SetValue("out_trade_no", out_trade_no);
            WxPayData BankResult = WxPayApi.OrderQuery(data);//提交订单查询请求给API,接收返回数据

            Result = BankResult.GetValue("trade_state").ToString();
            return(Result);
        }
Ejemplo n.º 27
0
        /// <summary>
        /// 查询签约关系
        /// </summary>
        /// <param name="contract_id"></param>
        /// <returns></returns>
        public bool QueryContract(string city, string contract_id, out string outxml)
        {
            WxPayData inputObj = new WxPayData(city);

            inputObj.SetValue("appid", WxPayConfig.APPID(city));
            inputObj.SetValue("mch_id", WxPayConfig.getMCHID(city));
            inputObj.SetValue("contract_id", contract_id);
            inputObj.SetValue("version", "1.0");
            inputObj.SetValue("sign", inputObj.MakeSign());
            string    url    = "https://api.mch.weixin.qq.com/papay/querycontract";
            string    xml    = inputObj.ToXml();
            string    result = HttpService.Post(xml, url, false, 10);
            WxPayData data   = new WxPayData();

            data.FromXml(result);
            outxml = result;
            bool isSign = false;

            if (data.IsSet("contract_state") && data.GetValue("contract_state").ToString() == "0")
            {
                isSign = true;
            }
            return(isSign);
        }
Ejemplo n.º 28
0
        /// <summary>
        /// 获取审核结果
        /// </summary>
        /// <param name="business_code"></param>
        /// <returns></returns>
        public static string Getstate(string business_code)

        {
            WxPayData inputObj = new WxPayData();

            inputObj.SetValue("version", "1.0");                             //接口版本号
            inputObj.SetValue("mch_id", WxPayConfig.GetConfig().GetMchID()); //商户号
            inputObj.SetValue("nonce_str", WxPayApi.GenerateNonceStr());     //随机字符串
            inputObj.SetValue("business_code", business_code);               //

            inputObj.SetValue("sign_type", WxPayData.SIGN_TYPE_HMAC_SHA256); //签名类型
            inputObj.SetValue("sign", inputObj.MakeSign());                  //签名

            string xml     = inputObj.ToXml();
            string url     = "https://api.mch.weixin.qq.com/applyment/micro/getstate";
            int    timeOut = 10;

            Log.Debug("申请入驻", "request : " + xml);
            string response = HttpService.Post(xml, url, true, timeOut);//调用HTTP通信接口以提交数据到API

            Log.Debug("申请入驻", "response : " + response);

            return(response);
        }
        public JsonResult EncryptedBindPhone(string code, string iv, string data, string nickname, string city)
        {
            var bus = new Bus(this.DataSource);
            var pay = new JsApiPay(this.Request);

            pay.GetOpenidAndSession(code, city);
            Phone     phone  = new Phone();
            bool      state  = false;
            exterData exdata = null;
            var       wxuser = bus.GetUserInfo(pay.openid, WxPayConfig.APPID(city));
            var       isSign = bus.isSign(pay.openid, WxPayConfig.APPID(city), city);

            if (!string.IsNullOrEmpty(pay.session_key))
            {
                string result = bus.AESDecrypt(iv, pay.session_key, data);
                phone             = Bus.JsonDeserialize <Phone>(result);
                state             = true;
                wxuser.Mobile     = phone.phoneNumber;
                wxuser.DataDriver = this.DataSource;
                wxuser.Store();
                exdata = bus.Sign(pay.openid, nickname, Request.UserHostAddress, city);
            }
            return(Json(new { exdata = exdata, isSign = isSign, state = state, phone = phone }, JsonRequestBehavior.AllowGet));
        }
Ejemplo n.º 30
0
        /// <summary>
        /// 发起统一支付(Demo)
        /// </summary>
        /// <param name="wxPayConfig"></param>
        /// <param name="out_trade_no">商户订单号</param>
        /// <param name="body">标题</param>
        /// <param name="total_fee">金额(分)</param>
        /// <param name="openid">wx openid</param>
        /// <returns></returns>
        public static WxPayData JSAPIOrder(WxPayConfig wxPayConfig, string out_trade_no, string body, int total_fee,
                                           string openid)
        {
            WxPayData data = new WxPayData();

            data.SetValue("time_start", DateTime.Now.ToString("yyyyMMddHHmmss"));
            data.SetValue("time_expire", DateTime.Now.AddMinutes(30).ToString("yyyyMMddHHmmss"));
            data.SetValue("device_info", "WEB");
            data.SetValue("body", body);
            data.SetValue("out_trade_no", out_trade_no);
            data.SetValue("total_fee", total_fee);
            data.SetValue("trade_type", "JSAPI");
            data.SetValue("openid", openid);

            WxPayData result = WxPayApi.UnifiedOrder(wxPayConfig, data);

            if (!result.IsSet("appid") || !result.IsSet("prepay_id") || result.GetValue("prepay_id").ToString() == "")
            {
                Log.Error("WeiXinMPPayHelper.UnifiedOrder", "UnifiedOrder response error!");
                throw new WxPayException("UnifiedOrder response error!" + result.ToJson());
            }

            return(result);
        }