123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 |
- using Infrastructure;
- using Infrastructure.Extensions;
- using Newtonsoft.Json;
- using System;
- using System.Security.Cryptography;
- using System.Text;
- using ZR.Common.Model;
- namespace ZR.Common
- {
- public class WxHelper
- {
- private static readonly string GetTokenUrl = "https://api.weixin.qq.com/cgi-bin/token";
- private static readonly string GetTicketUrl = "https://api.weixin.qq.com/cgi-bin/ticket/getticket";
- private static readonly string AppID = AppSettings.App(new string[] { "WxOpen", "AppID" });
- private static readonly string AppSECRET = AppSettings.App(new string[] { "WxOpen", "AppSecret" });
- /// <summary>
- /// 获取访问token
- /// </summary>
- /// <returns>
- /// {"errcode":0,"errmsg":"ok","access_token":"iCbcfE1OjfRhV0_io-CzqTNC0lnrudeW3oF5rhJKfmINaxLClLa1FoqAY_wEXtodYh_DTnrtAwZfzeb-NRXvwiOoqUTHx3i6QKLYcfBtF8y-xd5mvaeaf3e9mvTAPhmX0lkm1cLTwRLmoa1IwzgQ-QZEZcuIcntWdEMGseVYok3BwCGpC87bt6nNdgnekZdFVRp1uuaxoctDGlXpoQlQsA","expires_in":7200}
- /// </returns>
- private static WxTokenResult GetAccessToken()
- {
- if (AppID.IsEmpty() || AppSECRET.IsEmpty())
- {
- Console.WriteLine("公众号配置错误");
- throw new ArgumentException("公众号配置错误");
- };
- var Ck = "wx_token";
- string getTokenUrl = $"{GetTokenUrl}?grant_type=client_credential&appid={AppID}&secret={AppSECRET}";
- if (CacheHelper.Get(Ck) is WxTokenResult tokenResult)
- {
- return tokenResult;
- }
- else
- {
- string result = HttpHelper.HttpGet(getTokenUrl);
- tokenResult = JsonConvert.DeserializeObject<WxTokenResult>(result);
- if (tokenResult?.errcode == 0)
- {
- CacheHelper.SetCache(Ck, tokenResult, 110);
- }
- else
- {
- Console.WriteLine("GetAccessToken失败,结果=" + result);
- throw new Exception("获取AccessToken失败");
- }
- }
- return tokenResult;
- }
- /// <summary>
- /// 获取ticket
- /// </summary>
- /// <returns></returns>
- public static WxTokenResult GetTicket()
- {
- WxTokenResult token = GetAccessToken();
- string ticket = token?.access_token;
- var Ck = "wx_ticket";
- string getTokenUrl = $"{GetTicketUrl}?access_token={ticket}&type=jsapi";
- if (CacheHelper.Get(Ck) is WxTokenResult tokenResult)
- {
- return tokenResult;
- }
- else
- {
- string result = HttpHelper.HttpGet(getTokenUrl);
- tokenResult = JsonConvert.DeserializeObject<WxTokenResult>(result);
- if (tokenResult?.errcode == 0)
- {
- CacheHelper.SetCache(Ck, tokenResult, 110);
- }
- else
- {
- Console.WriteLine("GetTicket,结果=" + result);
- throw new Exception("获取ticket失败");
- }
- }
- return tokenResult;
- }
- /// <summary>
- /// 返回正确的签名
- /// </summary>
- /// <param name="jsapi_ticket"></param>
- /// <param name="timestamp"></param>
- /// <param name="noncestr"></param>
- /// <param name="url"></param>
- /// <returns></returns>
- public static string GetSignature(string jsapi_ticket, string timestamp, string noncestr, string url = null)
- {
- if (string.IsNullOrEmpty(jsapi_ticket) || string.IsNullOrEmpty(noncestr) || string.IsNullOrEmpty(timestamp) || string.IsNullOrEmpty(url))
- return null;
- //将字段添加到列表中。
- string[] arr = new[]
- {
- string.Format("jsapi_ticket={0}",jsapi_ticket),
- string.Format("noncestr={0}",noncestr),
- string.Format("timestamp={0}",timestamp),
- string.Format("url={0}",url)
- };
- //字典排序
- Array.Sort(arr);
- //使用URL键值对的格式拼接成字符串
- var temp = string.Join("&", arr);
-
- var sha1Arr = SHA1.HashData(Encoding.UTF8.GetBytes(temp));
- return BitConverter.ToString(sha1Arr).Replace("-", "").ToLower();
- }
- }
- }
|