[HttpGet]
//微信扫一扫获取密钥
public async Task<Hashtable> GetQRCodeSignPackage()
{
string Jsapi_Ticket = await GetWeiXinJsapi_Ticket();
JObject Jsapi_TicketJo = (JObject)JsonConvert.DeserializeObject(Jsapi_Ticket);
string jsapi_ticket = Jsapi_TicketJo["ticket"].ToString();
string url = "https://xxxxxxxxxxxxxxxxxxxxx/qrcode.html";
string timestamp = Convert.ToString(ConvertDateTimeInt(DateTime.Now));
string nonceStr = createNonceStr();
string rawstring = "jsapi_ticket=" + jsapi_ticket + "&noncestr=" + nonceStr + "×tamp=" + timestamp + "&url=" + url + "";
string signature = Sha1Sign(rawstring);
Hashtable signPackage = new Hashtable();
signPackage.Add("appId", "xxxxxxxxxxxxxxxx");//xx智能
signPackage.Add("nonceStr", nonceStr);
signPackage.Add("timestamp", timestamp);
signPackage.Add("url", url);
signPackage.Add("signature", signature);
signPackage.Add("rawString", rawstring);
signPackage.Add("JSTicketTicket", jsapi_ticket);
return signPackage;
}
[HttpGet]
private async Task<string> GetWeiXinJsapi_Ticket()
{
var access1 = await GetAccessToken();
string tokenUrl = string.Format("https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token={0}&type={1}", access1, "jsapi");
var wc = new WebClient();
var strReturn = wc.DownloadString(tokenUrl); //取得微信返回的json数据 return strReturn;
return strReturn;
}
// 3.noncestr 生成签名的随机串
///
/// 创建随机字符串
/// </summary>
/// <returns></returns>
public static string createNonceStr()
{
int length = 16;
string chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
string str = "";
Random rad = new Random();
for (int i = 0; i < length; i++)
{
str += chars.Substring(rad.Next(0, chars.Length - 1), 1);
}
return str;
}
[HttpGet]
/// <summary>
/// Sha1加密签名
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
public string Sha1Sign(string str)
{
SHA1 sha1 = new SHA1CryptoServiceProvider();
byte[] bytes_sha1_in = System.Text.UTF8Encoding.Default.GetBytes(str);
byte[] bytes_sha1_out = sha1.ComputeHash(bytes_sha1_in);
string signature = BitConverter.ToString(bytes_sha1_out);
signature = signature.Replace("-", "").ToLower();
return signature;
}
//1. 获取access token
[HttpPost("GetAccessToken")]
/// <summary>
/// 获取微信AccessToken
/// </summary>
/// <returns>Dictionary</returns>
public async Task<string> GetAccessToken()
{
try
{
var httpClient = new HttpClient();
var oldtk = await RedisHelper.Instance.GetAsync($"AccessToken");
//检查 token 是否失效
if (!oldtk.IsNullOrWhiteSpace())
{
//尝试获取微信IP 校验token
string chkurl = $"https://api.weixin.qq.com/cgi-bin/get_api_domain_ip?access_token={oldtk}";
HttpResponseMessage resp = await httpClient.GetAsync(chkurl);
if (resp.IsSuccessStatusCode)
{
var resstr = await resp.Content.ReadAsStringAsync();
//正确返回则表示token有效
if (resstr.Contains("ip_list"))
{
return oldtk;
}
}
}
//string token = "42_yS3zlEcbhM8cmTo95oBTKCXrnCB0RNHBhAnnTXxazkbUY7O5ZgzWuD8ydiaAQhoYKFmBCv0V2i0EIXy4Uw3YVqI6IRhYgUub7Fvlda7yJyBmfj-Cz2c-rJ33QNVjZwizshJxI0smUCmXCSZOHWDiAFAKZG";
//获得配置信息
string send_url = $"https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={weixinMp.AppId}&secret={weixinMp.Secret}";
HttpResponseMessage response = await httpClient.GetAsync(send_url);
string result = string.Empty;
if (response.IsSuccessStatusCode)
{
result = await response.Content.ReadAsStringAsync();
}
//反序列化JSON
Dictionary<string, object> dic = JsonConvert.DeserializeObject<Dictionary<string, object>>(result);
if (!dic.ContainsKey("access_token"))
{
throw new IOException($"获取Token失败!没有返回值: {result}");
}
string accToken = dic["access_token"].ToString();
await RedisHelper.Instance.SetAsync($"AccessToken", accToken, 3600);
await CreateMenu(accToken);
return accToken;
}
catch (Exception ex)
{
//LoggerHelper.Error(ex, $"获取AccessToken出错");
throw ex;
}
}
09-18
1394
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交