예제 #1
0
        public void RechargePayResult()
        {
            //接收从微信后台POST过来的数据
            System.IO.Stream s = Request.InputStream;
            int count          = 0;

            byte[]        buffer  = new byte[1024];
            StringBuilder builder = new StringBuilder();

            while ((count = s.Read(buffer, 0, 1024)) > 0)
            {
                builder.Append(Encoding.UTF8.GetString(buffer, 0, count));
            }
            s.Flush();
            s.Close();
            s.Dispose();

            //转换数据格式并验证签名
            WxPayData data = new WxPayData();

            try
            {
                data.FromXml(builder.ToString());

                Member member = _memberBLL.GetMemberByOpenId(data.GetValue("openid").ToString());
                member.Assets += double.Parse(data.GetValue("total_fee").ToString());

                if (_memberBLL.Update(member))
                {
                    Recharge recharge = new Recharge();
                    recharge.Id          = Guid.NewGuid();
                    recharge.MemberId    = member.Id;
                    recharge.Amount      = double.Parse(data.GetValue("total_fee").ToString());
                    recharge.CreatedTime = DateTime.Now;
                    recharge.DeletedTime = DateTime.MinValue.AddHours(8);
                    recharge.IsDeleted   = false;
                    recharge.Payway      = 0;

                    if (_recharegeBLL.Add(recharge))
                    {
                        LogHelper.Log.Write("充值成功");
                        // 添加充值积分记录
                        if (AddRechargeCredit(member, double.Parse(data.GetValue("total_fee").ToString()) / 100))
                        {
                            // 异步判断是否够积分升级vip
                            UpGradeDel   del = new UpGradeDel(UpGradeVIP);
                            IAsyncResult ar  = del.BeginInvoke(member.Id, CallBackMethod, null);
                        }
                    }
                    else
                    {
                        LogHelper.Log.Write("充值失败");
                    }
                }
                else
                {
                    LogHelper.Log.Write("更新余额失败");
                }
            }
            catch (WxPayException ex)
            {
                LogHelper.Log.Write(ex.Message);
                LogHelper.Log.Write(ex.StackTrace);
                //若签名错误,则立即返回结果给微信支付后台
                WxPayData res = new WxPayData();
                res.SetValue("return_code", "FAIL");
                res.SetValue("return_msg", ex.Message);
                Log.Error(this.GetType().ToString(), "Sign check error : " + res.ToXml());
                Response.Write(res.ToXml());
                Response.End();
            }

            Log.Info(this.GetType().ToString(), "Check sign success");

            WxPayData successData = new WxPayData();

            successData.SetValue("return_code", "SUCCESS");
            successData.SetValue("return_msg", "OK");

            Response.Write(successData.ToXml());
            Response.End();
        }