using System;
using System.Linq;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Configuration;
using Senparc.Weixin.MP.AdvancedAPIs;
using Senparc.Weixin.MP.Helpers;
using System.Xml;
using Newtonsoft.Json.Linq;
using BoLeBang.Phone.User;
using System.IO; namespace BoLeBang.Phone.Shared
{
public partial class Dock : System.Web.UI.MasterPage
{
public string sinature,nonceStr,timeStamp; public string appID = ConfigurationManager.AppSettings["appID"]; public string apprecset = ConfigurationManager.AppSettings["apprecset"]; //设置xml文件保存路径
string path = HttpContext.Current.Server.MapPath("~/phone/jssdk.xml"); protected void Page_Load(object sender, EventArgs e)
{
//构造url地址,注意是包含域名的
C: string url = "http://ceshi.bng.org" + Request.RawUrl;
if (File.Exists(path))
{
//找到该xml文件
XmlDocument xml = new XmlDocument();
xml.Load(path);
//获取xml文件节点的文本
string acces = xml.GetElementsByTagName("access_token")[].InnerText;
string time = xml.GetElementsByTagName("time")[].InnerText;
//2小时过期时间,获取时间间隔
DateTime dt = DateTime.Now;
DateTime dt2 = Convert.ToDateTime(time);
TimeSpan span = dt2 - dt;
App_Code.Log.WriteLog(span.Hours.ToString());
if (span.Hours < )
{
//利用xml中的jsapi_ticket,来获取签名 ,利用的盛派sdk
string jssdkticket = xml.GetElementsByTagName("jssdkTicket")[].InnerText;
nonceStr = JSSDKHelper.GetNoncestr();
timeStamp = JSSDKHelper.GetTimestamp();
sinature = JSSDKHelper.GetSignature(jssdkticket, nonceStr, timeStamp, url);
}//低于两个小时
else
{
//这个应该是修改xml文件,我利用的是删除后重现建立
App_Code.Log.WriteLog("删除xml");
File.Delete(path);
//重新判断
goto C;
}
}//如果存在xml文件
else
{
#region 获取access_token
CheckLogin login = new CheckLogin();
string url11 = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + appID + "&secret=" + apprecset;
JObject jj = login.GetMsg(url11, false);
string accs = jj["access_token"].ToString();
#endregion
#region //获取jsticket
string hh = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=" + accs + "&type=jsapi";
JObject jo = login.GetMsg(hh, false);
string ticket = jo["ticket"].ToString();
#endregion
CreateXML(accs, ticket);
JsSdkUiPackage jssdkuipackage = JSSDKHelper.GetJsSdkUiPackage(appID, apprecset, url);
nonceStr = jssdkuipackage.NonceStr;
timeStamp = jssdkuipackage.Timestamp;
sinature = jssdkuipackage.Signature;
} } /// <summary>
///把access和jssdkticket存在xml文件中
/// </summary>
/// <param name="access_token"></param>
/// <param name="jssdkTicket"></param>
void CreateXML(string access_token,string jssdkTicket)
{
if (!File.Exists(path)) //如果日志目录不存在就创建
{
XmlDocument xd = new XmlDocument();//表示XML文档
XmlDeclaration xde;//表示 XML 声明节点:<?xml version='1.0'...?>
xde = xd.CreateXmlDeclaration("1.0", "GBK", null);//参数的第二项为编码方式
//standalone定义了是否可以在不读取任何其它文件的情况下处理该文档,默认为no
xd.AppendChild(xde);//<?xml version="1.0" encoding="UTF-8" standalone="yes"?>生成结束
XmlElement xe = xd.CreateElement("jssdk");//jssdk
xd.AppendChild(xe);//Root根元素创建完成
XmlNode jssdk = xd.SelectSingleNode("jssdk");//查找<jssdk>
XmlElement xe1 = xd.CreateElement("access_token");//在<jssdk>之下创建元素<access_token>
XmlElement xe2 = xd.CreateElement("jssdkTicket");
XmlElement time = xd.CreateElement("time");
xe1.SetAttribute("id", "acces");//指定属性的属性值
xe1.InnerText = access_token;//指定属性文本节点
xe2.SetAttribute("id", "jssdkticket");
xe2.SetAttribute("value", jssdkTicket);
xe2.InnerText = jssdkTicket;
time.SetAttribute("id", "time");
time.InnerText=DateTime.Now.ToString();
//time.InnerText = ;
jssdk.AppendChild(xe1);//
jssdk.AppendChild(xe2);//
jssdk.AppendChild(time);//
xd.Save(Server.MapPath("jssdk.xml"));
}
}
}
}

获取微信签名,并保存在xml文件中的更多相关文章

  1. 通俗易懂,C#如何安全、高效地玩转任何种类的内存之Span的脾气秉性(二)。 异步委托 微信小程序支付证书及SSL证书使用 SqlServer无备份下误删数据恢复 把list集合的内容写入到Xml中,通过XmlDocument方式写入Xml文件中 通过XDocument方式把List写入Xml文件

    通俗易懂,C#如何安全.高效地玩转任何种类的内存之Span的脾气秉性(二).   前言 读完上篇<通俗易懂,C#如何安全.高效地玩转任何种类的内存之Span的本质(一).>,相信大家对sp ...

  2. VBScript Sample:遍历文件夹并获取XML文件中指定内容

    案例: 我有一个文件夹,里面有很多子文件夹,每个子文件夹中都存在一个相同名字的XML文件,XML文件里面的标签结构相同,只是内容不同,XML文件中包含ID,Name等标签. 文件夹及文件结构如下图: ...

  3. Android中通过代码获取arrays.xml文件中的数据

    android工程res/valuse文件夹下的arrays.xml文件中用于放各种数组数据,比如字符串数组.整型数组等,数组中的数据可能是具体的值,也有可能是对资源数据的引用,下面针对这两种情况通过 ...

  4. XML:使用DOM技术解析xML文件中的城市,实现select级联选择

    中国的城市xml格式:cities.xml <?xml version="1.0" encoding="utf-8"?> <china> ...

  5. 如何在maven项目的pom.xml文件中添加jar包

    在使用maven进行项目开发时,我们需要在pom.xml文件中添加自己所需要的jar包.这就要求我们获取jar包的groupId和artifactId. 我们可以在一些maven仓库上搜索我们所需要的 ...

  6. .net中读取xml文件中节点的所有属性信息

    功能描述: 将数据以xml的格式记录成配置文件,需要获取配置文件中的数据时,则获取对应的配置文件,读取配置文件里对应节点的所有属性. 逻辑实现: 1.将数据配置好在xml文件中. 2.获取xml文件中 ...

  7. web.xml文件中的7个错误的安全配置

    web.xml文件中的7个错误的安全配置 关于Java的web.xml文件中配置认证和授权有大 量 的 文章.本文不再去重新讲解如何配置角色.保护web资源和设置不同类型的认证,让我们来看看web.x ...

  8. 读取xml文件中节点

    /// <summary> /// /// </summary> /// <param name="xmlpath">节点路径</para ...

  9. 把list集合的内容写入到Xml中,通过XmlDocument方式写入Xml文件中

    List<Person> list = new List<Person> { new Person{Name="张三",Age=20,Email=" ...

随机推荐

  1. Python iter() 函数

    Python iter() 函数  Python 内置函数 描述 iter() 函数用来生成迭代器. 语法 以下是 iter() 方法的语法: iter(object[, sentinel]) 参数 ...

  2. TZOJ 4839 麦森数(模拟快速幂)

    描述 形如2^P-1的素数称为麦森数,这时P一定也是个素数.但反过来不一定,即如果P是个素数,2^P-1不一定也是素数.到1998年底,人们已找到了37个麦森数.最大的一个是P=3021377,它有9 ...

  3. [leetcode]543. Diameter of Binary Tree二叉树直径

    Given a binary tree, you need to compute the length of the diameter of the tree. The diameter of a b ...

  4. Linux符号连接的层数过多

    转:http://blog.csdn.net/ta893115871/article/details/7458869 创建符号链接的时候一定要使用绝对路径,例如:/usr/local/cxxt/con ...

  5. CentOS 7安装zabbix步骤

    Zabbix配置安装 1.前期准备: 我自己的基础环境:CentOS 7 + Mysql 5.6 可以根据官网介绍一步一步安装,官网地址:https://www.zabbix.com/ 图1: 然后点 ...

  6. mysql优化概述2

    一.索引的概念 利用关键字,就是记录的部分数据(某个字段,某些字段,某个字段的一部份),建立与记录位置的对应关系,就是索引.索引的关键字一定是排序的. 二.索引的类型 mysql支持四种索引: 1.主 ...

  7. 解决lhgDialog插件在IE11浏览器的BUG

    项目中用到一款lhgDialog插件,最近在Win7系统IE11浏览器打上最新补丁(KB4012204)后,对话框内容的高度变成默认高度,经过调试,修改了lhgDialog里的iframe高度,问题解 ...

  8. UI设计必用工具 — AI快捷键大全

    01 常用工具 V 选择工具 A 直接选择工具 Y 魔棒工具 Q 套索工具 P 钢笔工具 Z 缩放工具 R 旋转工具 O 镜像工具 M 矩形工具 L 椭圆工具 B 画笔工具 N 铅笔工具 C 剪刀工具 ...

  9. laravel配置路由出现404

    nginx配置上加一句话 location / { #try_files $uri $uri/ =; try_files $uri $uri/ /index.php?$query_string; }

  10. [SoapUI] 获取当前时间包括年月日时分秒来作为命名

    import java.text.SimpleDateFormat GregorianCalendar calendar = new GregorianCalendar() def dateForma ...