前提条件:
1 小程序需是经过认证的,建议先认证一个公众号,小程序借助公众号的资质做认证,这个可以省点费用。
2 小程序要获取unionId,必须先注册过开放平台,开放平台做过认证,然后把对应的小程序和主体下的所有公众号或小程序添加在开放平台下,方可获取到小程序的unionId,否则,小程序只能获取到用户的openId,但获取不到unionId。
正式开始
1 小程序中必须有一个按钮,用来获取用户信息
2 js处理,获取加密数据,并解密,获取到unionId
getUserInfo: function (e) {
let that = this
if (e.detail.errMsg == 'getUserInfo:fail user deny') {
wx.showModal({
title: '提示',
showCancel: false,
content: '未授权',
success: function (res) { }
})
return
}
wx.request({
url: "https://wx.xxx.com/decode.php",
data: {
code: app.globalData.code,
iv: e.detail.iv,
encryptedData: e.detail.encryptedData,
sessionkey: app.globalData.session_key
},
method: 'GET', // OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT
header: {
'content-type': 'application/json'
}, // 设置请求的 header
success: function (data) {
console.log("data", data)
app.globalData.unionid = data.unionid
app.globalData.openid = data.openId
},
fail: function (err) {
console.log(err);
}
})
},
上面涉及的几个参数
code从哪来呢?
wx.login({
success: res => {
// 发送 res.code 到后台换取 openId, sessionKey, unionId
console.log(res)
this.globalData.code = res.code
}
})
session_key怎么来呢?
数组:wq
//$openid = $arr['openid'];
//$session_key = $arr['session_key'];
//jreturn $json;//返回给前台一个session_key
echo $info;//返回给前台一个session_key
?>
encryptedData是怎么解密的呢?
decryptData($encryptedData, $iv, $data );
echo $data;
?>
至于wxBizDataCrypt.php,您可以使用下面的代码
sessionKey = $sessionKey;
$this->appid = $appid;
}
/**
* 检验数据的真实性,并且获取解密后的明文.
* @param $encryptedData string 加密的用户数据
* @param $iv string 与用户数据一同返回的初始向量
* @param $data string 解密后的原文
*
* @return int 成功0,失败返回对应的错误码
*/
public function decryptData( $encryptedData, $iv, &$data )
{
if (strlen($this->sessionKey) != 24) {
return ErrorCode::$IllegalAesKey;
}
$aesKey=base64_decode($this->sessionKey);
if (strlen($iv) != 24) {
return ErrorCode::$IllegalIv;
}
$aesIV=base64_decode($iv);
$aesCipher=base64_decode($encryptedData);
$result=openssl_decrypt( $aesCipher, "AES-128-CBC", $aesKey, 1, $aesIV);
$dataObj=json_decode( $result );
if( $dataObj == NULL )
{
return ErrorCode::$IllegalBuffer;
}
if( $dataObj->watermark->appid != $this->appid )
{
return ErrorCode::$IllegalBuffer;
}
$data = $result;
return ErrorCode::$OK;
}
}
appid 和secret在哪里呢?
请参考我的上篇文章
公众号如何获取用户unionId,里面appid相关的信息是一致的
https://blog.csdn.net/dreamersf/article/details/106094789
更多咨询,可以填充表单