
- /// <summary>
- /// JSApi 调用类
- /// </summary>
- public class WxPayJsApi
- {
- //获取 调起支付 API参数
- public string GetJsApiParameters(string prepay_id)
- {
- WcPayChooseRequest request = new WcPayChooseRequest(
- WxPayConfig.APPID,
- WxPayUitls.GenerateTimeStampString(),
- WxPayUitls.GenerateNonceStr(),
- "prepay_id=" + prepay_id, "RSA");
-
- request.paySign = WxPayEncrypt.MakePaySign(request.GetMessage(request));
-
- string parameters = request.ToJsonStr();
-
- return parameters;
- }
-
- /// <summary>
- /// 返回 config 注入参数
- /// </summary>
- /// <param name="url"></param>
- /// <returns></returns>
- public string GetJsApiConfig(string url)
- {
- WxPayApiJSDK config = new WxPayApiJSDK(true,
- WxPayConfig.APPID,
- WxPayUitls.GenerateTimeStampString(),
- WxPayUitls.GenerateNonceStr(), url
- );
- //正式上线 需要添加正确api列表
- var enumValues = Enum.GetValues(typeof(WechatPayApiEnum));
-
- foreach (Enum value in enumValues)
- {
- config.JsApiList.Add(value.ToString());
- }
- string parameters = config.ToJsonToFrontStr();
- return parameters;
- }
- }
- /// <summary>
- /// 注入 JSDK config 类
- /// </summary>
- public class WxPayApiJSDK
- {
- private bool debug;
- private string appId;
- private string timestamp;
- private string nonceStr;
- private string signature;
- private List<string> jsApiList = new List<string>();
- private string url;
- private string tokenUrl = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={0}&secret={1}";
-
- public WxPayApiJSDK(bool debug, string appId, string timestamp, string nonceStr, string url)
- {
- this.debug = debug;
- this.appId = appId;
- this.timestamp = timestamp;
- this.nonceStr = nonceStr;
- this.url = url;
- this.signature = GetConfigSignature();
- }
-
- /// <summary>
- /// 是否开启调试模式
- /// </summary>
- public bool Debug
- {
- get
- {
- return debug;
- }
-
- set
- {
- debug = value;
- }
- }
-
- /// <summary>
- /// 必填,公众号的唯一标识
- /// </summary>
- public string AppId
- {
- get
- {
- return appId;
- }
-
- set
- {
- appId = value;
- }
- }
-
- /// <summary>
- /// 必填,生成签名的时间戳
- /// </summary>
- public string Timestamp
- {
- get
- {
- return timestamp;
- }
-
- set
- {
- timestamp = value;
- }
- }
-
- /// <summary>
- /// 必填,生成签名的随机串
- /// </summary>
- public string NonceStr
- {
- get
- {
- return nonceStr;
- }
-
- set
- {
- nonceStr = value;
- }
- }
-
- /// <summary>
- /// 必填,签名
- /// </summary>
- public string Signature
- {
- get
- {
- return signature;
- }
-
- set
- {
- signature = value;
- }
- }
- /// <summary>
- /// 必填,需要使用的JS接口列表
- /// </summary>
- public List<string> JsApiList
- {
- get
- {
- return jsApiList;
- }
-
- set
- {
- jsApiList = value;
- }
- }
-
- public string Url
- {
- get
- {
- return url;
- }
-
- set
- {
- url = value;
- }
- }
-
- /// <summary>
- /// 生成注入config签名
- /// </summary>
- /// <param name="request"></param>
- /// <returns></returns>
- private string GetConfigSignature()
- {
- Hashtable hs = new Hashtable();
- hs.Add("jsapi_ticket", Getjsapi_ticket());//获取的
- hs.Add("noncestr", NonceStr);
- hs.Add("timestamp", Timestamp);
- hs.Add("url", Url);
- //得到string1
- string string1 = formatParameters(hs);
- //对string1进行sha1签名
- Signature = GetHashSigntrue(string1);
- return Signature;
- }
-
- /// <summary>
- /// 参数名ASCII码从小到大排序(字典序)
- /// </summary>
- /// <param name="parameters"></param>
- /// <returns></returns>
- private string formatParameters(Hashtable parameters)
- {
- StringBuilder sb = new StringBuilder();
- ArrayList akeys = new ArrayList(parameters.Keys);
- akeys.Sort();
- foreach (string k in akeys)
- {
- string v = (string)parameters[k];//防止参数不是字符串
- sb.Append(k.ToLower() + "=" + v + "&");
- }
- //去掉最后一个&
- if (sb.Length > 0)
- {
- sb.Remove(sb.Length - 1, 1);
- }
- return sb.ToString();
- }
-
- /// <summary>
- /// 进行sha1签名
- /// </summary>
- /// <param name="str"></param>
- /// <returns></returns>
- public static string HashCode(string str)
- {
- string rethash = "";
- try
- {
- SHA1 hash = SHA1.Create();
-
- rethash = Convert.ToBase64String(hash.ComputeHash(Encoding.UTF8.GetBytes(str)));
- }
- catch (Exception ex)
- {
- string strerr = "Error in HashCode : " + ex.Message;
- }
- return rethash;
- }
-
- public string GetHashSigntrue(string str)
- {
- var sha1 = new SHA1Managed();
- var sha1bytes = System.Text.Encoding.GetEncoding("UTF-8").GetBytes(str);
- byte[] resultHash = sha1.ComputeHash(sha1bytes);
- string sha1String = BitConverter.ToString(resultHash).ToLower();
- sha1String = sha1String.Replace("-", "");
- return sha1String;
- }
-
- public string GetAccess_Token()
- {
- var cache = CacheHelper.Instance;
- string access_token = string.Empty;
- if (cache.GetValue(WxPayCacheKeys.JSAPI_TICKET) == null)
- {
- string AppID = WxPayConfig.APPID;
- string AppSecret = WxPayConfig.APPSECRET;
- string url = string.Format(tokenUrl, AppID, AppSecret);
- System.Net.WebRequest wrq = System.Net.WebRequest.Create(url);
- wrq.Method = "GET";
- System.Net.WebResponse wrp = wrq.GetResponse();
- System.IO.StreamReader sr = new System.IO.StreamReader(wrp.GetResponseStream(), System.Text.Encoding.GetEncoding("UTF-8"));
- string strResult = sr.ReadToEnd();
- JObject pairs = JObject.Parse(strResult);
- access_token = pairs["access_token"].ToString();
- }
- else access_token = cache.GetValue(WxPayCacheKeys.ACCESS_TOKEN).ToString();
- return access_token;
- }
- /// <summary>
- /// 签名所需要的凭证
- /// </summary>
- /// <returns></returns>
- public string Getjsapi_ticket()
- {
- var cache = CacheHelper.Instance;
- string Jsapi_ticket = string.Empty;
- string access_token = string.Empty;
- if (cache.GetValue(WxPayCacheKeys.JSAPI_TICKET) == null)
- {
- string url = string.Empty;
- string strResult = string.Empty;
- System.Net.WebRequest wrq = null;
- System.Net.WebResponse wrp = null;
- System.IO.StreamReader sr = null;
- JObject pairs = null;
- if (cache.GetValue(WxPayCacheKeys.ACCESS_TOKEN) == null)
- {
- string AppID = WxPayConfig.APPID;
- string AppSecret = WxPayConfig.APPSECRET;
- url = string.Format("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={0}&secret={1}", AppID, AppSecret);
- wrq = System.Net.WebRequest.Create(url);
- wrq.Method = "GET";
- wrp = wrq.GetResponse();
- sr = new System.IO.StreamReader(wrp.GetResponseStream(), System.Text.Encoding.GetEncoding("UTF-8"));
- strResult = sr.ReadToEnd();
- pairs = JObject.Parse(strResult);
- if (!strResult.Contains("access_token"))
- {
- return "not in whitelist rid";
- }
- access_token = pairs["access_token"].ToString();
- sr.Close();
- }
- else
- {
- access_token = cache.GetValue(WxPayCacheKeys.ACCESS_TOKEN).ToString();
- }
- url = string.Format("https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token={0}&type=jsapi", access_token);
- wrq = System.Net.WebRequest.Create(url);
- wrp = wrq.GetResponse();
- sr = new System.IO.StreamReader(wrp.GetResponseStream(), System.Text.Encoding.GetEncoding("UTF-8"));
- string backStr = sr.ReadToEnd();
- pairs = JObject.Parse(backStr);
- var code = pairs["errcode"].ToString();
- if (code != "0")
- {
- return pairs["errmsg"].ToString();
- }
- Jsapi_ticket = pairs["ticket"].ToString();
- cache.InsertAndAbsoluteExp(WxPayCacheKeys.ACCESS_TOKEN, access_token, WxPayCacheKeys.ExpirationTime);//写入缓存
- cache.InsertAndAbsoluteExp(WxPayCacheKeys.JSAPI_TICKET, Jsapi_ticket, WxPayCacheKeys.ExpirationTime);//写入缓存
- }
- else Jsapi_ticket = cache.GetValue(WxPayCacheKeys.JSAPI_TICKET).ToString();
- return Jsapi_ticket;
- }
- }
评价
排名
63
文章
6
粉丝
2
评论
3
知识点----常用审核流程逻辑的梳理与设计
剑轩 : 很实用的知识!
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:
50010702506256


欢迎加群交流技术