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