微信 获取wx.config 参数 基类
原文:微信 获取wx.config 参数 基类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Script.Serialization;
using System.Text;
using System.Web.Caching;

namespace Saturn.TTS.WMS.WeiXiPortal.HelperService
{
public class WXToolsHelper
{
/// <summary>
/// 获取全局的access_token,程序缓存
/// </summary>
/// <param name="AppId">第三方用户唯一凭证</param>
/// <param name="AppSecret">第三方用户唯一凭证密钥,即appsecret</param>
/// <returns>得到的全局access_token</returns>
public string Getaccess_token(string AppId, string AppSecret)
{
try
{
//先查缓存数据
if (HttpContext.Current.Cache["access_token"] != null)
{
return HttpContext.Current.Cache["access_token"].ToString();
}
else
{
return Gettoken(AppId, AppSecret);
}
}
catch
{
return Gettoken(AppId, AppSecret);
}
}

/// <summary>
/// 获取全局的access_token
/// </summary>
/// <param name="AppId">第三方用户唯一凭证</param>
/// <param name="AppSecret">第三方用户唯一凭证密钥,即appsecret</param>
/// <returns>得到的全局access_token</returns>
public string Gettoken(string AppId, string AppSecret)
{
var client = new System.Net.WebClient();
client.Encoding = System.Text.Encoding.UTF8;
var url = string.Format("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={0}&secret={1}", AppId, AppSecret);
var data = client.DownloadString(url);
var jss = new JavaScriptSerializer();
var access_tokenMsg = jss.Deserialize<Dictionary<string, object>>(data);
//放入缓存中
HttpContext.Current.Cache.Insert("access_token", access_tokenMsg["access_token"], null, DateTime.Now.AddSeconds(7100), TimeSpan.Zero, CacheItemPriority.Normal, null);

//清除jsapi_ticket缓存
HttpContext.Current.Cache.Remove("ticket");

//获取jsapi_ticket,为了同步
GetTicket(access_tokenMsg["access_token"].ToString());

return access_tokenMsg["access_token"].ToString();
}

/// <summary>
/// 获取jsapi_ticket,程序缓存
/// </summary>
/// <param name="access_token">全局的access_token</param>
/// <returns>得到的jsapi_ticket</returns>
public string GetJsapi_Ticket(string access_token)
{
try
{
//先查缓存数据
if (HttpContext.Current.Cache["ticket"] != null)
{
return HttpContext.Current.Cache["ticket"].ToString();
}
else
{
return GetTicket(access_token);
}
}
catch
{
return GetTicket(access_token);
}
}

/// <summary>
/// 获取jsapi_ticket
/// </summary>
/// <param name="access_token">全局的access_token</param>
/// <returns>得到的jsapi_ticket</returns>
public string GetTicket(string access_token)
{
var client = new System.Net.WebClient();
client.Encoding = System.Text.Encoding.UTF8;
var url = string.Format("https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token={0}&type=jsapi", access_token);
var data = client.DownloadString(url);
var jss = new JavaScriptSerializer();
var ticketMsg = jss.Deserialize<Dictionary<string, object>>(data);
try
{
//放入缓存中
HttpContext.Current.Cache.Insert("ticket", ticketMsg["ticket"], null, DateTime.Now.AddSeconds(7100), TimeSpan.Zero, CacheItemPriority.Normal, null);
return ticketMsg["ticket"].ToString();
}
catch (Exception ex)
{
return ex.Message;
}
}

/// <summary>
/// 微信权限签名的 sha1 算法
/// 签名用的noncestr和timestamp必须与wx.config中的nonceStr和timestamp相同
/// </summary>
/// <param name="jsapi_ticket">获取到的jsapi_ticket</param>
/// <param name="noncestr">生成签名的随机串</param>
/// <param name="timestamp">生成签名的时间戳</param>
/// <param name="url">签名用的url必须是调用JS接口页面的完整URL</param>
/// <returns></returns>
public string GetShal(string jsapi_ticket, string noncestr, long timestamp, string url)
{
string strSha1 = string.Format("jsapi_ticket={0}&noncestr={1}&timestamp={2}&url={3}", jsapi_ticket, noncestr, timestamp, url);
return System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(strSha1, "sha1").ToLower();
}

/// <summary>
/// 微信权限签名( sha1 算法 )
/// 签名用的noncestr和timestamp必须与wx.config中的nonceStr和timestamp相同
/// </summary>
/// <param name="AppId">第三方用户唯一凭证</param>
/// /// <param name="AppSecret">第三方用户唯一凭证密钥,即appsecret</param>
/// <param name="noncestr">生成签名的随机串</param>
/// <param name="timestamp">生成签名的时间戳</param>
/// <param name="url">签名用的url必须是调用JS接口页面的完整URL</param>
/// <returns></returns>
public string signature(string AppId, string AppSecret, string noncestr, long timestamp, string url)
{
string access_token = Getaccess_token(AppId, AppSecret); //获取全局的access_token
string jsapi_ticket = GetJsapi_Ticket(access_token); //获取jsapi_ticket

string strSha1 = string.Format("jsapi_ticket={0}&noncestr={1}&timestamp={2}&url={3}", jsapi_ticket, noncestr, timestamp, url);
return System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(strSha1, "sha1").ToLower();
}

/// <summary>
/// 微信权限签名( sha1 算法 )
/// 签名用的noncestr和timestamp必须与wx.config中的nonceStr和timestamp相同
/// </summary>
/// <param name="AppId">第三方用户唯一凭证</param>
/// /// <param name="AppSecret">第三方用户唯一凭证密钥,即appsecret</param>
/// <param name="noncestr">生成签名的随机串</param>
/// <param name="timestamp">生成签名的时间戳</param>
/// <param name="url">签名用的url必须是调用JS接口页面的完整URL</param>
/// <returns></returns>
public void signatureOut(string AppId, string AppSecret, string noncestr, long timestamp, string url, out string access_token, out string jsapi_ticket, out string signature)
{
access_token = Getaccess_token(AppId, AppSecret); //获取全局的access_token

jsapi_ticket = GetJsapi_Ticket(access_token); //获取jsapi_ticket

string strSha1 = string.Format("jsapi_ticket={0}&noncestr={1}&timestamp={2}&url={3}", jsapi_ticket, noncestr, timestamp, url);

signature = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(strSha1, "sha1").ToLower();
}

private string[] strs = new string[]
{
"a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z",
"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"
};
/// <summary>
/// 创建随机字符串
/// </summary>
/// <returns></returns>
public string CreatenNonce_str()
{
Random r = new Random();
var sb = new StringBuilder();
var length = strs.Length;
for (int i = 0; i < 15; i++)
{
sb.Append(strs[r.Next(length - 1)]);
}
return sb.ToString();
}

/// <summary>
/// 创建时间戳
/// </summary>
/// <returns></returns>
public long CreatenTimestamp()
{
return (DateTime.Now.ToUniversalTime().Ticks - 621355968000000000) / 10000000;
}

}
}

posted on 2017-01-24 13:44 NET未来之路 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/lonelyxmas/p/6346963.html

微信 获取wx.config 参数 基类相关推荐

  1. 微赞dataconfig.php,php生成微信jssdk wx.config参数,调用js接口

    流程 : 服务端请求微信生成config相关参数 客户端ajax请求服务器获取参数 config.php $appid = 'wx8e66f8993d'; $appsecret = '42190267 ...

  2. php生成微信jssdk wx.config参数,调用js接口

    流程 : 服务端请求微信生成config相关参数 客户端ajax请求服务器获取参数 config.php <?php $appid = 'wx8e66f8993d'; $appsecret = ...

  3. 使用javascript获取wx.config内部字段解决微信分享

    背景 在微信分享开发的时候我们通常的流程是 <?phprequire_once "jssdk.php";$jssdk = new JSSDK("yourAppID& ...

  4. javascript获取wx.config内部字段解决微信分享

    转自:http://www.jb51.net/article/80679.htm 背景 在微信分享开发的时候我们通常的流程是 <?php require_once "jssdk.php ...

  5. 配置 wx.config 参数

    var pageUrl ={url:(window.location.href).split('#')[0] }$.ajax({url:"/get-sign"+"?act ...

  6. 微信开发:配置 wx.config 实现图像接口(详细配置 wx.config 接口)

    前言   描述一下大概的应用场景,就是微信的移动端需要拍摄实时图像上传,然后传输到后台,由于我们需要的是直接可以显示的图片,所以要转换成 base 加密后的图片,然后放到 img 标签里进行展示 概述 ...

  7. 微信JSSDK分享接口中wx.config 出现invalid signature问题的解决办法

     先看下面的JSP代码: String rand =  StringUtil.getUUID();  //随机字符串 //String timestamp = Long.toString(new ...

  8. 微信分享:后端参数获取PHP实现

    微信分享 1.微信后台配置 2.后端代码 3.前端代码weixin-share.html 文档:https://developers.weixin.qq.com/doc/offiaccount/OA_ ...

  9. uniappH5 使用JSSDK微信支付出现 wx.config is not a function (jweixin is not a function) -- uni-appH5 调用 微信支付

    在 main.js 中 引入,在页面使用时 找不到 首先npm 安装一下 JSSDK npm install jweixin-module --save 引入jweixin <script> ...

最新文章

  1. linux iostat 查看磁盘io利用率
  2. win7 clr20r3程序终止_mscorsvw.exe是什么进程 win7系统怎么禁用mscorsvw.exe进程【禁用方法】...
  3. 特斯拉三季度生产23.8万辆 交付超24万辆
  4. SAP License:SAP顾问你算哪根葱?
  5. 5 种编程语言可能注定失败!
  6. [原创]:善用佳软(二)
  7. 印度人为什么立刀切菜_印度人的刀功有多厉害?看到一刀刮掉的鱼鳞和碎洋葱,我彻底服了...
  8. ​杨利伟:在《太空一日》:我没有看到长城,但祖国的各个省份我大都看到了...
  9. Qt解决连接https报错
  10. 运用阿里云地图实现经纬度转换为省市县
  11. HTML怎么给文本添加删除线?(代码教程)
  12. pr使用视频素材技巧
  13. 【翻译】通过GSoC、GSoD、LFX和Outreachy来庆祝CNCF实习的成功五周年
  14. SRM采购管理系统投标管理模块:阳光招采,助力建筑材料企业智慧采购
  15. 微营销实战demo coffee
  16. Python解压常见格式的压缩文件
  17. 使用 ESP32 + Python 实现在线人员入侵检测
  18. HTTP协议-教程(一)
  19. 数据结构(陈越、何钦铭)学习笔记
  20. 牛客24479 小睿睿的数列

热门文章

  1. python 播放声音_如何用Python播放声音?
  2. 【Pytorch神经网络实战案例】11 循环神经网络结构训练语言模型并进行简单预测
  3. 【Pytorch神经网络实战案例】08 识别黑白图中的服装图案(Fashion-MNIST)
  4. ERROR 2002 (HY000): Can‘t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock‘
  5. 微型计算机中存储器分成哪几个等级?它们各有什么特点?用途如何?,《微机原理》复习思考题第十二章存储器.DOC...
  6. LeetCode 6061. 买钢笔和铅笔的方案数
  7. LeetCode 1859. 将句子排序
  8. LeetCode 1443. 收集树上所有苹果的最少时间(自底向上DFS)
  9. LeetCode 第 25 场双周赛(718/1832,前39.2%)
  10. LeetCode 538. 把二叉搜索树转换为累加树(逆中序 根右左)