- 首先得到本地电脑的时间戳;
String timestamp = ((DateTime.Now.ToUniversalTime().Ticks - 621355968000000000) / 10000000).ToString();
- 随机获取16位的字符串;
例:string noncestr = CreateNoncestr();
public static String CreateNoncestr()
{
String chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
String res = "";
Random rd = new Random();
for (int i = 0; i < 16; i++)
{
res += chars[rd.Next(chars.Length - 1)];
}
return res;
}
- 接下来获取微信二维码的返回值:
string para = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?timestamp=" + timestamp + "&noncestr=" + noncestr + "&jsapi_ticket=" + ticket + "&url=" + url;
string par = jd_dictsort(para.Split('?').GetValue(1).ToString());
string signa = par.Substring(1, par.Length - 1);
string signature = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(signa, "sha1");//MD5加密
- 返回token类
1、OAuth_Ticket Ticket_Model = Get_ticket(ac_token);
string ticket = Ticket_Model.ticket;
2、protected OAuth_Ticket Get_ticket(string ac_token)
{
string Str = GetJson("https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=" + ac_token + "&type=jsapi");
OAuth_Ticket OAuth_Ticket_Model = JsonHelper.ParseFromJson<OAuth_Ticket>(Str);
return OAuth_Ticket_Model;
}
3、
//获取微信回传的token;
OAuth_Token Model = Get_token(); //获取token
string ac_token = Model.access_token;
protected OAuth_Token Get_token()
{
appid = "";
appsecret = "";
//获取微信回传的openid、access token
string Str = GetJson("https://api.weixin.qq.com/cgi-bin/token?appid=" + appid + "&secret=" + appsecret + "&grant_type=client_credential");
//微信回传的数据为Json格式,将Json格式转化成对象
OAuth_Token Oauth_Token_Model = JsonHelper.ParseFromJson<OAuth_Token>(Str);
return Oauth_Token_Model;
}
//访问微信url并返回微信信息
protected string GetJson(string url)
{
WebClient wc = new WebClient();
wc.Credentials = CredentialCache.DefaultCredentials;
wc.Encoding = Encoding.UTF8;
string returnText = wc.DownloadString(url);
if (returnText.Contains("errcode"))
{
//可能发生错误
}
return returnText;
}
/// <summary>
/// 将Json格式数据转化成对象
/// </summary>
public class JsonHelper
{
/// <summary>
/// 生成Json格式
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="obj"></param>
/// <returns></returns>
public static string GetJson<T>(T obj)
{
DataContractJsonSerializer json = new DataContractJsonSerializer(obj.GetType());
using (MemoryStream stream = new MemoryStream())
{
json.WriteObject(stream, obj);
string szJson = Encoding.UTF8.GetString(stream.ToArray()); return szJson;
}
}
/// <summary>
/// 获取Json的Model
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="szJson"></param>
/// <returns></returns>
public static T ParseFromJson<T>(string szJson)
{
T obj = Activator.CreateInstance<T>();
using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(szJson)))
{
DataContractJsonSerializer serializer = new DataContractJsonSerializer(obj.GetType());
return (T)serializer.ReadObject(ms);
}
}
}
- 读取当前的链接:
string url = Request.Url.ToString();
- 在javascript中通过上方所得到的“timestamp”、“noncestr”、“signature”和微信公众号的APPID;
/*
* 注意:
* 1. 所有的JS接口只能在公众号绑定的域名下调用,公众号开发者需要先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”。
* 2. 如果发现在 Android 不能分享自定义内容,请到官网下载最新的包覆盖安装,Android 自定义分享接口需升级至 6.0.2.58 版本及以上。
* 3. 完整 JS-SDK 文档地址:http://mp.weixin.qq.com/wiki/7/aaa137b55fb2e0456bf8dd9148dd613f.html
*
* 如有问题请通过以下渠道反馈:
* 邮箱地址:weixin-open@qq.com
* 邮件主题:【微信JS-SDK反馈】具体问题
* 邮件内容说明:用简明的语言描述问题所在,并交代清楚遇到该问题的场景,可附上截屏图片,微信团队会尽快处理你的反馈。
*/
wx.config({
debug: false,
appId: "",
timestamp: document.getElementById("timestamp_no").innerHTML,
nonceStr: document.getElementById("nonceStr_no").innerHTML,
signature: document.getElementById("signature_no").innerHTML,
jsApiList: [
'checkJsApi',
'onMenuShareTimeline',
'onMenuShareAppMessage',
'onMenuShareQQ',
'onMenuShareWeibo',
'hideMenuItems',
'showMenuItems',
'hideAllNonBaseMenuItem',
'showAllNonBaseMenuItem',
'translateVoice',
'startRecord',
'stopRecord',
'onRecordEnd',
'playVoice',
'pauseVoice',
'stopVoice',
'uploadVoice',
'downloadVoice',
'chooseImage',
'previewImage',
'uploadImage',
'downloadImage',
'getNetworkType',
'openLocation',
'getLocation',
'hideOptionMenu',
'showOptionMenu',
'closeWindow',
'scanQRCode',
'chooseWXPay',
'openProductSpecificView',
'addCard',
'chooseCard',
'openCard'
]
});
得到扫码后返回的信息
Document.querySelector('#scanQRCode0').onclick = function () {
wx.scanQRCode({
needResult: 1, // 默认为0,扫描结果由微信处理,1则直接返回扫描结果,
scanType: ["qrCode", "barCode"], // 可以指定扫二维码还是一维码,默认二者都有
success: function (res) {
var boxres = res.resultStr; // 当needResult 为 1 时,扫码返回的结果
var boxid = boxres.split(',')[0];
var $group = document.querySelectorAll('.form-group input');
$group[$group.length - 1].value = boxid;
}
});
};
注:返回显示在” .form-group input”文本中;
document.querySelectorAll(‘’);只能读取class样式
document.querySelector('#scanQRCode1').onclick = function () {
wx.scanQRCode({
needResult: 1,
desc: 'scanQRCode desc',
success: function (res) {
// alert(JSON.stringify(res));
// alert(res.resultStr);
var express_numall = res.resultStr;
var express_num = express_numall.split(',')[0];
window.location.href = "XXXXX.XXXX?code=" + express_num;
}
});
};
注:返回带上扫码值跳入新的页面。