Exemplo n.º 1
0
        /// <summary>
        /// 获取默认请求参数
        /// </summary>
        /// <returns></returns>
        public static ParameterData GetDefaultParameter()
        {
            var data = new ParameterData();

            data.SetValue("version", "2.0");                                                        //接口版本号
            data.SetValue("charset", "UTF-8");                                                      //字符集
            data.SetValue("sign_type", "MD5");                                                      //签名方式
            data.SetValue("mch_id", SwiftPassConfig.mch_id);                                        //必填项,商户号,由平台分配
            data.SetValue("mch_create_ip", System.Web.HttpContext.Current.Request.UserHostAddress); //终端IP
            data.SetValue("nonce_str", Guid.NewGuid().ToString().Replace("-", ""));                 //随机字符串,必填项,不长于 32 位
            return(data);
        }
        /// <summary>
        /// WAP在线支付
        /// </summary>
        /// <param name="appId">业务系统ID</param>
        /// <param name="sign">签名</param>
        /// <param name="data">数据报文</param>
        /// <returns></returns>
        public ActionResult OnlineWapPay(string appId, string sign, string data)
        {
            try
            {
                var onlinePay = Builder.BuildOnlinePay();

                //校验支付模式
                if (onlinePay.CheckModeIsSimulate())
                {
                    return(RedirectToActionPermanent("OnlinePay", "Simulate", new { payType = (int)this._payType, appId = appId, sign = sign, data = data }));
                }

                //保存请求报文
                var requestInfo = onlinePay.SaveRequest(appId, data, this._payType);

                //校验签名
                var checkResult = onlinePay.CheckSign(appId, sign, data, requestInfo);
                if (checkResult.Status != ResultStatus.Success)
                {
                    ViewBag.ErrorMsg = checkResult.Message;
                    return(View());
                }

                //校验支付环境
                checkResult = onlinePay.CheckBrowserType(AppEnum.BrowserType.WeChat, requestInfo);
                if (checkResult.Status != ResultStatus.Success)
                {
                    ViewBag.ErrorMsg = checkResult.Message;
                    return(View());
                }

                //解析支付请求
                checkResult = onlinePay.ResolveRequest(data, requestInfo);
                if (checkResult.Status != ResultStatus.Success)
                {
                    ViewBag.ErrorMsg = checkResult.Message;
                    return(View());
                }

                //校验支付参数
                var checkResult2 = onlinePay.CheckParamaters(data, this._payType, requestInfo);
                if (checkResult2.Status != ResultStatus.Success)
                {
                    ViewBag.ErrorMsg = checkResult2.Message;
                    return(View());
                }

                //跳转到微信授权系统
                string redirect_uri = HttpUtility.UrlEncode(string.Format("http://{0}/SwiftPassWeChatPay/OnlineWapPayJSAPI?requestSysNo={1}", AppConfig.Global.Domain, requestInfo.SysNo));
                var    reqData      = new ParameterData();
                reqData.SetValue("appid", WxPayConfig.APPID);
                reqData.SetValue("redirect_uri", redirect_uri);
                reqData.SetValue("response_type", "code");
                reqData.SetValue("scope", "snsapi_base");
                reqData.SetValue("state", "STATE" + "#wechat_redirect");
                string url = "https://open.weixin.qq.com/connect/oauth2/authorize?" + reqData.ToUrl();
                return(Redirect(url));
            }
            catch (Exception ex)
            {
                ViewBag.ErrorMsg = "系统执行时发生异常:" + ex.Message;
                string log = string.Format(@"WAP支付请求发生异常!{0}异常描述:{1}{0}异常堆栈:{2}{0}请求参数:appId={3} sign={4} data={5}",
                                           Environment.NewLine, ex.Message, ex.StackTrace, appId, sign, data);
                LogWriter.WriteLog(log, AppConfig.Global.SwiftPassWeChatPayLogFolder, ExceptionHelper.ExceptionLevel.Exception);
            }
            return(View());
        }