通行证登录多平台 php,多应用、多平台统一登录关系

本文介绍了如何通过微信开放平台的UnionID机制实现在多个应用间用户帐号的互通。开发者可以通过获取用户基本信息接口,结合OpenID和UnionID,确保同一用户在不同应用中的身份一致性。在小程序端,详细阐述了从配置appid、获取code到解密获取UnionID的步骤,并提供了PHP后端解密UnionID的代码示例。通过这一机制,开发者可以轻松地在不同应用间共享和同步用户数据。
摘要由CSDN通过智能技术生成

多平台统一登录之 unionID

通过获取用户基本信息接口,开发者可通过OpenID来获取用户基本信息,而如果开发者拥有多个应用,可使用以下办法通过UnionID机制来在多个应用进行用户帐号互通。

只要是同一个微信开放平台帐号下的公众号,用户的UnionID是唯一的。

换句话说,同一用户,对同一个微信开放平台帐号下的不同应用,UnionID是相同的。

此前的OpenID机制,每个微信号对应每个应用有唯一的OpenID,所以不同应用之间是不能共享用户的,现在有了UnionID就可以了。

APP端获取 unionID

使用 uni.login 即可;

小程序端获取 unionID

步骤 :1、配置小程序 appid (此appid 在微信开放平台已经绑定);

2、使用 uni.login 登录时会获取 code,用 code 换取 seesion_key;

3、在获取用户信息函数中获取到加密信息;

4、利用 seesion_key 及加密信息在服务端解密获取 unionID

php 后端注意事项需要开启 php_openssl 扩展

前端实现过程代码export default {

data() {

return {

};

},

methods:{

// #ifdef MP-WEIXIN

getUserInfo : (info) => {

//加密数据

var encryptedData = info.mp.detail.encryptedData;

var iv = info.mp.detail.iv;

info = info.mp.detail.userInfo;

//info

//userInfo {"nickName":"深海","gender":1,...avatarUrl":"https://7tdPvkPaJlkaLFFbLAffGVApluZdanLkDVplNlAhq1EJA/132"}

//与服务器交互进行解密

uni.request({

url: _self.apiServer+'member&m=wxaes',

method: 'POST',

header: {'content-type' : "application/x-www-form-urlencoded"},

data: {

session_key : session_key,

encryptedData : encryptedData,

iv : iv

},

success: res => {

console.log(res);

//此处可以成功获取 unionId 利用 unionId 完成登录即可

},

fail: () => {},

complete: () => {}

});

}

},

onLoad:function(options){

_self = this;

pageOptions = options;

// #ifdef MP-WEIXIN

// 调用 微信 login 获取 code

uni.login({

success: (res) => {

uni.request({

url:_self.apiServer+'member&m=codeToSession&code='+res.code,

success: (sessions) => {

session_key = sessions.data.session_key;

}

}

}

});

}

});

// #endif

}

php 后端代码<?php

namespace hsC;

class member{

//......

public function wxaes(){

if(empty($_POST['session_key']) || empty($_POST['encryptedData']) || empty($_POST['iv'])){exit(jsonCode('error', 'data error'));}

include HS_TOOLS.'WXBizDataCrypt.php';

$pc = new \WXBizDataCrypt(HS_APPID, $_POST['session_key']);

$data = '';

$errCode = $pc->decryptData($_POST['encryptedData'], $_POST['iv'], $data);

if ($errCode == 0) {

exit($data);

} else {

exit(jsonCode('error', $errCode));

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值