.net实现公众号跳转小程序获取signature秘钥

主要方法

using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;
using System.Web;

namespace MiniProgramDemo
{
  public  class Program
    {
   public async Task<string> GetTickect()
       {

        public async Task<GetsignatureModel> GetsignatureList(string SkipUrl)
       		 {

            string timestamp = GetTimestamp().ToString();
            string nonceStr = GenerateRandomCode(4) + timestamp;
            string url = SkipUrl;
            var Ticket = await GetTickect();
            string[] arr = { "noncestr=" + nonceStr, "jsapi_ticket=" + Ticket, "timestamp=" + timestamp, "url=" + url };
            Array.Sort(arr, StringComparer.Ordinal);
            string stringA = string.Join("&", arr);
            string signature = Sha1Signature(stringA).ToLower();


            return new GetsignatureModel
            {

                Noncestr = nonceStr,
                Signature = signature,
                Timestamp = timestamp
            };
          }

        static int GetTimestamp()
        {
            return (int)(DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalSeconds;
        }

        static string GetSha1(string input)
        {
            using (var sha1 = SHA1.Create())
            {
                byte[] inputBytes = Encoding.UTF8.GetBytes(input);
                byte[] hashBytes = sha1.ComputeHash(inputBytes);
                StringBuilder sb = new StringBuilder();
                foreach (byte b in hashBytes)
                {
                    sb.AppendFormat("{0:x2}", b);
                }
                return sb.ToString();
            }
        }
    }
}

获取Tickect签名

        public async Task<WxTicketModel> GetTickect()
        {
            //获取公总号token 
            var json =await GetGzhToken(); 
            var urls = string.Format("https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token={0}&type=jsapi", json);

            var result = await new HttpClient().GetStringAsync(urls);

            var Ticket = Newtonsoft.Json.JsonConvert.DeserializeObject<WxTicketModel>(result);
      
            return Ticket;
        }

获取公总号token

        public async Task<string> GetGzhToken() {

            //查找缓存是否存在
            var configJson = _sysCacheService.Get($"WxAccessToken:Token");
            if (!string.IsNullOrEmpty(configJson)) {
                return configJson;
            }
            //获取公总号token
            var appId = App.Configuration["WechatPublic:appId"];
            var appSecret = App.Configuration["WechatPublic:appSecret"];
            var url = $"https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={appId}&secret={appSecret}";
     
            var resp = await new HttpClient().GetStringAsync(url);
            //获取动态token
            var json = Newtonsoft.Json.JsonConvert.DeserializeObject<WxJsonModel>(resp);
            //写入redis
            _sysCacheService.SetStrings($"WxAccessToken:Token", json.access_token, TimeSpan.FromDays(0.06));
            return json.access_token;
        }

返回实体类

    public class GetsignatureModel {

        public string Noncestr { get; set; }
        public string Timestamp { get; set; }
        public string Signature { get; set; }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值