微信jaapi签名
public WeiXinJsSignature(string weixinUrl)
{
//string url = ConfigurationManager.AppSettings["UrlAddress"] + "/Home/Index";
//string url = "http://mweb.zhijiaxing.net/circlerelationblog/Home/Index?type=11&id=5ea5b237-6ae5-49af-b7e5-64a583b1a321&ck=Zl8P3aQsTP36bskInAqlxL6p_yl9Z_emxvL8eTZsUiabYh22MoIVQw%3d%3d&from=singlemessage&isappinstalled=0";
Timestamp = GetTimeStamp();
Noncestr = Guid.NewGuid().ToString().Replace("-", "");
string jsapiTicket = GetTicket();
string sourceStr = string.Format("jsapi_ticket={0}&noncestr={1}×tamp={2}&url={3}", jsapiTicket, Noncestr, Timestamp, weixinUrl);
Signature = GetSHA1(sourceStr);
}
/// <summary>
/// 获取当前时间戳
/// </summary>
/// <returns></returns>
private string GetTimeStamp()
{
DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1));
return ((int)(DateTime.Now - startTime).TotalSeconds).ToString();
}
/// <summary>
/// SHA1加密
/// </summary>
/// <param name="source"></param>
/// <returns></returns>
private string GetSHA1(string source)
{
string rethash = "";
try
{ System.Security.Cryptography.SHA1 hash = System.Security.Cryptography.SHA1.Create();
System.Text.ASCIIEncoding encoder = new System.Text.ASCIIEncoding();
byte[] combined = encoder.GetBytes(source);
hash.ComputeHash(combined); var sb = new StringBuilder();
foreach (var t in hash.Hash)
{
sb.Append(t.ToString("x2"));
} rethash = sb.ToString();
//rethash = Convert.ToBase64String(hash.Hash);
}
catch (Exception ex)
{
LogWriter.ToError("加密失败 : " + ex.Message);
}
return rethash;
}
public class HttpClientHelper
{
private static readonly HttpClient _httpClient; static HttpClientHelper()
{
_httpClient = new HttpClient();
}
public static string GetAccessToken()
{
var res = _httpClient.GetAsync(WChartConfig.Url).Result;
try
{
if (res.IsSuccessStatusCode)
{
string resCont = res.Content.ReadAsStringAsync().Result;
//{"access_token":"ACCESS_TOKEN","expires_in":7200}
if (resCont.Contains("errcode"))
{
throw new Exception(resCont);
}
else
{
AccessTokenFromWChat re = JsonConvert.DeserializeObject<AccessTokenFromWChat>(resCont);
if (re != null && !string.IsNullOrWhiteSpace(re.access_token))
{
LogWriter.ToInfo("从微信获取:AccessToken:" + re.access_token + "有效时间:" + re.expires_in);
return re.access_token;
}
}
}
else
{
throw new Exception("响应结果编码不正常");
}
}
catch (Exception ex)
{
LogWriter.ToError(ex);
}
return null;
} internal static string GetJsApiTicket(string token)
{
//{"errcode":0,"errmsg":"ok","ticket":"kgt8ON7yVITDhtdwci0qeb-gNJDxgAfi5m4ENt9ATtHvcqJU1OpSNrW4imnqjxOiXJDEvxemmRAsnclfGSPhiQ","expires_in":7200}
string url = ConfigurationLoader.JsApiTicketUrl.Replace("ACCESS_TOKEN", token);
var res = _httpClient.GetAsync(url).Result;
try
{
if (res.IsSuccessStatusCode)
{
string resCont = res.Content.ReadAsStringAsync().Result;
LogWriter.ToInfo("[GetJsApiTicket]获取到Ticket信息:" + resCont);
JsApiTicketFromWChat re = JsonConvert.DeserializeObject<JsApiTicketFromWChat>(resCont);
if (re.errcode == 0)
return re.ticket;
}
}
catch (Exception ex)
{
LogWriter.ToError(ex);
}
return null;
}
}
public class WChartConfig
{
private static readonly string GrantType = "client_credential";
public static readonly string AppId = ConfigurationManager.AppSettings.Get("AppId");
private static readonly string AppSecret = ConfigurationManager.AppSettings.Get("AppSecret");
public static readonly string Url =
string.Format("https://api.weixin.qq.com/cgi-bin/token?grant_type={0}&appid={1}&secret={2}", GrantType, AppId, AppSecret);
}
public class ConfigurationLoader
{ public static readonly string JsApiTicketUrl = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=ACCESS_TOKEN&type=jsapi";
}
微信jaapi签名的更多相关文章
- 爬微信好友签名和QQ好友签名
先说如何爬微信好友签名,主要使用itchat,这个库提供直接的api来获取好友信息,只要用正则过滤出就行了.说一下步骤,就不贴代码了.# 登陆# 获取好友列表# 提取签名# jieba分词# word ...
- 基于weixin-java-mp 做微信JS签名 invalid signature签名错误 官方说明
微信JS签名详情请见:http://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115&token=&lang= ...
- react 项目微信端 签名失败 原因
用SPA做微信h5,调用微信jssdk的页面,安卓微信上木有问题,ios微信报当前url未注册 经过调试,是ios微信版本问题导致页面跳转url未变化,导致验签失败 所以我们大致的思想就是:在ios微 ...
- asp.net 获得伪静态网址解决微信sdk签名问题
手机网站是asp.net c#编写的,前几天因为要使用微信SDK在手机网站页面使用分享功能,但是程序使用了伪静态功能.如果原地址是:http://ww.xx.com/news/show.aspx?id ...
- 微信分享签名Java代码实现
最近写了一个小微信签名功能,记录一下希望用到的朋友可以参考下. RestController @RequestMapping("/api/wx") public class Wei ...
- 微信JSSDK签名
微信JS-SDK说明文档 https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115 生成签名 1.签名规则 参与签名的 ...
- 微信网页签名失败(invalid signature)
签名失败,建议按以下步骤排查 确认签名算法正确,可用 http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=jsapisign 页面工具进行校验. 确认con ...
- 微信JS-SDK签名signature错误代码4029
一般是url的错,url需要动态获取 c#的写法: //Request.Url.ToString()这个获取的是没有端口号的有些网站有端口号 string url = Request.Url.Orig ...
- 【java】java反射机制,动态获取对象的属性和对应的参数值,并属性按照字典序排序,Field.setAccessible()方法的说明【可用于微信支付 签名生成】
方法1:通过get()方法获取属性值 package com.sxd.test.controller; public class FirstCa{ private Integer num; priva ...
随机推荐
- Linux系统下文件压缩与打包命令
Linux系统下文件压缩与打包命令 常用的压缩文件拓展名 * .Z * .zip * .gz * .bz2 * .xz * .tar * .tar.gz * .tar.bz2 * .tar.xz 压缩 ...
- 微信小程序~App.js中获取用户信息
(1)代码:主要介绍下获取用户信息部分 onLaunch: function () { // 展示本地存储能力 var logs = wx.getStorageSync('logs') || [] l ...
- python算法与数据结构-选择排序算法(33)
一.选择排序的介绍 选择排序(Selection sort)是一种简单直观的排序算法.首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素, ...
- VS无ADO.NET实体数据模型?
今天做EF的小例子时,发现需要添加实体数据模型,但是不管怎么找在新建项中都找不到这个选项,这是怎么回事,于是就开始百度吧,有的说可能是VS安装时没有全选,也有的人说可能是重装VS时,没有将注册表清除, ...
- 接口中的xml报文和实体类的之间转换
需求:湖南保险行业意健险承保风险预警平台数据接口 平台提供HTTPServlet服务,接受保险公司的数据请求,并在处理后返回给保险公司相应的处理结果.数据接口格式为XML数据报文,在每次接口的交易中, ...
- LightOJ - 1173 - The Vindictive Coachf(DP)
链接: https://vjudge.net/problem/LightOJ-1173 题意: The coach of a football team, after suffering for ye ...
- if语句:若边长小于等于0,则不进行计算;否则,计算正方形的面积
#include<stdio.h>void main(){ float a; printf("Input the value:"); scanf("%f&qu ...
- SPA项目开发--左侧树加首页导航
SPA项目开发--左侧树以及首页导航 1. Mock.js 前后端分离之后,前端迫切需要一种机制,不再需要依赖后端接口开发,而今天的主角mockjs就可以做到这一点 Mock.js是一个模拟数据 ...
- Kubernetes 学习19基于canel的网络策略
一.概述 1.我们说过,k8s的可用插件有很多,除了flannel之外,还有一个流行的叫做calico的组件,不过calico在很多项目中都会有这个名字被应用,所以他们把自己称为project cal ...
- make 的使用参数