/// <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()); }