# JSSDK(agentConfig)
wx.agentConfig()
用于某些特定的接口(如审批流接口、剪切板接口等),但一般前提都需要先使用到常规的 JSSDK(参考【JSSDK(常规)】标签),因此这是一个增加项。
wx.agentConfig()
同样分为服务器端和客户端两部分。
# 服务端获取签名信息
后端除了后端通过 JSSDKHelper.GetJsSdkUiPackageAsync()
方法获取常规 JSSDK 运行所需参数以外,还需要使用同一个方法,传入不同参数来获取 agetntConfig
的对应参数:
public async Task<ActionResult> AgentConfig()
{
//此处演示同时支持多个应用的注册,请参考 appsettings.json 文件
var workSetting = Senparc.Weixin.Config.SenparcWeixinSetting["企业微信审批"] as ISenparcWeixinSettingForWork;
var url = "https://sdk.weixin.senparc.com/Work/Approval";
//获取 UI 信息包
/* 注意:
* 所有应用中,jsApiUiPackage 是必备的
*/
var jsApiTicket = await JsApiTicketContainer.GetTicketAsync(workSetting.WeixinCorpId, workSetting.WeixinCorpSecret, false);
var jsApiUiPackage = await JSSDKHelper.GetJsApiUiPackageAsync(workSetting.WeixinCorpId, workSetting.WeixinCorpSecret, url, jsApiTicket, false);
ViewData["jsApiUiPackage"] = jsApiUiPackage;
/* 注意:
* 1、这里需要使用 WeixinCorpAgentId,而不是 WeixinCorpId
* 2、agentJsApiUiPackage 是否需要提供,请参考官方文档,此处演示了最复杂的情况
*/
ViewData["thirdNo"] = DateTime.Now.Ticks + Guid.NewGuid().ToString("n");
ViewData["corpId"] = workSetting.WeixinCorpId;
ViewData["agentId"] = workSetting.WeixinCorpAgentId;
var agentConfigJsApiTicket = await JsApiTicketContainer.GetTicketAsync(workSetting.WeixinCorpId, workSetting.WeixinCorpSecret, true);
var agentJsApiUiPackage = await JSSDKHelper.GetJsApiUiPackageAsync(workSetting.WeixinCorpId, workSetting.WeixinCorpSecret, url, agentConfigJsApiTicket, true);
ViewData["agentJsApiUiPackage"] = agentJsApiUiPackage;
return View();
}
注意:上述方法中,使用了
Senparc.Weixin.Config.SenparcWeixinSetting["企业微信审批"]
来获取与之前不同的微信配置,请参考本项目中
appsetting.json
文件中的设置方法:
"Items": { //添加多个企业微信应用 "企业微信审批": { "WeixinCorpId": "#{WeixinCorpId2}#", "WeixinCorpAgentId": "#{WeixinCorpAgentId2}#", "WeixinCorpSecret": "#{WeixinCorpSecret2}#", "WeixinCorpToken": "#{WeixinCorpToken2}#", "WeixinCorpEncodingAESKey": "#{WeixinCorpEncodingAESKey2}#"} }
此方法对所有其他模块也通用(如公众号、小程序、微信支付等)。
本项目参考文件:
/Controllers/JSSDKnController.cs - AgentConfig() 方法
/appsettings.json
# 网页端配置 JSSDK
网页端除了进行常规的 JSSDK 配置以外,还需要在执行特定的 JsApi 方法之前,添加 wx.agentConfig()
的配置:
function invoke(){
wx.agentConfig({
corpid: '@ViewData["corpId"]', // 必填,企业微信的corpid,必须与当前登录的企业一致
agentid: '@ViewData["agentId"]', // 必填,企业微信的应用id (e.g. 1000247)
timestamp: @agentJsApiUiPackage.Timestamp, // 必填,生成签名的时间戳
nonceStr: '@agentJsApiUiPackage.NonceStr', // 必填,生成签名的随机串
signature: '@agentJsApiUiPackage.Signature',// 必填,签名,见附录-JS-SDK使用权限签名算法
jsApiList: ['thirdPartyOpenPage'], //必填,传入需要使用的接口名称
success: function(res) {
// 回调
wx.invoke('thirdPartyOpenPage', {
"oaType": "10001",// String
//"templateId": "C4NxepvGj51gbkeGXHQgYRArW96WrxRinNfyCxo7N",//SYS
"templateId":"247bcb886d0374a0a1f749c52794ba1a_622421053",// Open
"thirdNo": "",// String
"extData": {
'fieldList': [{
'title': '审批类型',
'type': 'text',
'value': '文章审批',
},
{
'title': '预览',
'type': 'link',
'value': 'https://weixin.senparc.com',
}],
}
},
function(res) {
// 输出接口的回调信息
console.log(res);
alert('wx.invoke result:'+JSON.stringify(res));
});
},
fail: function(res) {
if(res.errMsg.indexOf('function not exist') > -1){
alert('版本过低请升级')
}
else{
alert('wx.invoke fail:'+JSON.stringify(res));
}
}
});
}
HTML 页面进行触发:<a href="javascript:void(0)" onclick="invoke()">点击唤起审批流程</a>
本项目参考文件:
/Views/JSSDK/Index.cshtml