public string Sign(string ticket, string url, JSSDK_ConfigResponse config) { // 注意这里参数名必须全部小写,且必须有序 string input = $"jsapi_ticket={ ticket }&noncestr={ config.NonceStr }×tamp={ config.Timestamp }&url={ url }"; SHA1 sHA1 = SHA1.Create(); byte[] buffer = sHA1.ComputeHash(Encoding.UTF8.GetBytes(input)); return(BitConverter.ToString(buffer).Replace("-", string.Empty).ToString().ToLower()); }
public async Task <JSSDK_ConfigResponse> ConfigAsync(string appId) { string secret = ConfigCenterClient.GetSection("WeChatAccount").GetValue <string>(appId, null); if (secret == null) { return(new JSSDK_ConfigResponse { IsSuccess = false, Code = CodeConstant.ClientError_NotFound_AppId }); } if (!_memoryCache.TryGetValue("Ticket_" + appId, out string ticket)) { string accessToken = await _jsSDKService.GetAccessTokenAsync(appId, secret); ticket = await _jsSDKService.GetTicketAsync(accessToken); if (ticket == null) { return(new JSSDK_ConfigResponse { IsSuccess = false, Code = 402 }); } _memoryCache.Set("Ticket_" + appId, ticket, DateTimeOffset.Now.AddHours(1.5)); } JSSDK_ConfigResponse config = new JSSDK_ConfigResponse { IsSuccess = true, Code = CodeConstant.Success, AppId = appId }; if (Request.Headers.TryGetValue("Referer", out StringValues value) && value.Count > 0) { config.Signature = _jsSDKService.Sign(ticket, value[0], config); return(config); } else { return(new JSSDK_ConfigResponse { IsSuccess = false, Code = 403 }); } }