You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

160 lines
6.5 KiB
Plaintext

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

using BP.Cloud.WeXinAPI;
using BP.DA;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace CCFlow.App.Portal
{
public partial class DirectWeiXin : System.Web.UI.Page
{
public string GetVal(string key)
{
string val = this.Request.QueryString[key];
return BP.Tools.DealString.DealStr(val);
}
//httppost请求
BP.WF.HttpWebResponseUtility httpWebResponseUtility = new BP.WF.HttpWebResponseUtility();
protected void Page_Load(object sender, EventArgs e)
{
string code = HttpUtility.UrlDecode(HttpContext.Current.Request["code"] ?? string.Empty);
string state = HttpUtility.UrlDecode(HttpContext.Current.Request["state"] ?? string.Empty);
//获取第三方应用凭证
string suitAccessToken = BP.Cloud.WeXinAPI.Glo.getSuitAccessToken();
//20220615suitAccessToken为空时重新获取
if (string.IsNullOrEmpty(suitAccessToken))
suitAccessToken = BP.Cloud.WeXinAPI.Glo.getSuitAccessToken();
string getUserUrl = "https://qyapi.weixin.qq.com/cgi-bin/service/getuserinfo3rd?suite_access_token=" + suitAccessToken + "&code=" + code;
string res = BP.DA.DataType.ReadURLContext(getUserUrl);
// httpWebResponseUtility.HttpResponseGet(getUserUrl);
//解析返回的json串
JObject jobj = JObject.Parse(res);
JToken resJtoken = jobj as JToken;
//返回码
string errcode = Glo.JSON_SeleteNode(resJtoken, "errcode");
if (string.IsNullOrEmpty(errcode) == false && errcode.Equals("0") == false)
{
this.Response.Write("err@获取员工信息错误,错误码为:" + errcode + " URL=" + getUserUrl);
// BP.DA.Log.DebugWriteError("err@获取员工信息错误,错误码为:" + errcode);
return;
}
//用户所属企业的corpid
string corpId = Glo.JSON_SeleteNode(resJtoken, "CorpId");
BP.Cloud.Org org = new BP.Cloud.Org();
org.Retrieve(BP.Cloud.OrgAttr.CorpID, corpId);
//用户在企业内的UserID如果该企业与第三方应用有授权关系时返回明文UserId否则返回密文UserId
string userID = Glo.JSON_SeleteNode(resJtoken, "UserId");
//手机设备号(由企业微信在安装时随机生成,删除重装会改变,升级不受影响)
string DeviceId = Glo.JSON_SeleteNode(resJtoken, "DeviceId");
//成员票据最大为512字节。 scope为snsapi_userinfo或snsapi_privateinfo且用户在应用可见范围之内时返回此参数。后续利用该参数可以获取用户信息或敏感信息参见“第三方使用user_ticket获取成员详情”。
string user_ticket = Glo.JSON_SeleteNode(resJtoken, "user_ticket");
//user_ticket的有效时间随user_ticket一起返回
string expires_in = Glo.JSON_SeleteNode(resJtoken, "expires_in");
//全局唯一。对于同一个服务商不同应用获取到企业内同一个成员的open_userid是相同的最多64个字节。仅第三方应用可获取
string open_userid = Glo.JSON_SeleteNode(resJtoken, "open_userid");
BP.Web.WebUser.OrgNo = org.No;
BP.WF.Dev2Interface.Port_Login(userID,org.No);
//真实的ID.
BP.Web.WebUser.No = userID;
BP.Web.WebUser.OrgNo = org.No;
BP.Web.WebUser.OrgName = org.Name;
string doType = this.GetVal("DoType");
if (doType == null)
doType = "";
string workid = this.GetVal("WorkID");
string flowNo = this.GetVal("FK_Flow");
//如果是手机端.
if (this.IsMobile() == true)
{
if (doType.Equals("OpenWork") == true)
{
this.Response.Redirect("/CCMobile/MyFlow.htm?WorkID=" + workid + "&FK_Flow=" + flowNo + "&OrgNo=" + org.No + "&UserNo=" + userID, true);
return;
}
this.Response.Redirect("/CCMobilePortal/Home.htm?OrgNo=" + org.No + "&UserNo=" + userID, true);
return;
}
if (doType.Equals("OpenWork") == true)
{
this.Response.Redirect("/WF/MyFlow.htm?WorkID=" + workid + "&FK_Flow=" + flowNo + "&OrgNo=" + org.No + "&UserNo=" + userID, true);
return;
}
string url = "";
url = "/App/Portal/Home.htm?UserID=" + BP.Web.WebUser.No + "&OrgNo=" + org.No;
this.Response.Redirect(url, true);
return;
}
private bool IsMobile()
{
HttpContext context = HttpContext.Current;
if (context != null)
{
HttpRequest request = context.Request;
return request.Browser.IsMobileDevice;
}
return false;
}
public void DoOF()
{
if (this.GetVal("DoType").Equals("OF"))
{
string sid = this.GetVal("Token");
//sid 格式为: guid+"_"+workid+"_"+empNo+"_"+nodeID;
string[] strs = sid.Split('_');
string workID = strs[1];
string empNo = strs[2];
BP.WF.GenerWorkerList wl = new BP.WF.GenerWorkerList();
int i = wl.Retrieve(BP.WF.GenerWorkerListAttr.FK_Emp, empNo,
BP.WF.GenerWorkerListAttr.WorkID, workID,
BP.WF.GenerWorkerListAttr.IsPass, 0);
if (i == 0)
{
this.Response.Write("info@此作已经被别人处理或者此流程已删除");
return;
}
BP.WF.GenerWorkFlow gwf = new BP.WF.GenerWorkFlow(wl.WorkID);
//设置他的组织.
BP.Web.WebUser.OrgNo = gwf.OrgNo;
BP.Port.Emp empOF = new BP.Port.Emp(wl.FK_Emp);
BP.Web.WebUser.SignInOfGener(empOF);
string myurl = "/WF/MyFlow.htm?FK_Flow=" + wl.FK_Flow + "&WorkID=" + wl.WorkID + "&FK_Node=" + wl.FK_Node + "&FID=" + wl.FID + "&PWorkID=" + gwf.PWorkID;
this.Response.Redirect(myurl, true);
return;
}
}
}
}