Appearance
URL组装用户信息登录
说明
此功能实现客户系统与诺云系统的账户关联。
注意
- 登录失败不影响访问直播间,身份是游客。其他场景继续尝试微信登录或钉钉登录等。
- openid不存在可能会影响关于微信的部分功能.
- url有效期60秒,超时需重新组装url。
URL组装
准备内容
- AppSecret(联系客服获取)
- 直播间地址(例:https://h5.wx.inuoyun.com/Watch/666 )
- base64安全加密函数
请求参数
参数 | 类型 | 必填 | 描述 |
---|---|---|---|
third_login_data | string | 是 | 加密内容 |
third_login_time | string | 是 | 13位时间戳。60秒内有效 |
third_login_sign | string | 是 | 签名 |
加密参数
客户系统的用户信息,未限制参数个数
支持自定义追加参数,参数名不固定,部分场景推送给商家。
参数 | 类型 | 必填 | 描述 |
---|---|---|---|
uuid | string | 是 | 第三方系统唯一标识 |
name | string | 是 | 昵称 |
photo | string | 否 | 头像url |
phone | string | 否 | 电话号码 |
sex | integer | 否 | 性别 |
appid | string | 否 | 微信公众号、小程序appid |
openid | string | 否 | 微信openid |
other1 | string | 否 | 其他信息1。参数名可自定义。 |
other2 | string | 否 | 其他信息2。参数名可自定义。 |
组装
- 加密参数URL编码,例
uuid=sd2213&name=%E5%BCA0%E4%B8%8%9&photo=https%3A%2F%2Fs.nuoyun.tv%2FPublic%2FHome%2FImages%2Fphoto.png&site=KD13
- 使用base64加密第一步返回的字符串
- md5(步骤二字符串+时间戳+AppSecret)
- 将步骤二结果,步骤三结果,时间戳追加在直播间地址中,例
http://console.nuoyun.tv/Watch/666?third_login_data=dXVpZD1zZDIytZT0lRTUlQkMlQTAlRTQlQjglODkmcGhvdG89aHR0cHMlM0ElMkYlMkZzLm51b3l1bi50diUyRlB1YmxpYyUyRkhvbWUlMkZJbWFnZXMlMkZwaG90by5wbmcmc2l0ZT1LRDEz&third_login_time=1710752154000&third_login_sign=ecfaafe4a2959b978a0c5b381eaa1682
例子(php版)
php
$url = 'http://console.nuoyun.tv/Watch/666';
$user_data = [
'uuid' => 'sd2213',
'name' => '张三',
'photo' => 'https://s.nuoyun.tv/Public/Home/Images/photo.png',
'site' => 'KD13',
];
$app_secret = '6c063b0368edaac4f81692b2';
$param['third_login_data'] = base64UrlEncode(http_build_query($user_data));
$param['third_login_time'] = time() . '000';
$param['third_login_sign'] = md5($param['third_login_data'] . $param['third_login_time'] . $app_secret);
$url = $url . '?' . http_build_query($param);
//http://console.nuoyun.tv/Watch/666?third_login_data=dXVpZD1zZDIytZT0lRTUlQkMlQTAlRTQlQjglODkmcGhvdG89aHR0cHMlM0ElMkYlMkZzLm51b3l1bi50diUyRlB1YmxpYyUyRkhvbWUlMkZJbWFnZXMlMkZwaG90by5wbmcmc2l0ZT1LRDEz&third_login_time=1710752154000&third_login_sign=ecfaafe4a2959b978a0c5b381eaa1682
附
base64安全加密函数
java版
java
import java.util.Base64;
public class SafeBase64ForUrl {
// 使用URL安全的Base64编码
public static String encode(String input) {
return Base64.getUrlEncoder().withoutPadding().encodeToString(input.getBytes());
}
// 使用URL安全的Base64解码
public static String decode(String input) {
byte[] decodedBytes = Base64.getUrlDecoder().decode(input);
return new String(decodedBytes);
}
public static void main(String[] args) {
String originalInput = "Hello, world!";
String encodedString = encode(originalInput);
String decodedString = decode(encodedString);
System.out.println("Original: " + originalInput);
System.out.println("Encoded: " + encodedString);
System.out.println("Decoded: " + decodedString);
}
}
php版
php
function base64UrlEncode($input) {
// Base64编码,然后将+替换为-,将/替换为_,去除尾部的=
return str_replace(['+', '/', '='], ['-', '_', ''], base64_encode($input));
}
function base64UrlDecode($input) {
// 将-替换为+,将_替换为/
$urlSafeBase64 = str_replace(['-', '_'], ['+', '/'], $input);
// 对可能缺失的尾部=进行补齐
$paddingLength = 4 - strlen($urlSafeBase64) % 4;
if ($paddingLength < 4) {
$urlSafeBase64 .= str_repeat('=', $paddingLength);
}
return base64_decode($urlSafeBase64);
}
// 加密示例
$encoded = base64UrlEncode('Hello, world!');
echo "Encoded: " . $encoded . "\n";
// 解密示例
$decoded = base64UrlDecode($encoded);
echo "Decoded: " . $decoded . "\n";
go版
go
package main
import (
"encoding/base64"
"fmt"
)
// 使用URL安全的Base64编码,不包含填充字符=
func base64UrlEncode(input []byte) string {
return base64.RawURLEncoding.EncodeToString(input)
}
// 使用URL安全的Base64解码
func base64UrlDecode(input string) ([]byte, error) {
return base64.RawURLEncoding.DecodeString(input)
}
func main() {
originalInput := "Hello, world!"
encodedString := base64UrlEncode([]byte(originalInput))
decodedBytes, err := base64UrlDecode(encodedString)
if err != nil {
fmt.Println("Decode error:", err)
return
}
decodedString := string(decodedBytes)
fmt.Println("Original: " + originalInput)
fmt.Println("Encoded: " + encodedString)
fmt.Println("Decoded: " + decodedString)
}