微信 获取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(), 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(), 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}×tamp={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}×tamp={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}×tamp={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 = ; i < ; i++)
{
sb.Append(strs[r.Next(length - )]);
}
return sb.ToString();
} /// <summary>
/// 创建时间戳
/// </summary>
/// <returns></returns>
public long CreatenTimestamp()
{
return (DateTime.Now.ToUniversalTime().Ticks - ) / ;
} }
}
微信 获取wx.config 参数 基类的更多相关文章
- javascript获取wx.config内部字段解决微信分享
转自:http://www.jb51.net/article/80679.htm 专题推荐:js微信开发_脚本之家 http://www.jb51.net/Special/879.htm 背景在微信分 ...
- 使用javascript获取wx.config内部字段解决微信分享
背景 在微信分享开发的时候我们通常的流程是 <?php require_once "jssdk.php"; $jssdk = new JSSDK("yourAppI ...
- 微信企业号 jsSDK wx.config报invalid signature错误,导致api接口无法使用
最近在做公司定制化的时候发现一个问题,使用微信的语音API的时候微信报错,错误信息为:the permission value is offline verifying 但是诡异的是:同样的代码在我们 ...
- 调用微信内置的方法及wx.config的配置问题
首先请看网址: https://www.w3cschool.cn/weixinkaifawendang/h8ap1qe5.html 重点说下怎么配置wx.config(为了安全,所有的参数都在服务端获 ...
- spring aspect获取抽象基类日志
在实际的项目开发过程中我们其实封装了很多的类似BaseService.BaseDao等的基类,然后在切日志的时候我们一般是指向继承改抽象基类的实现类的,这时候我们就会出现无法切出调用抽象基类方法的日志 ...
- 背水一战 Windows 10 (67) - 控件(控件基类): DependencyObject - CoreDispatcher, 依赖属性的设置与获取, 依赖属性的变化回调
[源码下载] 背水一战 Windows 10 (67) - 控件(控件基类): DependencyObject - CoreDispatcher, 依赖属性的设置与获取, 依赖属性的变化回调 作者: ...
- 【TP3.2.3】微信网页授权--基类
非常好用的微信授权 基类:其他的微信权限类都可以继承至该类: <?php namespace Wechat\Controller; use Think\Controller; //微信接口基础类 ...
- 微信分享图标设置,以及wx.config配置
最近公司要求我做一个关于页面分享微信显示小图和描述的功能,由于之前没有做过,所以说是从零开始,看jssdk说明文档,网上搜索各种资料,甚至连三四年前的内容都搜索出来了,也试过以前的简单方法,包括在页面 ...
- 微信JS-SDK接口上传图片以及wx.config的配置
最近做的微信网页要实现一个上传图片的功能,倒腾了半天终于搞好了,具体的步骤可以查看微信官方文档https://developers.weixin.qq.com/doc/offiaccount/OA_W ...
随机推荐
- python内存泄漏,python垃圾手动回收,1
部署的舆情系统,内存变大,找原因. 一个小例子. def func(): local_list = list(range(10000000)) func() time.sleep(200) 能够观察到 ...
- [Algorithm] Beating the Binary Search algorithm – Interpolation Search, Galloping Search
From: http://blog.jobbole.com/73517/ 二分检索是查找有序数组最简单然而最有效的算法之一.现在的问题是,更复杂的算法能不能做的更好?我们先看一下其他方法. 有些情况下 ...
- 随笔 -- IO -- Socket/ServerSocket -- 系统概述
随笔 -- IO -- Socket/ServerSocket -- Echo(BIO)实例 Java 网络编程 网络编程是指编写运行在多个设备(计算机)的程序,这些设备都通过网络连接起来. java ...
- SpringMVC -- 梗概--源码--壹--跳转
1.配置web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app version=&qu ...
- OpenGL资料
苹果官方文档:OpenGL ES for iOS苹果官方文档:OpenGL for OS X OpenGL是源自SGI IRIS GL library,并不是SUN开发的.SGI提供了一个OPENGL ...
- 【AI】Ubuntu NVIDIA CUDA CUDNN安装配置
https://blog.csdn.net/qq_33200967/article/details/80689543 https://blog.csdn.net/sinat_29963957/arti ...
- java的对象锁和类锁
在java编程中,经常需要用到同步,而用得最多的也许是synchronized关键字了,下面看看这个关键字的用法. 因为synchronized关键字涉及到锁的概念,所以先来了解一些相关的锁知识. j ...
- vmware下虚拟机不能上网问题解决
这个问题困扰了好久,vmware下装的虚拟机可以通过DHCP获取单独IP,但当用到管控较严格的环境,需要它与主机共享IP时,就不好使了. 今天在一篇文章中找到答案,如下图,windows系统中要启动V ...
- linux系统开机自启程序-需要-root用户 -启动 -
#!/bin/bashsh /home/hwjc/RSA/release2017-02-23/release2017-02-23/install.shsh /etc/init.d/mqtt.shifc ...
- 深入理解Auto Layout 第一弹
本文转载至 http://zhangbuhuai.com/2015/07/16/beginning-auto-layout-part-1/ By 张不坏 2015-07-16 更新日期:2015-07 ...