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

    就不会发生两次回调了

  • 相关阅读:
    OpenStack IceHouse版cinder模块新添加功能
    最小代价生成树
    HDU 3065 病毒侵袭持续中(AC自己主动机)
    POJ--2284--That Nice Euler Circuit【平面图欧拉公式】
    java工具类(四)之实现日期随意跳转
    Metasploit学习笔记之——情报搜集
    POJ 2378 Tree Cutting 子树统计
    cocos2d-x 3.0 touch事件官方解释
    html_entity_decode() 将 HTML 实体转成字符原型
    微信公众平台开发(81) 2014新年微信贺卡
  • 原文地址:https://www.cnblogs.com/yipeng-yu/p/6815751.html
Copyright © 2011-2022 走看看