简要描述:
https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx8e178aca3677a48c&redirect_uri=http%3A%2F%2Fbt.sandieji.tech%2Fbs-plugins-wechat.html%3F_uri%3DaHR0cDovL2xvY2FsaG9zdDo1Nzc1Lz9fYXV0aFR5cGU9d2VjaGF0&response_type=code&scope=snsapi_userinfo&state=bt01002095cb1-f85c-4a2a-82f2-a72788c&connect_redirect=1&uin=MjQ5MTk1OTQyMQ%3D%3D&key=3d79cc18edb7d7372a2c84c1b56b3a7b6792addf2f8bf8dd300a22cc2aed71641a516fd278642dfd44b23fe672d03368&pass_ticket=25G85nadR2cbP3AVncXt4MdMkbwuBpHmziRSRzQ7XAQA8eR24A9vyATxaZ5n4qajvIrK8quKPpiZN3I09CjaUA==
http://localhost:5775/?_authType=wechat&_code=071Tja0007vEhL1auI200E67Yw0Tja04&_state=bt010cac7ea48-a7ca-4f4e-8f28-497983c&code=071Tja0007vEhL1auI200E67Yw0Tja04&state=bt010cac7ea48-a7ca-4f4e-8f28-497983c
接口版本:
版本号 |
制定人 |
制定日期 |
修订日期 |
v3 |
陈碧贵 |
2019-01-20 |
xxxx-xx-xx |
请求URL:
请求方式:
请求头:
参数名 |
是否必须 |
类型 |
说明 |
XownerId |
是 |
string |
项目唯一ID,对应bo_project {ownerId} |
XsysId |
否 |
string |
所属系统 对应 bo_system 表 |
XuserFromFirstShareId |
string |
否 |
一级分享用户ID, bo_user user_id |
XuserFromSecondShareId |
string |
否 |
二级分享用户ID, bo_user user_id |
XverifyApi |
是 |
string |
加密规则encryptByDES(`${newGuid()} |
XfilterAreaCode |
否 |
string |
行政区编码, 对应 bo_sys_area area_code |
Content-Type: |
是 |
string |
application/json; charset=utf-8 请求类型 |
请求参数:
参数名 |
是否必须 |
类型 |
说明 |
_fromSource |
是 |
string |
Wechat 来源微信公众号/wechatpc来源微信P |
_nodejs |
是 |
string |
common-data 对应/Config/AppNodeJs/Plugins/fn- common-data.js, 通过nodejs插件,对响应结果进行二次处理 common-data 普通数据(小写驼峰)common-data-under 普通数据下划线 |
path参数名 |
是否必须 |
类型 |
说明 |
code |
是 |
string |
微信返回码 |
state |
是 |
string |
随机状态码 |
返回示例:
正确时返回:
{"data":"cUKy1ElLVNnAeN/t/ccklquf2h+QMhthFWBm/9dLP30cfngDsZ0Odw4ZxmkEQtN3Fdr14Qsi3QxGVvWePuqvGEiDfFSpUsuwResSDPtqWgP5ztyzYPkHhxPwV4S2QGhsU/+SApUkMGe0eiGwb35ItWoH6ejuvtEzYheBeRFRCi9sfJWhLNna7aIi5+TcypDUJfWE6fFBV9iobTlVTHWfRYapgV0b51ND72AJGtqOv4ZiBfp73tDkITHRcJF0M8cj7N3sw1r/Jbk7+6VznO00QjZBOuEPqpI3PzGR4Yua3DLgxKyWAbEv7ak0DFDon0x7NzXXoTOeBV5ETuxgvWaMBSXKKSeqmFr7EEqcickXNqkOt15rzMNXiwjNFmXiVjMYz0QHkE5Wn440I/MKEHA5DMItrkAp0DCnF9ux2J9Y39lBn2JTroGQ6SujbtLS6riX5DX4WGJxq/cvvsaLoK2d54Fg/AH1V5Hyf1gxG4dZQghi+tRvxbOyh7y7zldMIldSh9t9zB9Mpp4gkdptwy8StjdauZNGbQFqh2kMilee5YIMyxx3pvGXR50iGcs/f9iiRH2whrIIdXttYEFzkZN4RLWKcHcYISHI/MGGaFIeSQYQKcc9xeNlkaKvqONuFxAC","code":0,"success":true}
错误时返回:
{
"code": 0,
"message": ""
"error":{
errorCode:null,
errorText:null
}
"success": false,
}
返回参数说明:
参数名 |
类型 |
说明 |
success |
bool |
true 表示数据请求成功(跟code=0一致),调用者优先使用 |
code |
int |
true 表示数据请求成功(跟code=0一致),调用者优先使用 |
data |
string |
Data 参数为加密的值, 结果作为微信登录的参数 |
cacheType |
string |
redis/sqlite/local 数据来源缓存 的类型(便于开发调试和性能优化) |
cacheDate |
date |
最后数据获取时间 |
前端加密代码:
let dataStr = decryptByDES(token);
let dataN = JSON.parse(dataStr);
let dataT = {
userId: null,
account: {
"userId": null,
"batO": "ui",
"nikeName": dataN.nikeName,
"wxUnionId": dataN.wxUnionId
},
"sex": {
"value": dataN.gender
},
"headIcon": dataN.headIcon
}
if (dataN.wxOpenId) {
dataT.account.wxOpenId = dataN.wxOpenId;
}
if (dataN.wxAppOpenId) {
dataT.account.wxAppOpenId = dataN.wxAppOpenId;
}
let userT = {
loginType: "wechat",
openUser: encryptByDES(JSON.stringify(dataT))
}
doLogin(userT).then((temp) => {
if (!temp) {
if (callback) callback({
success: false,
error: {
errorCode: 77000,
errorText: "微信登录失败",
}
});
store.dispatch("dataLoading", false);
return;
}
if (!temp.data) {
if (callback) callback({
success: false,
error: {
errorCode: 77001,
errorText: "微信登录失败",
}
});
store.dispatch("dataLoading", false);
return;
}
if (!temp.data.success) {
if (callback) callback({
success: false,
error: {
errorCode: 77003,
errorText: (temp.data.error || {}).errorText,
}
});
store.dispatch("dataLoading", false);
return;
}
loginAuth.saveAuth(this, temp.data.user, temp.data.token);
if (callback) callback(temp);
store.dispatch("dataLoading", false);
});
后端解密代码:
UserBo userBO = new UserBo
{
NikeName = jobjectU["nickname"].GetString(),
Gender = jobjectU["sex"].GetInt32().ToString(),
WxOpenId = tokenData.OpenId,
WxUnionId = tokenData.UnionId,
OpenId = tokenData.UnionId ?? tokenData.OpenId,
HeadIcon = jobjectU["headimgurl"].GetString(),
Province = jobjectU["province"].GetString(),
City = jobjectU["city"].GetString(),
Country = jobjectU["country"].GetString()
};
if (!string.IsNullOrEmpty(userBO.Gender))
{
userBO.Gender = userBO.Gender == "1" ? "1" : "0";
}
string outToken = _desRepository.EncryptDefault(ownerId, sysId, JsonUtilText.Serialize(userBO, true, true, false));
result.Data = outToken;
result.Success = true;
result.Error = null;
public string EncryptDefault(string ownerId, string sysId, string data)
{
try
{
var webSecurityVI = _configurationBuilderService.GetConfigurationAppAuthSecurity(ownerId, sysId).GetValue<string>($"security:webSecurityVI");
var webSecurityKey = _configurationBuilderService.GetConfigurationAppAuthSecurity(ownerId, sysId).GetValue<string>($"security:webSecurityKey");
string result = Encrypt(ownerId, sysId, data, webSecurityKey, webSecurityVI).Result;
return result;
}
catch (Exception ex)
{
_logger.LogError(ex, "【加密错误】");
return null;
}
}
文档更新时间: 2021-06-25 08:00 作者:admin