예제 #1
0
        public string Sign(string ticket, string url, JSSDK_ConfigResponse config)
        {
            // 注意这里参数名必须全部小写,且必须有序
            string input = $"jsapi_ticket={ ticket }&noncestr={ config.NonceStr }&timestamp={ 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());
        }
예제 #2
0
        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
                });
            }
        }