调用什么方法会产生重复刷新呢?
------------------------------------
获取公众号jsapi_ticket
Senparc.Weixin.Open.Containers.AuthorizerContainer.TryGetJsApiTicketAsync(component_AppId, appid);
-----------------------
生成微信二维码
var acctoken = Senparc.Weixin.Open.Containers.AuthorizerContainer.TryGetAuthorizerAccessToken(component_AppId, appid);
var qr = Senparc.Weixin.MP.AdvancedAPIs.QrCodeApi.Create(acctoken, expireSeconds, expireSeconds, qrtype, qrinfo.SceneStr);
var qrurl = Senparc.Weixin.MP.AdvancedAPIs.QrCodeApi.GetShowQrCodeUrl(qr.ticket);
------------------------------
公众号授权回调:
queryAuthResult = await ComponentContainer.GetQueryAuthResultAsync(component_AppId, auth_code);
var authorizerInfoResult = AuthorizerContainer.GetAuthorizerInfoResult(component_AppId,
queryAuthResult.authorization_info.authorizer_appid);
------------------------------
网页授权回调
private OAuthAccessTokenResult GetWxUserInfo(ICurrentInfo currentInfo, string code,StringBuilder sb,bool isGetNewToken=false)
{
OAuthAccessTokenResult result;
string componentAccessToken = "";
if(isGetNewToken)
componentAccessToken = ComponentContainer.TryGetComponentAccessToken(component_AppId, component_Secret,null,true);
else
componentAccessToken = ComponentContainer.TryGetComponentAccessToken(component_AppId, component_Secret);
if (currentInfo.Source == "")
{
var weixinAppid = GetHotelWeiXinAppid(currentInfo.HotelId);
result = OAuthApi.GetAccessToken(weixinAppid, component_AppId, componentAccessToken, code);
}
else
{
result = OAuthApi.GetAccessToken(jydrhAppid, component_AppId, componentAccessToken, code);
}
return result;
}
-----------------------------------
第三方平台verify_ticket接收
/// <summary>
/// verify_ticket接收
/// </summary>
/// <param name="postModel"></param>
/// <returns></returns>
public ActionResult ComTicket(Senparc.Weixin.Open.Entities.Request.PostModel postModel)
{
try
{
postModel.Token = component_Token;
postModel.EncodingAESKey = component_EncodingAESKey;//根据自己后台的设置保持一致
postModel.AppId = component_AppId;//根据自己后台的设置保持一致
var messageHandler = new CustomThirdPartyMessageHandler(Request.InputStream, postModel);//初始化
messageHandler.Execute();//执行
return Content(messageHandler.ResponseMessageText);
}
catch (Exception ex)
{
return Content("error:" + ex.Message);
}
}
public override string OnComponentVerifyTicketRequest(RequestMessageComponentVerifyTicket requestMessage)
{
//记录ComponentVerifyTicket(也可以存入数据库或其他可以持久化的地方)
if (!RedisCache.SetVerifyTicketByRedis(requestMessage.AppId, requestMessage.ComponentVerifyTicket))
{
//再试一次
RedisCache.SetVerifyTicketByRedis(requestMessage.AppId, requestMessage.ComponentVerifyTicket);
}
return base.OnComponentVerifyTicketRequest(requestMessage);
}
--------------------------------------
事件接收
public async Task<ActionResult> WxCallback(Senparc.Weixin.MP.Entities.Request.PostModel postModel)
{
//此处的URL格式类型为:https://sdk.weixin.senparc.com/Open/Callback/$APPID$, 在RouteConfig中进行了配置,你也可以用自己的格式,只要和开放平台设置的一致。
//处理微信普通消息,可以直接使用公众号的MessageHandler。此处的URL也可以直接填写公众号普通的URL,如本Demo中的/Weixin访问地址。
postModel.Token = component_Token;
postModel.EncodingAESKey = component_EncodingAESKey; //根据自己后台的设置保持一致
postModel.AppId = component_AppId; //根据自己后台的设置保持一致
var maxRecordCount = 2;
MessageHandler<CustomMessageContext> messageHandler = null;
try
{
messageHandler = new CustomMessageHandler(Request.InputStream, postModel, maxRecordCount);
CancellationToken tokenSource = new CancellationToken();
await messageHandler.ExecuteAsync(tokenSource); //执行
return new FixWeixinBugWeixinResult(messageHandler);
}
catch (Exception ex)
{
return Content(ex.Message);
}
}
---------------------------------------------------------
以上是我用到了盛派sdk的地方,也没有自己封装微信接口去调用,不知是我代码哪里有问题。