主要方法
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; }
}