2023年6月21日发(作者:)

微信⼩程序webview中使⽤JSSDK的步骤a. ⾸先, 微信⼩程序必须是企业认证的, 否则连webview都⽆法使⽤.(这个是基础)b. webview引⽤页⾯的JS加⼊如下脚本(请⾃⾏修改去掉不要的内容)function InitJSSDK(){ // 显⽰等待 StartWait();

// 发送请求获取json格式的签名信息 var dt = {}; = "wx_getjsapiticket"; dt.u = ; // 如果你的URL中有#, 则只要#之前的部分 $.ajax({ url : C_AJAX_HANDLER_URL, data : dt, }) .done(function(msg) { try{ msg = SON(msg); var iCnt = ; if (iCnt > 0){ var obj = I[0]; ({ debug: false, appId: , // 必填,⼩程序的唯⼀标识 timestamp: amp, // 必填,⽣成签名的时间戳 nonceStr: tr, // 必填,⽣成签名的随机串 signature: ure, // 必填,签名 jsApiList: ['getLocation'] // 必填,需要使⽤的JS接⼝列表 });

// 调⽤成功 (function(){ bJSSDKOK = true; setInterval('UpdateLocation()', C_GET_LOCATION_INTERVAL); }) // 调⽤失败 (function(res){ promptError('JSSDK失败: ' + ); bJSSDKOK = false; }); } } catch(e){} FinishWait(); }) .fail(function() { promptError('获取JSSDK参数失败!'); FinishWait(); });}c. 服务器响应请求的部分:(代码概要: 实现了获取签名信息, 并存⼊数据库; 再次申请时会判断是否已经申请过了, 如果已经申请并且没有过期, 则使⽤现有的,否则重新申请)using System;using c;using uration;using uration;using ;using ent;using ;using ;using ;///

/// WXHelpler - by ssxbxk/// public class WXHelpler{ private static readonly string GetTokenUrl = tings["GetTokenUrl"]; private static readonly string GetTicketUrl = tings["GetTicketUrl"]; private static readonly string AppID = tings["AppID"]; private static readonly string AppSecret = tings["AppSecret"]; public WXHelpler() {} public static string GetJsapiTicket(string szURL) { string szRet = ""; DataTable dt = GetRecord(szURL); if ( <= 0) { // 重新申请token, 并记录到数据库中 if (RequestTokenAndTicket(szURL)) dt = GetRecord(szURL); } szRet = bleToJson("WXJSAPI", dt); return szRet; } /// /// 查询现有的记录 /// /// 现有记录 private static DataTable GetRecord(string szURL) { string szSQL = @"SELECT * FROM [dbo].[T_WXJSAPI]

WHERE appid=@appid AND secret=@secret AND pageurl=@pageurl"; SqlParameter[] sqlParams = new SqlParameter[] { new SqlParameter("@appid", AppID), new SqlParameter("@secret", AppSecret), new SqlParameter("@pageurl", szURL) }; // 如果过期了, 则删除旧数据 DataTable dt = eDtTxt(szSQL, sqlParams); if ( > 0 && (DateTime)[0]["expires_time"] < ) { string szSQLDelete = @"DELETE FROM [dbo].[T_WXJSAPI] WHERE appid=@appid AND secret=@secret AND pageurl=@pageurl"; eNonQuery(szSQLDelete, sqlParams); dt = eDtTxt(szSQL, sqlParams); } return dt; } ///

/// 请求服务器, 重新获取Token和ticket并写⼊数据库 /// private static bool RequestTokenAndTicket(string szURL) { bool bRet = false; try { // 获取Access Tocken string szRQ = e("{appid}", AppID).Replace("{secret}", AppSecret); string szRQ = e("{appid}", AppID).Replace("{secret}", AppSecret); string szResp = t(szRQ); if ( > 0) { WXAccessToken accessToken = new WXAccessToken(); accessToken = (WXAccessToken)Object(szResp, accessToken); if (_ > 0) { // 获取Ticket szRQ = e("{access_token}", _token); szResp = t(szRQ); if ( > 0) { WXTicket ticket = new WXTicket(); ticket = (WXTicket)Object(szResp, ticket); if (e == "0") { // ⽣成随机字符串, 时间戳, 然后通过SHA1⽅法⽣成签名 string szNonceStr = d().ToString(); DateTime dtNow = ; string szTimeStamp = eStamp(dtNow);

// 将数据记录到数据库中 long lTS = (szTimeStamp) + ((s_in)*1000); DateTime dtExpiresTime = tStringToDateTime(ng()); szTimeStamp = ing(0, 10); string szTmp = (@"jsapi_ticket={0}&noncestr={1}×tamp={2}&url={3}", , szNonceStr, szTimeStamp, szURL); string szSignature = 1(szTmp).ToLower(); string szSQL = @"INSERT INTO [dbo].[T_WXJSAPI]([appid],[secret],[pageurl],[access_token],[ticket],[nonceStr],[timestamp],[signature],[expires_time])

VALUES (@appid, @secret, @pageurl, @access_token, @ticket, @nonceStr,@timestamp,@signature,@expires_time)"; SqlParameter[] sqlParams = new SqlParameter[] { new SqlParameter("@appid", AppID), new SqlParameter("@secret", AppSecret), new SqlParameter("@pageurl", szURL), new SqlParameter("@access_token", _token), new SqlParameter("@ticket", ), new SqlParameter("@nonceStr", szNonceStr), new SqlParameter("@timestamp", szTimeStamp), new SqlParameter("@signature", szSignature), new SqlParameter("@expires_time", dtExpiresTime) }; bRet = eNonQuery(szSQL, sqlParams) == 1; } } } } } catch (Exception ex) { ine(e); } return bRet; }}d. 中相应的配置e. 数据库表结构/*Navicat SQL Server Data TransferSource Server : 73Source Server Version : 110000Source Host : localhost:1433Source Database : yqdhSource Schema : dboTarget Server Type : SQL ServerTarget Server Version : 110000File Encoding : 65001Date: 2018-08-07 11:50:29*/-- ------------------------------ Table structure for T_WXJSAPI-- ----------------------------DROP TABLE [dbo].[T_WXJSAPI]GOCREATE TABLE [dbo].[T_WXJSAPI] ([appid] nvarchar(50) NOT NULL ,[secret] nvarchar(50) NOT NULL ,[pageurl] nvarchar(200) NOT NULL ,[access_token] nvarchar(1024) NOT NULL ,[ticket] nvarchar(1024) NOT NULL ,[nonceStr] nvarchar(50) NOT NULL ,[timestamp] nvarchar(50) NOT NULL ,[signature] nvarchar(50) NOT NULL ,[expires_time] datetime NOT NULL

)GO-- ------------------------------ Indexes structure for table T_WXJSAPI-- ------------------------------ ------------------------------ Primary Key structure for table T_WXJSAPI-- ----------------------------ALTER TABLE [dbo].[T_WXJSAPI] ADD PRIMARY KEY ([appid], [secret], [pageurl])GO

2023年6月21日发(作者:)

微信⼩程序webview中使⽤JSSDK的步骤a. ⾸先, 微信⼩程序必须是企业认证的, 否则连webview都⽆法使⽤.(这个是基础)b. webview引⽤页⾯的JS加⼊如下脚本(请⾃⾏修改去掉不要的内容)function InitJSSDK(){ // 显⽰等待 StartWait();

// 发送请求获取json格式的签名信息 var dt = {}; = "wx_getjsapiticket"; dt.u = ; // 如果你的URL中有#, 则只要#之前的部分 $.ajax({ url : C_AJAX_HANDLER_URL, data : dt, }) .done(function(msg) { try{ msg = SON(msg); var iCnt = ; if (iCnt > 0){ var obj = I[0]; ({ debug: false, appId: , // 必填,⼩程序的唯⼀标识 timestamp: amp, // 必填,⽣成签名的时间戳 nonceStr: tr, // 必填,⽣成签名的随机串 signature: ure, // 必填,签名 jsApiList: ['getLocation'] // 必填,需要使⽤的JS接⼝列表 });

// 调⽤成功 (function(){ bJSSDKOK = true; setInterval('UpdateLocation()', C_GET_LOCATION_INTERVAL); }) // 调⽤失败 (function(res){ promptError('JSSDK失败: ' + ); bJSSDKOK = false; }); } } catch(e){} FinishWait(); }) .fail(function() { promptError('获取JSSDK参数失败!'); FinishWait(); });}c. 服务器响应请求的部分:(代码概要: 实现了获取签名信息, 并存⼊数据库; 再次申请时会判断是否已经申请过了, 如果已经申请并且没有过期, 则使⽤现有的,否则重新申请)using System;using c;using uration;using uration;using ;using ent;using ;using ;using ;///

/// WXHelpler - by ssxbxk/// public class WXHelpler{ private static readonly string GetTokenUrl = tings["GetTokenUrl"]; private static readonly string GetTicketUrl = tings["GetTicketUrl"]; private static readonly string AppID = tings["AppID"]; private static readonly string AppSecret = tings["AppSecret"]; public WXHelpler() {} public static string GetJsapiTicket(string szURL) { string szRet = ""; DataTable dt = GetRecord(szURL); if ( <= 0) { // 重新申请token, 并记录到数据库中 if (RequestTokenAndTicket(szURL)) dt = GetRecord(szURL); } szRet = bleToJson("WXJSAPI", dt); return szRet; } /// /// 查询现有的记录 /// /// 现有记录 private static DataTable GetRecord(string szURL) { string szSQL = @"SELECT * FROM [dbo].[T_WXJSAPI]

WHERE appid=@appid AND secret=@secret AND pageurl=@pageurl"; SqlParameter[] sqlParams = new SqlParameter[] { new SqlParameter("@appid", AppID), new SqlParameter("@secret", AppSecret), new SqlParameter("@pageurl", szURL) }; // 如果过期了, 则删除旧数据 DataTable dt = eDtTxt(szSQL, sqlParams); if ( > 0 && (DateTime)[0]["expires_time"] < ) { string szSQLDelete = @"DELETE FROM [dbo].[T_WXJSAPI] WHERE appid=@appid AND secret=@secret AND pageurl=@pageurl"; eNonQuery(szSQLDelete, sqlParams); dt = eDtTxt(szSQL, sqlParams); } return dt; } ///

/// 请求服务器, 重新获取Token和ticket并写⼊数据库 /// private static bool RequestTokenAndTicket(string szURL) { bool bRet = false; try { // 获取Access Tocken string szRQ = e("{appid}", AppID).Replace("{secret}", AppSecret); string szRQ = e("{appid}", AppID).Replace("{secret}", AppSecret); string szResp = t(szRQ); if ( > 0) { WXAccessToken accessToken = new WXAccessToken(); accessToken = (WXAccessToken)Object(szResp, accessToken); if (_ > 0) { // 获取Ticket szRQ = e("{access_token}", _token); szResp = t(szRQ); if ( > 0) { WXTicket ticket = new WXTicket(); ticket = (WXTicket)Object(szResp, ticket); if (e == "0") { // ⽣成随机字符串, 时间戳, 然后通过SHA1⽅法⽣成签名 string szNonceStr = d().ToString(); DateTime dtNow = ; string szTimeStamp = eStamp(dtNow);

// 将数据记录到数据库中 long lTS = (szTimeStamp) + ((s_in)*1000); DateTime dtExpiresTime = tStringToDateTime(ng()); szTimeStamp = ing(0, 10); string szTmp = (@"jsapi_ticket={0}&noncestr={1}×tamp={2}&url={3}", , szNonceStr, szTimeStamp, szURL); string szSignature = 1(szTmp).ToLower(); string szSQL = @"INSERT INTO [dbo].[T_WXJSAPI]([appid],[secret],[pageurl],[access_token],[ticket],[nonceStr],[timestamp],[signature],[expires_time])

VALUES (@appid, @secret, @pageurl, @access_token, @ticket, @nonceStr,@timestamp,@signature,@expires_time)"; SqlParameter[] sqlParams = new SqlParameter[] { new SqlParameter("@appid", AppID), new SqlParameter("@secret", AppSecret), new SqlParameter("@pageurl", szURL), new SqlParameter("@access_token", _token), new SqlParameter("@ticket", ), new SqlParameter("@nonceStr", szNonceStr), new SqlParameter("@timestamp", szTimeStamp), new SqlParameter("@signature", szSignature), new SqlParameter("@expires_time", dtExpiresTime) }; bRet = eNonQuery(szSQL, sqlParams) == 1; } } } } } catch (Exception ex) { ine(e); } return bRet; }}d. 中相应的配置e. 数据库表结构/*Navicat SQL Server Data TransferSource Server : 73Source Server Version : 110000Source Host : localhost:1433Source Database : yqdhSource Schema : dboTarget Server Type : SQL ServerTarget Server Version : 110000File Encoding : 65001Date: 2018-08-07 11:50:29*/-- ------------------------------ Table structure for T_WXJSAPI-- ----------------------------DROP TABLE [dbo].[T_WXJSAPI]GOCREATE TABLE [dbo].[T_WXJSAPI] ([appid] nvarchar(50) NOT NULL ,[secret] nvarchar(50) NOT NULL ,[pageurl] nvarchar(200) NOT NULL ,[access_token] nvarchar(1024) NOT NULL ,[ticket] nvarchar(1024) NOT NULL ,[nonceStr] nvarchar(50) NOT NULL ,[timestamp] nvarchar(50) NOT NULL ,[signature] nvarchar(50) NOT NULL ,[expires_time] datetime NOT NULL

)GO-- ------------------------------ Indexes structure for table T_WXJSAPI-- ------------------------------ ------------------------------ Primary Key structure for table T_WXJSAPI-- ----------------------------ALTER TABLE [dbo].[T_WXJSAPI] ADD PRIMARY KEY ([appid], [secret], [pageurl])GO