zoukankan      html  css  js  c++  java
  • 微信 oauth2 两次回调

     场景:

    logger.Info("f: " + wx.From);
    logger.Info("c: " + wx.Code);
    logger.Info("s: " + wx.State);

    Response.Redirect("https://open.weixin.qq.com/connect/oauth2/authorize?appid=8RAN90uJ1967wpt1Y5&redirect_uri=www.xxxx.com%3a8001%2fWxAuthPage.aspx?from=notreserve&response_type=code&scope=snsapi_base&state=1#wechat_redirect");

    出现:

    除了code不一致,其它一致。

    这样导致如下两次插入:

    var mealtake = new MealTake
    {
    Id = Guid.NewGuid(),
    IsTaked = true,
    TakeDate = DateTime.Now,
    MealType = mt.MealType,
    PersonOrder = personOrder
    };

    context.Set<MealTake>().Add(mealtake);
    context.SaveChanges();

    想到的解决方法:

    Response.Redirect("https://open.weixin.qq.com/connect/oauth2/authorize?appid=8RAN90uJ1967wpt1Y5&redirect_uri=www.xxxx.com%3a8001%2fWxAuthPage.aspx?from=notreserve&response_type=code&scope=snsapi_base&state=1#wechat_redirect");

    改成

    Response.Redirect("https://open.weixin.qq.com/connect/oauth2/authorize?appid=8RAN90uJ1967wpt1Y5&redirect_uri=www.xxxx.com%3a8001%2fWxAuthPage.aspx?from=notreserve&response_type=code&scope=snsapi_base&state="+Guid.NewGuid().ToString()+"#wechat_redirect");

     

    再把插入代码改成

    if (!context.Set<PersonOrder>().Any(n => n.Comment == wx.State))
    {
      var person = context.Set<MealPerson>().Include("PersonType").FirstOrDefault(n => n.Id == wxUserInfo.User.Id);
      var personOrder = MealOrderService.CreatePersonOrder(person, mt.MealType, mealdate, false);
      personOrder.Comment = wx.State;
      var mealtake = new MealTake
      {
        Id = Guid.NewGuid(),
        IsTaked = true,
        TakeDate = DateTime.Now,
        MealType = mt.MealType,
        PersonOrder = personOrder
      };

      context.Set<MealTake>().Add(mealtake);
      context.SaveChanges();
    }

    =============================================================

    具体原因,原来是redirect_uri导致的,漏了对redirect_uri进行完整的UrlEncode:

    redirect_uri=www.xxxx.com%3a8001%2fWxAuthPage.aspx?from=notreserve

    改成

    redirect_uri=www.xxxx.com%3a8001%2fWxAuthPage.aspx%3ffrom%3dnotreserve

    就不会发生两次回调了

  • 相关阅读:
    CentOS 6.10 安装mysql
    yum安装no more mirrors to try
    mysql密码问题
    tomcat的安装部署(CentOS8)(VM)
    tomcat的安装部署(windows10)
    docker中mongdb常用操作
    iphone手机卡顿解决方案
    常用sql进阶语句
    关键时刻,让你的iphone拒绝掉的所有来电
    jenkins环境安装(windows)
  • 原文地址:https://www.cnblogs.com/yipeng-yu/p/6815751.html
Copyright © 2011-2022 走看看