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

    就不会发生两次回调了

  • 相关阅读:
    Jenkins权限控制-Role Strategy Plugin插件使用
    迁移一个仓库到新的Gitlab
    Gitlab备份以及恢复
    10.使用nexus3配置golang私有仓库
    9.使用nexus3配置Python私有仓库
    8.maven上传jar包以及SNAPSHOT的一个坑
    7.nexus版本升级
    6.使用nexus3配置yum私有仓库
    5.使用nexus3配置npm私有仓库
    4.maven私服nexus2迁移到nexus3
  • 原文地址:https://www.cnblogs.com/yipeng-yu/p/6815751.html
Copyright © 2011-2022 走看看