Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
C
clx-fluwx
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
openSourceLibrary
clx-fluwx
Commits
d761a782
提交
d761a782
authored
9月 12, 2021
作者:
JarvanMo
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
use pod instead
上级
3ce7dd84
全部展开
隐藏空白字符变更
内嵌
并排
正在显示
7 个修改的文件
包含
24 行增加
和
289 行删除
+24
-289
Podfile.lock
example/ios/Podfile.lock
+8
-1
main.dart
example/lib/main.dart
+15
-15
WXApi.h
ios/Classes/WXApi.h
+0
-205
WXApiObject.h
ios/Classes/WXApiObject.h
+0
-0
WechatAuthSDK.h
ios/Classes/WechatAuthSDK.h
+0
-68
fluwx.podspec
ios/fluwx.podspec
+1
-0
libWeChatSDK.a
ios/libWeChatSDK.a
+0
-0
没有找到文件。
example/ios/Podfile.lock
浏览文件 @
d761a782
...
@@ -2,11 +2,17 @@ PODS:
...
@@ -2,11 +2,17 @@ PODS:
- Flutter (1.0.0)
- Flutter (1.0.0)
- fluwx (0.0.1):
- fluwx (0.0.1):
- Flutter
- Flutter
- WechatOpenSDK_Fuck (~> 1.9.2)
- WechatOpenSDK_Fuck (1.9.2)
DEPENDENCIES:
DEPENDENCIES:
- Flutter (from `Flutter`)
- Flutter (from `Flutter`)
- fluwx (from `.symlinks/plugins/fluwx/ios`)
- fluwx (from `.symlinks/plugins/fluwx/ios`)
SPEC REPOS:
trunk:
- WechatOpenSDK_Fuck
EXTERNAL SOURCES:
EXTERNAL SOURCES:
Flutter:
Flutter:
:path: Flutter
:path: Flutter
...
@@ -15,7 +21,8 @@ EXTERNAL SOURCES:
...
@@ -15,7 +21,8 @@ EXTERNAL SOURCES:
SPEC CHECKSUMS:
SPEC CHECKSUMS:
Flutter: 434fef37c0980e73bb6479ef766c45957d4b510c
Flutter: 434fef37c0980e73bb6479ef766c45957d4b510c
fluwx: c64c2b84b965279aaa251a80b5b6a1cd0ef7bd45
fluwx: c192ef1ea3617badb813fa1a761ffc5c9c12208a
WechatOpenSDK_Fuck: aa8f4b0af902837e887a1d40c62f06c060c1dc98
PODFILE CHECKSUM: 8e679eca47255a8ca8067c4c67aab20e64cb974d
PODFILE CHECKSUM: 8e679eca47255a8ca8067c4c67aab20e64cb974d
...
...
example/lib/main.dart
浏览文件 @
d761a782
...
@@ -77,16 +77,16 @@ class ShareSelectorPage extends StatelessWidget {
...
@@ -77,16 +77,16 @@ class ShareSelectorPage extends StatelessWidget {
children:
<
Widget
>[
children:
<
Widget
>[
Padding
(
Padding
(
padding:
const
EdgeInsets
.
all
(
8.0
),
padding:
const
EdgeInsets
.
all
(
8.0
),
child:
new
OutlineButton
(
child:
new
Outline
d
Button
(
onPressed:
()
async
{
onPressed:
()
async
{
String
extMsg
=
await
getExtMsg
();
String
?
extMsg
=
await
getExtMsg
();
print
(
"extMsg:
$extMsg
\n
"
);
print
(
"extMsg:
$extMsg
\n
"
);
},
},
child:
const
Text
(
"Get ExtMessage"
)),
child:
const
Text
(
"Get ExtMessage"
)),
),
),
Padding
(
Padding
(
padding:
const
EdgeInsets
.
all
(
8.0
),
padding:
const
EdgeInsets
.
all
(
8.0
),
child:
new
OutlineButton
(
child:
new
Outline
d
Button
(
onPressed:
()
{
onPressed:
()
{
Navigator
.
of
(
context
)?.
pushNamed
(
"shareText"
);
Navigator
.
of
(
context
)?.
pushNamed
(
"shareText"
);
},
},
...
@@ -94,7 +94,7 @@ class ShareSelectorPage extends StatelessWidget {
...
@@ -94,7 +94,7 @@ class ShareSelectorPage extends StatelessWidget {
),
),
Padding
(
Padding
(
padding:
const
EdgeInsets
.
all
(
8.0
),
padding:
const
EdgeInsets
.
all
(
8.0
),
child:
new
OutlineButton
(
child:
new
Outline
d
Button
(
onPressed:
()
{
onPressed:
()
{
Navigator
.
of
(
context
)?.
pushNamed
(
"shareImage"
);
Navigator
.
of
(
context
)?.
pushNamed
(
"shareImage"
);
},
},
...
@@ -102,7 +102,7 @@ class ShareSelectorPage extends StatelessWidget {
...
@@ -102,7 +102,7 @@ class ShareSelectorPage extends StatelessWidget {
),
),
Padding
(
Padding
(
padding:
const
EdgeInsets
.
all
(
8.0
),
padding:
const
EdgeInsets
.
all
(
8.0
),
child:
new
OutlineButton
(
child:
new
Outline
d
Button
(
onPressed:
()
{
onPressed:
()
{
Navigator
.
of
(
context
)?.
pushNamed
(
"shareWebPage"
);
Navigator
.
of
(
context
)?.
pushNamed
(
"shareWebPage"
);
},
},
...
@@ -110,7 +110,7 @@ class ShareSelectorPage extends StatelessWidget {
...
@@ -110,7 +110,7 @@ class ShareSelectorPage extends StatelessWidget {
),
),
Padding
(
Padding
(
padding:
const
EdgeInsets
.
all
(
8.0
),
padding:
const
EdgeInsets
.
all
(
8.0
),
child:
new
OutlineButton
(
child:
new
Outline
d
Button
(
onPressed:
()
{
onPressed:
()
{
Navigator
.
of
(
context
)?.
pushNamed
(
"shareMusic"
);
Navigator
.
of
(
context
)?.
pushNamed
(
"shareMusic"
);
},
},
...
@@ -118,7 +118,7 @@ class ShareSelectorPage extends StatelessWidget {
...
@@ -118,7 +118,7 @@ class ShareSelectorPage extends StatelessWidget {
),
),
Padding
(
Padding
(
padding:
const
EdgeInsets
.
all
(
8.0
),
padding:
const
EdgeInsets
.
all
(
8.0
),
child:
new
OutlineButton
(
child:
new
Outline
d
Button
(
onPressed:
()
{
onPressed:
()
{
Navigator
.
of
(
context
)?.
pushNamed
(
"shareVideo"
);
Navigator
.
of
(
context
)?.
pushNamed
(
"shareVideo"
);
},
},
...
@@ -126,7 +126,7 @@ class ShareSelectorPage extends StatelessWidget {
...
@@ -126,7 +126,7 @@ class ShareSelectorPage extends StatelessWidget {
),
),
Padding
(
Padding
(
padding:
const
EdgeInsets
.
all
(
8.0
),
padding:
const
EdgeInsets
.
all
(
8.0
),
child:
new
OutlineButton
(
child:
new
Outline
d
Button
(
onPressed:
()
{
onPressed:
()
{
Navigator
.
of
(
context
)?.
pushNamed
(
"shareMiniProgram"
);
Navigator
.
of
(
context
)?.
pushNamed
(
"shareMiniProgram"
);
},
},
...
@@ -134,7 +134,7 @@ class ShareSelectorPage extends StatelessWidget {
...
@@ -134,7 +134,7 @@ class ShareSelectorPage extends StatelessWidget {
),
),
Padding
(
Padding
(
padding:
const
EdgeInsets
.
all
(
8.0
),
padding:
const
EdgeInsets
.
all
(
8.0
),
child:
new
OutlineButton
(
child:
new
Outline
d
Button
(
onPressed:
()
{
onPressed:
()
{
Navigator
.
of
(
context
)?.
pushNamed
(
"sendAuth"
);
Navigator
.
of
(
context
)?.
pushNamed
(
"sendAuth"
);
},
},
...
@@ -142,7 +142,7 @@ class ShareSelectorPage extends StatelessWidget {
...
@@ -142,7 +142,7 @@ class ShareSelectorPage extends StatelessWidget {
),
),
Padding
(
Padding
(
padding:
const
EdgeInsets
.
all
(
8.0
),
padding:
const
EdgeInsets
.
all
(
8.0
),
child:
new
OutlineButton
(
child:
new
Outline
d
Button
(
onPressed:
()
{
onPressed:
()
{
Navigator
.
of
(
context
)?.
pushNamed
(
"pay"
);
Navigator
.
of
(
context
)?.
pushNamed
(
"pay"
);
},
},
...
@@ -150,7 +150,7 @@ class ShareSelectorPage extends StatelessWidget {
...
@@ -150,7 +150,7 @@ class ShareSelectorPage extends StatelessWidget {
),
),
Padding
(
Padding
(
padding:
const
EdgeInsets
.
all
(
8.0
),
padding:
const
EdgeInsets
.
all
(
8.0
),
child:
new
OutlineButton
(
child:
new
Outline
d
Button
(
onPressed:
()
{
onPressed:
()
{
Navigator
.
of
(
context
)?.
pushNamed
(
"launchMiniProgram"
);
Navigator
.
of
(
context
)?.
pushNamed
(
"launchMiniProgram"
);
},
},
...
@@ -158,7 +158,7 @@ class ShareSelectorPage extends StatelessWidget {
...
@@ -158,7 +158,7 @@ class ShareSelectorPage extends StatelessWidget {
),
),
Padding
(
Padding
(
padding:
const
EdgeInsets
.
all
(
8.0
),
padding:
const
EdgeInsets
.
all
(
8.0
),
child:
new
OutlineButton
(
child:
new
Outline
d
Button
(
onPressed:
()
{
onPressed:
()
{
Navigator
.
of
(
context
)?.
pushNamed
(
"subscribeMessage"
);
Navigator
.
of
(
context
)?.
pushNamed
(
"subscribeMessage"
);
},
},
...
@@ -166,7 +166,7 @@ class ShareSelectorPage extends StatelessWidget {
...
@@ -166,7 +166,7 @@ class ShareSelectorPage extends StatelessWidget {
),
),
Padding
(
Padding
(
padding:
const
EdgeInsets
.
all
(
8.0
),
padding:
const
EdgeInsets
.
all
(
8.0
),
child:
new
OutlineButton
(
child:
new
Outline
d
Button
(
onPressed:
()
{
onPressed:
()
{
Navigator
.
of
(
context
)?.
pushNamed
(
"AuthByQRCode"
);
Navigator
.
of
(
context
)?.
pushNamed
(
"AuthByQRCode"
);
},
},
...
@@ -174,7 +174,7 @@ class ShareSelectorPage extends StatelessWidget {
...
@@ -174,7 +174,7 @@ class ShareSelectorPage extends StatelessWidget {
),
),
Padding
(
Padding
(
padding:
const
EdgeInsets
.
all
(
8.0
),
padding:
const
EdgeInsets
.
all
(
8.0
),
child:
new
OutlineButton
(
child:
new
Outline
d
Button
(
onPressed:
()
{
onPressed:
()
{
Navigator
.
of
(
context
)?.
pushNamed
(
"AutoDeduct"
);
Navigator
.
of
(
context
)?.
pushNamed
(
"AutoDeduct"
);
},
},
...
@@ -182,7 +182,7 @@ class ShareSelectorPage extends StatelessWidget {
...
@@ -182,7 +182,7 @@ class ShareSelectorPage extends StatelessWidget {
),
),
Padding
(
Padding
(
padding:
const
EdgeInsets
.
all
(
8.0
),
padding:
const
EdgeInsets
.
all
(
8.0
),
child:
new
OutlineButton
(
child:
new
Outline
d
Button
(
onPressed:
()
{
onPressed:
()
{
openWeChatApp
();
openWeChatApp
();
},
},
...
...
ios/Classes/WXApi.h
deleted
100644 → 0
浏览文件 @
3ce7dd84
//
// WXApi.h
// 所有Api接口
//
// Created by Wechat on 12-2-28.
// Copyright (c) 2012年 Tencent. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "WXApiObject.h"
NS_ASSUME_NONNULL_BEGIN
#pragma mark - WXApiDelegate
/*! @brief 接收并处理来自微信终端程序的事件消息
*
* 接收并处理来自微信终端程序的事件消息,期间微信界面会切换到第三方应用程序。
* WXApiDelegate 会在handleOpenURL:delegate:中使用并触发。
*/
@protocol
WXApiDelegate
<
NSObject
>
@optional
/*! @brief 收到一个来自微信的请求,第三方应用程序处理完后调用sendResp向微信发送结果
*
* 收到一个来自微信的请求,异步处理完成后必须调用sendResp发送处理结果给微信。
* 可能收到的请求有GetMessageFromWXReq、ShowMessageFromWXReq等。
* @param req 具体请求内容,是自动释放的
*/
-
(
void
)
onReq
:
(
BaseReq
*
)
req
;
/*! @brief 发送一个sendReq后,收到微信的回应
*
* 收到一个来自微信的处理结果。调用一次sendReq后会收到onResp。
* 可能收到的处理结果有SendMessageToWXResp、SendAuthResp等。
* @param resp具体的回应内容,是自动释放的
*/
-
(
void
)
onResp
:(
BaseResp
*
)
resp
;
@end
#pragma mark - WXApiLogDelegate
@protocol
WXApiLogDelegate
<
NSObject
>
-
(
void
)
onLog
:
(
NSString
*
)
log
logLevel
:
(
WXLogLevel
)
level
;
@end
#pragma mark - WXApi
/*! @brief 微信Api接口函数类
*
* 该类封装了微信终端SDK的所有接口
*/
@interface
WXApi
:
NSObject
/*! @brief WXApi的成员函数,向微信终端程序注册第三方应用。
*
* 需要在每次启动第三方应用程序时调用。
* @attention 请保证在主线程中调用此函数
* @param appid 微信开发者ID
* @param universalLink 微信开发者Universal Link
* @return 成功返回YES,失败返回NO。
*/
+
(
BOOL
)
registerApp
:(
NSString
*
)
appid
universalLink
:(
NSString
*
)
universalLink
;
/*! @brief 处理旧版微信通过URL启动App时传递的数据
*
* 需要在 application:openURL:sourceApplication:annotation:或者application:handleOpenURL中调用。
* @param url 微信启动第三方应用时传递过来的URL
* @param delegate WXApiDelegate对象,用来接收微信触发的消息。
* @return 成功返回YES,失败返回NO。
*/
+
(
BOOL
)
handleOpenURL
:(
NSURL
*
)
url
delegate
:(
nullable
id
<
WXApiDelegate
>
)
delegate
;
/*! @brief 处理微信通过Universal Link启动App时传递的数据
*
* 需要在 application:continueUserActivity:restorationHandler:中调用。
* @param userActivity 微信启动第三方应用时系统API传递过来的userActivity
* @param delegate WXApiDelegate对象,用来接收微信触发的消息。
* @return 成功返回YES,失败返回NO。
*/
+
(
BOOL
)
handleOpenUniversalLink
:(
NSUserActivity
*
)
userActivity
delegate
:(
nullable
id
<
WXApiDelegate
>
)
delegate
;
/*! @brief 检查微信是否已被用户安装
*
* @return 微信已安装返回YES,未安装返回NO。
*/
+
(
BOOL
)
isWXAppInstalled
;
/*! @brief 判断当前微信的版本是否支持OpenApi
*
* @return 支持返回YES,不支持返回NO。
*/
+
(
BOOL
)
isWXAppSupportApi
;
/*! @brief 判断当前微信的版本是否支持分享微信状态功能
*
* @attention 需在工程LSApplicationQueriesSchemes配置中添加weixinStateAPI
* @return 支持返回YES,不支持返回NO。
*/
+
(
BOOL
)
isWXAppSupportStateAPI
;
/*! @brief 获取微信的itunes安装地址
*
* @return 微信的安装地址字符串。
*/
+
(
NSString
*
)
getWXAppInstallUrl
;
/*! @brief 获取当前微信SDK的版本号
*
* @return 返回当前微信SDK的版本号
*/
+
(
NSString
*
)
getApiVersion
;
/*! @brief 打开微信
*
* @return 成功返回YES,失败返回NO。
*/
+
(
BOOL
)
openWXApp
;
/*! @brief 发送请求到微信,等待微信返回onResp
*
* 函数调用后,会切换到微信的界面。第三方应用程序等待微信返回onResp。微信在异步处理完成后一定会调用onResp。支持以下类型
* SendAuthReq、SendMessageToWXReq、PayReq等。
* @param req 具体的发送请求。
* @param completion 调用结果回调block
*/
+
(
void
)
sendReq
:(
BaseReq
*
)
req
completion
:(
void
(
^
__nullable
)(
BOOL
success
))
completion
;
/*! @brief 收到微信onReq的请求,发送对应的应答给微信,并切换到微信界面
*
* 函数调用后,会切换到微信的界面。第三方应用程序收到微信onReq的请求,异步处理该请求,完成后必须调用该函数。可能发送的相应有
* GetMessageFromWXResp、ShowMessageFromWXResp等。
* @param resp 具体的应答内容
* @param completion 调用结果回调block
*/
+
(
void
)
sendResp
:(
BaseResp
*
)
resp
completion
:(
void
(
^
__nullable
)(
BOOL
success
))
completion
;
/*! @brief 发送Auth请求到微信,支持用户没安装微信,等待微信返回onResp
*
* 函数调用后,会切换到微信的界面。第三方应用程序等待微信返回onResp。微信在异步处理完成后一定会调用onResp。支持SendAuthReq类型。
* @param req 具体的发送请求。
* @param viewController 当前界面对象。
* @param delegate WXApiDelegate对象,用来接收微信触发的消息。
* @param completion 调用结果回调block
*/
+
(
void
)
sendAuthReq
:(
SendAuthReq
*
)
req
viewController
:(
UIViewController
*
)
viewController
delegate
:(
nullable
id
<
WXApiDelegate
>
)
delegate
completion
:(
void
(
^
__nullable
)(
BOOL
success
))
completion
;
/*! @brief 测试函数,用于排查当前App通过Universal Link方式分享到微信的流程
注意1: 调用自检函数之前必须要先调用registerApp:universalLink接口, 并确认调用成功
注意2: 自检过程中会有Log产生,可以先调用startLogByLevel函数,根据Log排查问题
注意3: 会多次回调block
注意4: 仅用于新接入SDK时调试使用,请勿在正式环境的调用
*
* 当completion回调的step为WXULCheckStepFinal时,表示检测通过,Universal Link接入成功
* @param completion 回调Block
*/
+
(
void
)
checkUniversalLinkReady
:(
nonnull
WXCheckULCompletion
)
completion
;
/*! @brief WXApi的成员函数,接受微信的log信息。byBlock
注意1:SDK会强引用这个block,注意不要导致内存泄漏,注意不要导致内存泄漏
注意2:调用过一次startLog by block之后,如果再调用一次任意方式的startLoad,会释放上一次logBlock,不再回调上一个logBlock
*
* @param level 打印log的级别
* @param logBlock 打印log的回调block
*/
+
(
void
)
startLogByLevel
:(
WXLogLevel
)
level
logBlock
:(
WXLogBolock
)
logBlock
;
/*! @brief WXApi的成员函数,接受微信的log信息。byDelegate
注意1:sdk会弱引用这个delegate,这里可加任意对象为代理,不需要与WXApiDelegate同一个对象
注意2:调用过一次startLog by delegate之后,再调用一次任意方式的startLoad,不会再回调上一个logDelegate对象
* @param level 打印log的级别
* @param logDelegate 打印log的回调代理,
*/
+
(
void
)
startLogByLevel
:(
WXLogLevel
)
level
logDelegate
:(
id
<
WXApiLogDelegate
>
)
logDelegate
;
/*! @brief 停止打印log,会清理block或者delegate为空,释放block
* @param
*/
+
(
void
)
stopLog
;
@end
NS_ASSUME_NONNULL_END
ios/Classes/WXApiObject.h
deleted
100644 → 0
浏览文件 @
3ce7dd84
差异被折叠。
点击展开。
ios/Classes/WechatAuthSDK.h
deleted
100644 → 0
浏览文件 @
3ce7dd84
//
// WechatAuthSDK.h
// WechatAuthSDK
//
// Created by 李凯 on 13-11-29.
// Copyright (c) 2013年 Tencent. All rights reserved.
//
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
NS_ASSUME_NONNULL_BEGIN
enum
AuthErrCode
{
WechatAuth_Err_Ok
=
0
,
//Auth成功
WechatAuth_Err_NormalErr
=
-
1
,
//普通错误
WechatAuth_Err_NetworkErr
=
-
2
,
//网络错误
WechatAuth_Err_GetQrcodeFailed
=
-
3
,
//获取二维码失败
WechatAuth_Err_Cancel
=
-
4
,
//用户取消授权
WechatAuth_Err_Timeout
=
-
5
,
//超时
};
@protocol
WechatAuthAPIDelegate
<
NSObject
>
@optional
-
(
void
)
onAuthGotQrcode
:
(
UIImage
*
)
image
;
//得到二维码
-
(
void
)
onQrcodeScanned
;
//二维码被扫描
-
(
void
)
onAuthFinish
:(
int
)
errCode
AuthCode
:(
nullable
NSString
*
)
authCode
;
//成功登录
@end
@interface
WechatAuthSDK
:
NSObject
{
NSString
*
_sdkVersion
;
__weak
id
<
WechatAuthAPIDelegate
>
_delegate
;
}
@property
(
nonatomic
,
weak
,
nullable
)
id
<
WechatAuthAPIDelegate
>
delegate
;
@property
(
nonatomic
,
readonly
)
NSString
*
sdkVersion
;
//authSDK版本号
/*! @brief 发送登录请求,等待WechatAuthAPIDelegate回调
*
* @param appId 微信开发者ID
* @param nonceStr 一个随机的尽量不重复的字符串,用来使得每次的signature不同
* @param timeStamp 时间戳
* @param scope 应用授权作用域,拥有多个作用域用逗号(,)分隔
* @param signature 签名
* @param schemeData 会在扫码后拼在scheme后
* @return 成功返回YES,失败返回NO
注:该实现只保证同时只有一个Auth在运行,Auth未完成或未Stop再次调用Auth接口时会返回NO。
*/
-
(
BOOL
)
Auth
:(
NSString
*
)
appId
nonceStr
:(
NSString
*
)
nonceStr
timeStamp
:(
NSString
*
)
timeStamp
scope
:(
NSString
*
)
scope
signature
:(
NSString
*
)
signature
schemeData
:(
nullable
NSString
*
)
schemeData
;
/*! @brief 暂停登录请求
*
* @return 成功返回YES,失败返回NO。
*/
-
(
BOOL
)
StopAuth
;
@end
NS_ASSUME_NONNULL_END
ios/fluwx.podspec
浏览文件 @
d761a782
...
@@ -18,6 +18,7 @@ A new Flutter plugin for Wechat SDK.
...
@@ -18,6 +18,7 @@ A new Flutter plugin for Wechat SDK.
s
.
static_framework
=
true
s
.
static_framework
=
true
s
.
dependency
'Flutter'
s
.
dependency
'Flutter'
# s.dependency 'WechatOpenSDK', '1.8.7.1'
# s.dependency 'WechatOpenSDK', '1.8.7.1'
s
.
dependency
'WechatOpenSDK_Fuck'
,
'~> 1.9.2'
# s.dependency 'OpenWeChatSDK','~> 1.8.3+10'
# s.dependency 'OpenWeChatSDK','~> 1.8.3+10'
# s.xcconfig = { 'HEADER_SEARCH_PATHS' => "${PODS_ROOT}/Headers/Public/#{s.name}" }
# s.xcconfig = { 'HEADER_SEARCH_PATHS' => "${PODS_ROOT}/Headers/Public/#{s.name}" }
...
...
ios/libWeChatSDK.a
deleted
100644 → 0
浏览文件 @
3ce7dd84
File deleted
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论