public int AlipayCallback(AlipayRechargeRecord alipayRecord) { StoneOrderRunnable runnable = FindOrderByOrderName(alipayRecord.out_trade_no); int result = CheckOrderStateBeforePay(runnable, alipayRecord.out_trade_no, alipayRecord.user_name, alipayRecord.value_rmb); if (result == OperResult.RESULTCODE_ORDER_BUY_SUCCEED) { return(result); } if (result != OperResult.RESULTCODE_TRUE) { LogHelper.Instance.AddInfoLog("玩家[" + alipayRecord.user_name + "] 支付宝购买矿石失败。原因为:" + OperResult.GetMsg(result) + "。支付宝信息:" + alipayRecord.ToString() + (runnable == null ? "" : "LockedByUserName:" + runnable.LockedOrder.LockedByUserName)); return(result); } string sellerUserName = ""; var trans = MyDBHelper.Instance.CreateTrans(); try { DBProvider.AlipayRecordDBProvider.SaveAlipayRechargeRecord(alipayRecord, trans); //订单处理 var buyOrder = runnable.Pay(trans); if (buyOrder == null) { trans.Rollback(); LogHelper.Instance.AddInfoLog("支付宝支付矿石订单失败1。原因为:订单支付失败。alipayRecord: " + alipayRecord.ToString()); //如果支付失败,先将订单设为异常。 this.SetStoneOrderPayException(alipayRecord.user_name, alipayRecord.out_trade_no); return(OperResult.RESULTCODE_FALSE); } sellerUserName = buyOrder.StonesOrder.SellerUserName; //更新用户信息 result = PlayerController.Instance.PayStoneOrder(true, alipayRecord.user_name, buyOrder, trans); if (result != OperResult.RESULTCODE_TRUE) { trans.Rollback(); PlayerController.Instance.RefreshFortune(alipayRecord.user_name); PlayerController.Instance.RefreshFortune(sellerUserName); LogHelper.Instance.AddInfoLog("支付宝支付矿石订单失败2。原因为:" + OperResult.GetMsg(result) + "。alipayRecord: " + alipayRecord.ToString()); //如果支付失败,先将订单设为异常。 this.SetStoneOrderPayException(alipayRecord.user_name, alipayRecord.out_trade_no); return(result); } this.RemoveRecord(buyOrder.StonesOrder.OrderNumber); trans.Commit(); LogHelper.Instance.AddInfoLog("玩家[" + alipayRecord.user_name + "] 用支付宝成功购买了,玩家[" + runnable.SellOrder.SellerUserName + "] 出售的矿石" + runnable.SellOrder.SellStonesCount + ", no: " + runnable.SellOrder.OrderNumber); AddLogNotifyPlayer(alipayRecord.user_name, runnable.OrderNumber, buyOrder); return(OperResult.RESULTCODE_TRUE); } catch (Exception exc) { result = OperResult.RESULTCODE_EXCEPTION; trans.Rollback(); PlayerController.Instance.RefreshFortune(alipayRecord.user_name); if (!string.IsNullOrEmpty(sellerUserName)) { PlayerController.Instance.RefreshFortune(sellerUserName); } //如果支付失败,先将订单设为异常。 this.SetStoneOrderPayException(alipayRecord.user_name, alipayRecord.out_trade_no); LogHelper.Instance.AddErrorLog("玩家[" + alipayRecord.user_name + "] 支付宝购买矿石回调异常. 支付宝信息: " + alipayRecord.ToString(), exc); return(result); } finally { if (trans != null) { trans.Dispose(); } } }
public int AlipayCallback(AlipayRechargeRecord alipayRecord) { GoldCoinRechargeRecord rechargeRecord = FindRecordByOrderNumber(alipayRecord.out_trade_no); if (rechargeRecord == null) { rechargeRecord = DBProvider.GoldCoinRecordDBProvider.GetGoldCoinRechargeRecord(alipayRecord.user_name, alipayRecord.out_trade_no); if (rechargeRecord != null) { return(OperResult.RESULTCODE_ORDER_BUY_SUCCEED); } LogHelper.Instance.AddInfoLog("玩家[" + alipayRecord.user_name + "] 支付宝购买金币回调,找不到订单。支付宝信息:" + alipayRecord.ToString()); return(OperResult.RESULTCODE_ORDER_NOT_EXIST); } CustomerMySqlTransaction myTrans = null; try { int value = OperResult.RESULTCODE_FALSE; myTrans = MyDBHelper.Instance.CreateTrans(); alipayRecord.user_name = rechargeRecord.UserName; if (alipayRecord.out_trade_no == rechargeRecord.OrderNumber && alipayRecord.value_rmb >= rechargeRecord.SpendRMB) { rechargeRecord.PayTime = DateTime.Now; value = PlayerController.Instance.RechargeGoldCoinByAlipay(rechargeRecord.UserName, alipayRecord.total_fee, (int)rechargeRecord.SpendRMB, (int)(rechargeRecord.SpendRMB * GlobalConfig.GameConfig.RMB_GoldCoin), myTrans); if (value == OperResult.RESULTCODE_TRUE) { DBProvider.GoldCoinRecordDBProvider.SaveFinalGoldCoinRechargeRecord(rechargeRecord, myTrans); DBProvider.GoldCoinRecordDBProvider.DeleteTempGoldCoinRechargeTradeRecord(rechargeRecord.OrderNumber, myTrans); this.RemoveRecord(alipayRecord.out_trade_no); string tokenBuyer = ClientManager.GetToken(rechargeRecord.UserName); if (GoldCoinOrderPaySucceedNotify != null) { GoldCoinOrderPaySucceedNotify(tokenBuyer, rechargeRecord.OrderNumber); } LogHelper.Instance.AddInfoLog("玩家[" + alipayRecord.user_name + "] 成功充值" + rechargeRecord.GainGoldCoin + "金币。ano: " + alipayRecord.alipay_trade_no); } else { LogHelper.Instance.AddInfoLog("玩家[" + alipayRecord.user_name + "] 金币充值失败,原因为:" + OperResult.GetMsg(value) + "。ano: " + alipayRecord.alipay_trade_no); } } DBProvider.AlipayRecordDBProvider.SaveAlipayRechargeRecord(alipayRecord, myTrans); myTrans.Commit(); return(value); } catch (Exception exc) { myTrans.Rollback(); PlayerController.Instance.RefreshFortune(alipayRecord.user_name); LogHelper.Instance.AddErrorLog("玩家[" + alipayRecord.user_name + "] 支付宝金币充值,回调异常。AlipayInfo : " + alipayRecord.ToString(), exc); return(OperResult.RESULTCODE_EXCEPTION); } finally { if (myTrans != null) { myTrans.Dispose(); } } }
/// <summary> /// 此处只需处理RMB支付。Alipay支付的情况,在锁定订单时已经将支付链接返回,客户端可直接链接支付。 /// </summary> /// <param name="buyer"></param> /// <param name="orderNumber"></param> /// <param name="rmb"></param> /// <returns></returns> public int PayStoneOrderByRMB(string buyerUserName, string orderNumber, decimal rmb) { int result = OperResult.RESULTCODE_FALSE; var trans = MyDBHelper.Instance.CreateTrans(); string sellerUserName = ""; try { StoneOrderRunnable runnable = FindOrderByOrderName(orderNumber); result = CheckOrderStateBeforePay(runnable, orderNumber, buyerUserName, rmb); if (result == OperResult.RESULTCODE_ORDER_BUY_SUCCEED) { return(result); } if (result != OperResult.RESULTCODE_TRUE) { LogHelper.Instance.AddInfoLog("玩家[" + buyerUserName + "] 灵币购买矿石失败。原因为:" + OperResult.GetMsg(result) + "。" + (runnable == null ? "" : "LockedByUserName:" + runnable.LockedOrder.LockedByUserName)); return(result); } result = PlayerController.Instance.CheckSellStone_BeforeBuy(buyerUserName, orderNumber, rmb); if (result != OperResult.RESULTCODE_TRUE) { return(result); } var buyOrder = runnable.Pay(trans); if (buyOrder == null) { trans.Rollback(); LogHelper.Instance.AddInfoLog("灵币支付矿石订单失败1。原因为:" + OperResult.GetMsg(result) + "。OrderNumber: " + orderNumber + "; buyerUserName:"******"灵币支付矿石订单失败2。原因为:" + OperResult.GetMsg(result) + "。OrderNumber: " + orderNumber + "; buyerUserName:"******"PayStoneTrade Exception. OrderNumber: " + orderNumber, exc); return(result); } finally { if (trans != null) { trans.Dispose(); } } }
public int AlipayCallback(AlipayRechargeRecord alipay, RemoteServerType serverType) { int result = OperResult.RESULTCODE_FALSE; MyDBHelper.Instance.TransactionDataBaseOper(myTrans => { DBProvider.AlipayRecordDBProvider.SaveAlipayRechargeRecord(alipay, myTrans); LogHelper.Instance.AddInfoLog("玩家 [" + alipay.user_name + "] 支付宝充值购买远程协助服务," + serverType.ToString() + ", Alipay:" + alipay.ToString()); result = OperResult.RESULTCODE_TRUE; return(result); }, exc => { if (exc != null) { LogHelper.Instance.AddErrorLog("远程协助1服务付款回调异常,AlipayInfo: " + alipay.ToString() + "; serverType: " + serverType.ToString(), exc); } result = OperResult.RESULTCODE_EXCEPTION; }); if (result != OperResult.RESULTCODE_TRUE) { return(result); } var serverItem = this.GetUserRemoteServerItem(serverType); if (serverItem == null) { LogHelper.Instance.AddInfoLog("玩家 [" + alipay.user_name + "] 支付宝充值购买远程协助服务失败1,原因为:" + OperResult.GetMsg(OperResult.RESULTCODE_BUYREMOTESERVER_FAILED_SERVERTYPEERROR)); return(OperResult.RESULTCODE_BUYREMOTESERVER_FAILED_SERVERTYPEERROR); } if (alipay.total_fee != serverItem.PayMoneyYuan) { LogHelper.Instance.AddInfoLog("玩家 [" + alipay.user_name + "] 支付宝充值购买远程协助服务失败2,原因为:" + OperResult.GetMsg(OperResult.RESULTCODE_BUYREMOTESERVER_FAILED_PAYEDMONEYERROR)); return(OperResult.RESULTCODE_BUYREMOTESERVER_FAILED_PAYEDMONEYERROR); } var playerRunner = PlayerController.Instance.GetRunnable(alipay.user_name); if (playerRunner == null) { LogHelper.Instance.AddInfoLog("玩家 [" + alipay.user_name + "] 支付宝充值购买远程协助服务失败3,原因为:" + OperResult.GetMsg(OperResult.RESULTCODE_USER_NOT_EXIST)); return(OperResult.RESULTCODE_USER_NOT_EXIST); } int getShoppingCredits = (int)alipay.total_fee * GlobalConfig.GameConfig.RemoteServerRechargeReturnShoppingCreditsTimes; MyDBHelper.Instance.TransactionDataBaseOper(myTrans => { result = playerRunner.BuyRemoteServer(alipay, serverType, myTrans); if (result != OperResult.RESULTCODE_TRUE) { LogHelper.Instance.AddInfoLog("玩家 [" + alipay.user_name + "] 支付宝充值购买远程协助服务失败4,原因为:" + OperResult.GetMsg(result)); return(result); } //玩家购买远程服务充值三层返利, if (!string.IsNullOrEmpty(playerRunner.BasePlayer.SimpleInfo.ReferrerUserName)) { //上一级 var parent1PlayerRunner = PlayerController.Instance.GetRunnable(playerRunner.BasePlayer.SimpleInfo.ReferrerUserName); if (parent1PlayerRunner != null) { parent1PlayerRunner.BuyShoppingCreditAwardParent(getShoppingCredits * GlobalConfig.GameConfig.BuyRemoteServiceAwardRMBConfig[0], myTrans); //上二级 if (!string.IsNullOrEmpty(parent1PlayerRunner.BasePlayer.SimpleInfo.ReferrerUserName)) { var parent2PlayerRunner = PlayerController.Instance.GetRunnable(parent1PlayerRunner.BasePlayer.SimpleInfo.ReferrerUserName); if (parent2PlayerRunner != null) { parent2PlayerRunner.BuyShoppingCreditAwardParent(getShoppingCredits * GlobalConfig.GameConfig.BuyRemoteServiceAwardRMBConfig[1], myTrans); //上三级 if (!string.IsNullOrEmpty(parent2PlayerRunner.BasePlayer.SimpleInfo.ReferrerUserName)) { var parent3PlayerRunner = PlayerController.Instance.GetRunnable(parent2PlayerRunner.BasePlayer.SimpleInfo.ReferrerUserName); if (parent3PlayerRunner != null) { parent3PlayerRunner.BuyShoppingCreditAwardParent(getShoppingCredits * GlobalConfig.GameConfig.BuyRemoteServiceAwardRMBConfig[2], myTrans); } } } } } } UserRemoteServerBuyRecord buyRecord = new UserRemoteServerBuyRecord() { UserID = playerRunner.BasePlayer.SimpleInfo.UserID, UserName = playerRunner.BasePlayer.SimpleInfo.UserLoginName, OrderNumber = alipay.out_trade_no, BuyRemoteServerTime = new MyDateTime(DateTime.Now), ServerType = serverType, PayMoneyYuan = (int)alipay.total_fee, GetShoppingCredits = getShoppingCredits }; DBProvider.UserRemoteServerDBProvider.SaveUserRemoteServerBuyRecord(buyRecord, myTrans); LogHelper.Instance.AddInfoLog("玩家 [" + alipay.user_name + "] 成功购买远程协助服务," + serverType.ToString() + ", Alipay:" + alipay.ToString()); result = OperResult.RESULTCODE_TRUE; return(result); }, exc => { if (exc != null) { LogHelper.Instance.AddErrorLog("远程协助服务付款回调异常,AlipayInfo: " + alipay.ToString() + "; serverType: " + serverType.ToString(), exc); } result = OperResult.RESULTCODE_EXCEPTION; }); return(result); }
public int AlipayCallback(AlipayRechargeRecord alipayRecord) { MinesBuyRecord buyRecord = FindRecordByOrderNumber(alipayRecord.out_trade_no); if (buyRecord == null) { buyRecord = DBProvider.MineRecordDBProvider.GetMineTradeRecord(alipayRecord.user_name, alipayRecord.out_trade_no); if (buyRecord != null) { return(OperResult.RESULTCODE_ORDER_BUY_SUCCEED); } LogHelper.Instance.AddInfoLog("玩家[" + alipayRecord.user_name + "] 支付宝购买矿山回调,找不到订单。支付宝信息:" + alipayRecord.ToString()); return(OperResult.RESULTCODE_ORDER_NOT_EXIST); } CustomerMySqlTransaction myTrans = null; try { int result = OperResult.RESULTCODE_FALSE; myTrans = MyDBHelper.Instance.CreateTrans(); //alipayRecord.user_name = buyRecord.UserName; if (alipayRecord.value_rmb >= buyRecord.SpendRMB) { result = PlayerController.Instance.BuyMineByAlipay(buyRecord, alipayRecord.total_fee, myTrans); if (result == OperResult.RESULTCODE_TRUE) { buyRecord.PayTime = DateTime.Now; DBProvider.MineRecordDBProvider.SaveFinalMineTradeRecord(buyRecord, myTrans); DBProvider.MineRecordDBProvider.DeleteTempMineTradeRecord(buyRecord.OrderNumber, myTrans); this.RemoveRecord(alipayRecord.out_trade_no); string tokenBuyer = ClientManager.GetToken(buyRecord.UserName); if (!string.IsNullOrEmpty(tokenBuyer) && MineOrderPaySucceedNotify != null) { MineOrderPaySucceedNotify(tokenBuyer, buyRecord.OrderNumber); } LogHelper.Instance.AddInfoLog("玩家[" + alipayRecord.user_name + "] 成功购买" + buyRecord.GainMinesCount + "座矿山。ano: " + alipayRecord.alipay_trade_no); } else { LogHelper.Instance.AddInfoLog("玩家[" + alipayRecord.user_name + "] 购买矿山失败,原因为:" + OperResult.GetMsg(result) + "。ano: " + alipayRecord.alipay_trade_no); } } DBProvider.AlipayRecordDBProvider.SaveAlipayRechargeRecord(alipayRecord, myTrans); myTrans.Commit(); PlayerActionController.Instance.AddLog(buyRecord.UserName, MetaData.ActionLog.ActionType.BuyMine, buyRecord.GainMinesCount, "增加了 " + buyRecord.GainStonesReserves.ToString() + " 的矿石储量"); return(result); } catch (Exception exc) { myTrans.Rollback(); PlayerController.Instance.RefreshFortune(alipayRecord.user_name); LogHelper.Instance.AddErrorLog("玩家[" + alipayRecord.user_name + "] 支付宝金币充值,回调异常。AlipayInfo : " + alipayRecord.ToString(), exc); return(OperResult.RESULTCODE_EXCEPTION); } finally { if (myTrans != null) { myTrans.Dispose(); } } }
protected void Page_Load(object sender, EventArgs e) { try { SortedDictionary <string, string> sPara = GetRequestGet(); if (sPara.Count > 0)//判断是否有带返回参数 { Notify aliNotify = new Notify(); bool verifyResult; #if TestAlipay verifyResult = true; #else verifyResult = aliNotify.Verify(sPara, Request.QueryString["notify_id"], Request.QueryString["sign"], " Return "); #endif string userName = Request.QueryString["extra_common_param"]; //SuperMinersWeb.AlipayCode.Core.LogResult(userName, DateTime.Now.ToString() + " ------ Return End Pay 1. verifyResult:" + verifyResult); if (verifyResult)//验证成功 { ///////////////////////////////////////////////////////////////////////////////////////////////////////////// //请在这里加上商户的业务逻辑程序代码 //——请根据您的业务逻辑来编写程序(以下代码仅作参考)—— //获取支付宝的通知返回参数,可参考技术文档中页面跳转同步通知参数列表 //商户订单号 string out_trade_no = Request.QueryString["out_trade_no"]; //支付宝交易号 string trade_no = Request.QueryString["trade_no"]; //交易状态 string trade_status = Request.QueryString["trade_status"]; if (Request.QueryString["trade_status"] == "TRADE_FINISHED" || Request.QueryString["trade_status"] == "TRADE_SUCCESS") { DateTime timeNow = DateTime.Now; //判断该笔订单是否在商户网站中已经做过处理 //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序 //如果有做过处理,不执行商户的业务程序 string buyer_email = Request.QueryString["buyer_email"]; decimal total_fee; if (!decimal.TryParse(Request.QueryString["total_fee"], out total_fee)) { XunLinMineRemoteControlWeb.AlipayCode.Core.LogResult(userName, DateTime.Now.ToString() + " ------ Return End Pay 2 Failed, 充值金额错误. userName:" + userName + "; out_trade_no=" + out_trade_no + ";trade_status=" + trade_status + ";total_fee=" + total_fee); //打印页面 Response.Write("充值金额错误<br />"); return; } //int result = WcfClient.Instance.CheckAlipayOrderBeHandled(userName, out_trade_no, trade_no, total_fee, buyer_email, timeNow.ToString()); //SuperMinersWeb.AlipayCode.Core.LogResult(userName, DateTime.Now.ToString() + " ------ Return End Pay 2.1. CheckAlipayOrderBeHandled:" + result); //if (result == OperResult.RESULTCODE_TRUE) //{ // //表示该订单已经被处理过 // //打印页面 // Response.Write("操作成功<br />本页面将在3秒后关闭"); // Response.Write("<script>setTimeout(' window.opener = null;window.close();',3000);</script>"); // return; //} int result = WcfClient.Instance.AlipayCallback(userName, out_trade_no, trade_no, total_fee, buyer_email, timeNow.ToString()); if (result == OperResult.RESULTCODE_EXCEPTION) { result = WcfClient.Instance.AlipayCallback(userName, out_trade_no, trade_no, total_fee, buyer_email, timeNow.ToString()); } //SuperMinersWeb.AlipayCode.Core.LogResult(userName, DateTime.Now.ToString() + " ------ Return End Pay 3 Result: " + result + ". userName:" + userName + "; out_trade_no=" + out_trade_no + ";trade_no=" + trade_no + ";trade_status=" + trade_status + ";total_fee=" + total_fee); if (result != OperResult.RESULTCODE_TRUE && result != OperResult.RESULTCODE_ORDER_BUY_SUCCEED) { string message = "支付成功,但是服务器操作失败,原因为:" + OperResult.GetMsg(result) + "。请联系客服,并将以下信息发送给客服。\r\n商品订单号:" + out_trade_no + ",支付宝订单号:" + trade_no + ",付款账户:" + buyer_email; DBOper.AddExceptionAlipayRechargeRecord(userName, out_trade_no, trade_no, total_fee, buyer_email, timeNow.ToString()); XunLinMineRemoteControlWeb.AlipayCode.Core.LogResult(userName, message); Response.Write(message); return; } } else { //SuperMinersWeb.AlipayCode.Core.LogResult(userName, DateTime.Now.ToString() + " ------ Return End Pay 4 Failed. userName:" + userName + "; out_trade_no=" + out_trade_no + ";trade_status=" + trade_status); Response.Write("trade_status=" + trade_status); } //打印页面 Response.Write("操作成功<br />本页面将在3秒后关闭"); Response.Write("<script>setTimeout(' window.opener = null;window.close();',3000);</script>"); //——请根据您的业务逻辑来编写程序(以上代码仅作参考)—— ///////////////////////////////////////////////////////////////////////////////////////////////////////////// } else//验证失败 { Response.Write("支付失败"); } } else { Response.Write("无返回参数"); } } catch (Exception exc) { XunLinMineRemoteControlWeb.AlipayCode.Core.LogResult("", DateTime.Now.ToString() + " ------ Return Exception: " + exc.Message + ". \r\n" + exc.Source); } }
void Client_DelegateBuyStoneCompleted(object sender, Wcf.Clients.WebInvokeEventArgs <MetaData.OperResultObject> e) { try { App.BusyToken.CloseBusyWindow(); if (e.Error != null) { LogHelper.Instance.AddErrorLog("Client_DelegateBuyStone Server Exception", e.Error); return; } if (e.UserState == null) { return; } PayType paytype = (PayType)e.UserState; App.StackStoneVMObject.AsyncGetAllNotFinishedBuyOrders(); App.UserVMObject.AsyncGetPlayerInfo(); if (e.Result.OperResultCode == OperResult.RESULTCODE_TRUE) { if (paytype == PayType.Alipay) { MyWebPage.ShowMyWebPage(e.Result.Message); MyMessageBox.ShowInfo("请在弹出的网页中,登录支付宝进行付款。"); if (!AlipayPaySucceed) { var payResult = MyMessageBox.ShowAlipayPayQuestion(); if (payResult == MessageBoxAlipayPayQuestionResult.Succeed) { App.UserVMObject.AsyncGetPlayerInfo(); //if (!AlipayPaySucceed) //{ // System.Windows.Forms.DialogResult result = MyMessageBox.ShowQuestionOKCancel("没有接收到支付宝付款信息。如确实付款,请点击【确定】,将对订单进行申诉,同时联系管理员进行处理,否则请点击【取消】。注意:三次恶意订单申诉,请被永久封号。"); // if (result == System.Windows.Forms.DialogResult.OK) // { // App.StoneOrderVMObject.AsyncSetStoneOrderPayException(LockedOrder.OrderNumber); // } //} } else if (payResult == MessageBoxAlipayPayQuestionResult.Failed) { MyWebPage.ShowMyWebPage(e.Result.Message); MyMessageBox.ShowInfo("请在弹出的网页中,登录支付宝进行付款。"); return; } } } else { MyMessageBox.ShowInfo("挂单成功"); } } else { MyMessageBox.ShowInfo("挂单失败,原因为:" + OperResult.GetMsg(e.Result.OperResultCode)); } } catch (Exception exc) { LogHelper.Instance.AddErrorLog("Client_DelegateBuyStone Exception", exc); } }
void Client_BuyMineCompleted(object sender, Wcf.Clients.WebInvokeEventArgs <TradeOperResult> e) { try { if (e.Cancelled) { return; } if (e.Error != null || e.Result == null) { MyMessageBox.ShowInfo("访问服务器失败。"); return; } TradeOperResult result = e.Result; if (result.ResultCode != OperResult.RESULTCODE_TRUE) { MyMessageBox.ShowInfo("勘探矿山失败。原因:" + OperResult.GetMsg(result.ResultCode)); return; } if (result.PayType == (int)PayType.Alipay) { MyWebPage.ShowMyWebPage(result.AlipayLink); MyMessageBox.ShowInfo("请在弹出的网页中,登录支付宝进行付款。"); if (!AlipayPaySucceed) { var payResult = MyMessageBox.ShowAlipayPayQuestion(); if (payResult == MessageBoxAlipayPayQuestionResult.Succeed) { if (AlipayPaySucceed) { MyMessageBox.ShowInfo("成功收获" + e.Result.OperNumber + "的矿石储量"); } else { MyMessageBox.ShowInfo("没有接收到支付宝付款信息。如确实付款,请稍后查看购买记录,或联系客服。"); } } else if (payResult == MessageBoxAlipayPayQuestionResult.Failed) { MyWebPage.ShowMyWebPage(result.AlipayLink); MyMessageBox.ShowInfo("请在弹出的网页中,登录支付宝进行付款。"); return; } } else { MyMessageBox.ShowInfo("成功收获" + e.Result.OperNumber + "的矿石储量"); } } else { MyMessageBox.ShowInfo("成功收获" + e.Result.OperNumber + "的矿石储量"); } App.UserVMObject.AsyncGetPlayerInfo(); _syn.Post(p => { this.DialogResult = true; }, null); } catch (Exception exc) { MyMessageBox.ShowInfo("购买矿山,服务器回调处理异常。" + exc.Message); } }
protected void Page_Load(object sender, EventArgs e) { try { if (!this.IsPostBack) { //code说明 : code作为换取access_token的票据,每次用户授权带上的code将不一样,code只能使用一次,5分钟未被使用自动过期。 string code = Request["code"]; string state = Request["state"]; this.lblMsg.Text = "欢迎进入迅灵矿场"; LogHelper.Instance.AddInfoLog("code:" + code + "; state: " + state); if (state == Config.state) { HttpGetReturnModel resultValue = WeiXinHandler.SynGetUserAccessToken(code); if (resultValue.Exception != null) { this.lblMsg.Text = "登录异常,请联系迅灵矿场管理员"; return; } if (resultValue.ResponseError != null) { Session[Config.SESSIONKEY_RESPONSEERROR] = resultValue.ResponseError; Server.Transfer("ErrorPage.aspx"); return; } AuthorizeResponseModel authObj = resultValue.ResponseResult as AuthorizeResponseModel; if (authObj != null) { this.lblMsg.Text = "authObj OK"; Session[Config.SESSIONKEY_AUTHORIZEOBJ] = authObj; resultValue = WeiXinHandler.SyncGetUserInfo(authObj.access_token, authObj.openid); } if (resultValue.Exception != null) { this.lblMsg.Text = "登录异常,请联系迅灵矿场管理员"; return; } if (resultValue.ResponseError != null) { Session[Config.SESSIONKEY_RESPONSEERROR] = resultValue.ResponseError; Server.Transfer("ErrorPage.aspx"); return; } WeiXinUserInfoModel userObj = resultValue.ResponseResult as WeiXinUserInfoModel; Session[Config.SESSIONKEY_WXUSERINFO] = userObj; string ip = System.Web.HttpContext.Current.Request.UserHostAddress; this.lblMsg.Text = "欢迎 " + userObj.nickname + " 进入迅灵矿场"; OperResultObject resultobj = WcfClient.Instance.WeiXinLogin(userObj.openid, userObj.nickname, ip); this.lblMsg.Text = "登录迅灵矿场,结果为:" + OperResult.GetMsg(resultobj.OperResultCode); if (resultobj.OperResultCode == OperResult.RESULTCODE_TRUE) { this.lblMsg.Text = "WeiXinLogin OK"; var player = WcfClient.Instance.GetPlayerByWeiXinOpenID(userObj.openid); this.lblMsg.Text = "player OK"; WebUserInfo userinfo = new WebUserInfo(); userinfo.xlUserID = player.SimpleInfo.UserID; userinfo.xlUserName = player.SimpleInfo.UserName; userinfo.wxOpenID = userObj.openid; // 登录状态100分钟内有效 MyFormsPrincipal <WebUserInfo> .SignIn(userinfo.xlUserName, userinfo, 100); //Session[userinfo.xlUserName] = player; Response.Redirect("View/Index.aspx", false); } else if (resultobj.OperResultCode == OperResult.RESULTCODE_USER_NOT_EXIST || resultobj.OperResultCode == OperResult.RESULTCODE_USERNAME_PASSWORD_ERROR) { Response.Redirect("LoginPage.aspx", false); } else { string message = string.IsNullOrEmpty(resultobj.Message) ? OperResult.GetMsg(resultobj.OperResultCode) : resultobj.Message; Response.Write("<script>alert('登录迅灵矿场失败, 原因为:" + message + "')</script>"); } } else { } } } catch (Exception exc) { this.lblMsg.Text = "WeiXinResponse Exception. " + exc.Message; LogHelper.Instance.AddErrorLog("WeiXinResponse Exception", exc); } }
/// <summary> /// 判断是否有受权记录或已受权 /// </summary> /// <returns></returns> public OperResult IsAuth() { ServiceRecord record = null; string key = string.Empty; using (RobotContext db = new RobotContext()) { record = db.Set <ServiceRecord>().FirstOrDefault(); var mc = db.Set <Machine>().FirstOrDefault(); if (mc != null) { key = mc.MachineCode; } } OperResult result = new OperResult(); result.Data = record; if (record == null) { result.Msg = "应用未授权"; result.Code = ResultCodeEnums.warning; MachineSvc svc = new MachineSvc(); var mc = Guid.NewGuid().ToString("N"); svc.Add(mc); using (RobotContext db = new RobotContext()) { var count = GetAESInfo.Set(0.ToString(), mc); ServiceRecord rec = new ServiceRecord() { ExpireDate = DateTime.Now.AddHours(2), IsAuth = false, LastOperTime = DateTime.Now, SurplusTotal = count, Total = count }; result.Data = rec; record = db.Set <ServiceRecord>().Add(rec); db.SaveChanges(); } } else if (record.ExpireDate > DateTime.Now) { result.Msg = "应用试用期"; result.Code = ResultCodeEnums.UnAuth; } else if (record.ExpireDate <= DateTime.Now && record.IsAuth == false) { result.Msg = "应用过期,请重新授权"; result.Code = ResultCodeEnums.AuthExpire; } else if (int.Parse(GetAESInfo.Get(record.SurplusTotal, key)) <= 0) { result.Msg = "应用使用次数已用完"; result.Code = ResultCodeEnums.AuthExpire; } else { result.Msg = "应用已授权"; result.Code = ResultCodeEnums.Auth; } return(result); }