Tigase Muc报文流程

本文详述了使用Tigase即时通讯(IM)服务器进行多用户聊天室(MUC)的操作流程,包括查询聊天室、创建聊天室、客户端交互及用户屏蔽等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 查询当前聊天室

      <iq to="muc.teemo.com" id="klk5b-401" type="get">
          <query xmlns="http://jabber.org/protocol/disco#items"/>
      </iq>
    

    服务器返回报文

      <iq xmlns="jabber:client" to="bbb@teemo.com/DESKTOP-S0OC5N3" from="muc.teemo.com" type="result" id="klk5b-425">
          <query xmlns="http://jabber.org/protocol/disco#items">
              <item name="aaa" jid="aaa@muc.teemo.com"/>
              <item name="bbb" jid="bbb@muc.teemo.com"/>
          </query>
      </iq>
    
  • 创建聊天室

     <iq to="groupname@muc.teemo.com" id="klk5b-526" type="get">
         <query xmlns="http://jabber.org/protocol/disco#info"/>
     </iq>
    

    服务器返回

     <iq xmlns="jabber:client" to="bbb@teemo.com/DESKTOP-S0OC5N3" from="groupname@muc.teemo.com" type="error" id="klk5b-528">
         <query xmlns="http://jabber.org/protocol/disco#info"/>
             <error code="404" type="cancel">
                 <item-not-found xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/>
             </error>
     </iq>
    

    客服端发送

     <presence to="groupname@muc.teemo.com/bbb" id="klk5b-530">
         <x xmlns="http://jabber.org/protocol/muc"/>
         <c xmlns="http://jabber.org/protocol/caps" hash="sha-1" node="http://www.igniterealtime.org/projects/smack" ver="TJuVIXqTCVfJSthaPu4MtTbaf9A="/>
     </presence>
    

    服务器返回

     <presence to="bbb@teemo.com/DESKTOP-S0OC5N3" xmlns="jabber:client" from="groupname@muc.teemo.com/bbb" id="klk5b-530">
         <c xmlns="http://jabber.org/protocol/caps" hash="sha-1" node="http://www.igniterealtime.org/projects/smack" ver="TJuVIXqTCVfJSthaPu4MtTbaf9A="/>
         <x xmlns="http://jabber.org/protocol/muc#user"><item affiliation="owner" role="moderator" nick="bbb" jid="bbb@teemo.com/DESKTOP-S0OC5N3"/>
             <status code="110"/>
             <status code="201"/>
         </x>
     </presence>
    

    服务器返回

     <message to="bbb@teemo.com/DESKTOP-S0OC5N3" xmlns="jabber:client" from="groupname@muc.teemo.com/bbb" type="groupchat" id="c46dd0b712a678f2335c7976f7b657fe3367783e">
         <subject/>
         <delay xmlns="urn:xmpp:delay" stamp="2018-06-25T06:25:25Z" jid="groupname@muc.teemo.com/bbb"/>
         <x xmlns="jabber:x:delay" stamp="20180625T06:25:25"/>
         <req id="263" xmlns="jabber:client"/>
     </message>
    

    服务器返回

     <message xmlns="jabber:client" to="bbb@teemo.com/DESKTOP-S0OC5N3" from="groupname@muc.teemo.com" type="groupchat">
         <body>Room is locked. Please configure.</body>
         <req id="264" xmlns="jabber:client"/>
     </message>
    

    服务器返回

     <message xmlns="jabber:client" to="bbb@teemo.com/DESKTOP-S0OC5N3" from="groupname@muc.teemo.com" type="groupchat">
         <body>Welcome! You created new Multi User Chat Room. Room is locked now. Configure it please!</body>
         <req id="265" xmlns="jabber:client"/>
     </message>
    

    客户端发送

     <iq to="groupname@muc.teemo.com" id="klk5b-535" type="get">
         <query xmlns="http://jabber.org/protocol/muc#owner"/>
     </iq>
    

    服务器返回

     <iq to="bbb@teemo.com/DESKTOP-S0OC5N3" xmlns="jabber:client" from="groupname@muc.teemo.com" type="result" id="klk5b-535"><query xmlns="http://jabber.org/protocol/muc#owner">
         <x xmlns="jabber:x:data" type="form">
         <field label="Natural-Language Room Name" type="text-single" var="muc#roomconfig_roomname">
             <value></value>
         </field>
         <field label="Short Description of Room" type="text-single" var="muc#roomconfig_roomdesc">
             <value></value>
         </field>
         <field label="Make Room Persistent?" type="boolean" var="muc#roomconfig_persistentroom">
             <value>0</value>
         </field>
         <field label="Make Room Publicly Searchable?" type="boolean" var="muc#roomconfig_publicroom">
             <value>1</value>
         </field>
         <field label="Make Room Moderated?" type="boolean" var="muc#roomconfig_moderatedroom">
             <value>0</value>
         </field>
         <field label="Make Room Members Only?" type="boolean" var="muc#roomconfig_membersonly">
             <value>0</value>
         </field>
         <field label="Allow Occupants to Invite Others?" type="boolean" var="muc#roomconfig_allowinvites">
             <value>1</value>
         </field>
         <field label="Password Required to Enter?" type="boolean" var="muc#roomconfig_passwordprotectedroom">
             <value>0</value>
         </field>
         <field label="Password" type="text-single" var="muc#roomconfig_roomsecret">
             <value></value>
         </field>
         <field label="Room anonymity level:" type="list-single" var="muc#roomconfig_anonymity">
             <value>semianonymous</value>
             <option label="Non-Anonymous Room">
                 <value>nonanonymous</value>
             </option>
             <option label="Semi-Anonymous Room">
                 <value>semianonymous</value>
             </option>
             <option label="Fully-Anonymous Room">
                 <value>fullanonymous</value>
             </option>
         </field>
         <field label="Allow Occupants to Change Subject?" type="boolean" var="muc#roomconfig_changesubject">
             <value>0</value>
         </field>
         <field label="Enable Public Logging?" type="boolean" var="muc#roomconfig_enablelogging">
             <value>0</value>
         </field>
         <field label="Logging format:" type="list-single" var="logging_format">
             <value>html</value>
             <option label="HTML">
                 <value>html</value>
             </option>
             <option label="Plain text">
                 <value>plain</value>
             </option>
         </field>
         <field label="Maximum Number of History Messages Returned by Room" type="text-single" var="muc#maxhistoryfetch">
             <value>50</value>
         </field>
         <field label="Maximum Number of Occupants" type="list-single" var="muc#roomconfig_maxusers">
             <value></value>
             <option label="10">
                 <value>10</value>
             </option>
             <option label="20">
                 <value>20</value>
             </option>
             <option label="30">
                 <value>30</value>
             </option>
             <option label="50">
                 <value>50</value>
             </option>
             <option label="100">
                 <value>100</value>
             </option>
             <option label="None">
                 <value/>
             </option>
         </field>
         <field label="Presence delivery logic" type="list-single" var="tigase#presence_delivery_logic">
             <value>PREFERE_PRIORITY</value>
             <option label="PREFERE_LAST">
                 <value>PREFERE_LAST</value>
             </option>
             <option label="PREFERE_PRIORITY">
                 <value>PREFERE_PRIORITY</value>
             </option>
         </field>
         <field label="Enable filtering of presence (broadcasting presence only between selected groups" type="boolean" var="tigase#presence_filtering">
             <value>0</value>
         </field>
         <field label="Affiliations for which presence should be delivered" type="list-multi" var="tigase#presence_filtered_affiliations">
             <option label="admin">
                 <value>admin</value>
             </option>
             <option label="member">
                 <value>member</value>
             </option>
             <option label="none">
                 <value>none</value>
             </option>
             <option label="outcast">
                 <value>outcast</value>
             </option>
             <option label="owner">
                 <value>owner</value>
             </option>
         </field>
         <field label="Send welcome messages on room creation" type="boolean" var="tigase#welcome_messages">
             <value>1</value>
         </field>
         <field label="Full List of Room Admins" type="jid-multi" var="muc#roomconfig_roomadmins"/>
         </x>
         </query>
         </iq>
    
     客户端发送
     
         <iq to="groupname@muc.teemo.com" id="klk5b-679" type="set">
         <query xmlns="http://jabber.org/protocol/muc#owner">
             <x xmlns="jabber:x:data" type="submit">
                 <field type="text-single" var="muc#roomconfig_roomname">
                     <value>1111111</value>
                 </field>
                 <field type="text-single" var="muc#roomconfig_roomdesc">
                     <value>222222222</value>
                 </field>
                 <field type="boolean" var="muc#roomconfig_persistentroom">
                     <value>1</value>
                 </field>
                 <field type="boolean" var="muc#roomconfig_publicroom">
                     <value>1</value>
                 </field>
                 <field type="boolean" var="muc#roomconfig_moderatedroom">
                     <value>0</value>
                 </field>
                 <field type="boolean" var="muc#roomconfig_membersonly">
                     <value>0</value>
                 </field>
                 <field type="boolean" var="muc#roomconfig_allowinvites">
                     <value>1</value>
                 </field>
                 <field type="boolean" var="muc#roomconfig_passwordprotectedroom"><value>0</value></field>
                 <field type="text-single" var="muc#roomconfig_roomsecret">
                     <value/>
                 </field>
                 <field type="list-single" var="muc#roomconfig_anonymity">
                     <value>semianonymous</value>
                 </field>
                 <field type="boolean" var="muc#roomconfig_changesubject">
                     <value>0</value>
                 </field>
                 <field type="boolean" var="muc#roomconfig_enablelogging">
                     <value>0</value>
                 </field>
                 <field type="list-single" var="logging_format">
                     <value>html</value>
                 </field>
                 <field type="text-single" var="muc#maxhistoryfetch">
                     <value>50</value>
                 </field>
                 <field type="list-single" var="muc#roomconfig_maxusers">
                     <value/>
                 </field>
                 <field type="list-single" var="tigase#presence_delivery_logic">
                     <value>PREFERE_PRIORITY</value>
                 </field>
                 <field type="boolean" var="tigase#presence_filtering">
                     <value>0</value>
                 </field>
                 <field type="boolean" var="tigase#welcome_messages">
                     <value>1</value>
                 </field>
                 <field type="jid-multi" var="muc#roomconfig_roomadmins">
                     <value>你来了。</value>
                 </field>
             </x>
         </query>
         </iq>
    

    屏蔽用户

     <iq to="groupname@muc.teemo.com" id="klk5b-767" type="set">
         <query xmlns="http://jabber.org/protocol/muc#admin">
             <item affiliation="outcast" jid="aaa@teemo.com">
                 <reason>你被此聊天室屏蔽了。</reason>
             </item>
         </query>
     </iq>
    
来自官网,更新于201704。官网在国外很难下载,现在放到这里方便国内的朋友下载研究。 F:..gitignore │ build.gradle │ gradle.properties │ gradlew │ gradlew.bat │ settings.gradle │ tigase_dir.txt │ ├─.git │ │ config │ │ description │ │ HEAD │ │ index │ │ packed-refs │ │ │ ├─hooks │ │ applypatch-msg.sample │ │ commit-msg.sample │ │ post-update.sample │ │ pre-applypatch.sample │ │ pre-commit.sample │ │ pre-push.sample │ │ pre-rebase.sample │ │ pre-receive.sample │ │ prepare-commit-msg.sample │ │ update.sample │ │ │ ├─info │ │ exclude │ │ │ ├─logs │ │ │ HEAD │ │ │ │ │ └─refs │ │ ├─heads │ │ │ master │ │ │ │ │ └─remotes │ │ └─origin │ │ HEAD │ │ │ ├─objects │ │ ├─info │ │ └─pack │ │ pack-a5985fcf6d3d54c95897e6cf9f133139e5ee10c1.idx │ │ pack-a5985fcf6d3d54c95897e6cf9f133139e5ee10c1.pack │ │ │ └─refs │ ├─heads │ │ master │ │ │ ├─remotes │ │ └─origin │ │ HEAD │ │ │ └─tags ├─app │ │ .gitignore │ │ build.gradle │ │ proguard-rules.pro │ │ │ └─src │ ├─androidTest │ │ └─java │ │ └─org │ │ └─tigase │ │ └─messenger │ │ └─phone │ │ └─pro │ │ ApplicationTest.java │ │ │ ├─main │ │ │ AndroidManifest.xml │ │ │ │ │ ├─java │ │ │ └─org │ │ │ └─tigase │ │ │ └─messenger │ │ │ ├─jaxmpp │ │ │ │ └─android │ │ │ │ ├─caps │ │ │ │ │ CapabilitiesDBCache.java │ │ │ │ │ CapsDbHelper.java │ │ │ │ │ │ │ │ │ ├─chat │ │ │ │ │ AndroidChatManager.java │ │ │ │ │ ChatProvider.java │ │ │ │ │ MarkAsRead.java │ │ │ │ │ OpenChatDbHelper.java │ │ │ │ │ │ │ │ │ ├─muc │ │ │ │ │ AndroidRoomsManager.java │ │ │ │ │ │ │ │ │ └─roster │ │ │ │ AndroidRosterStore.java │ │ │ │ RosterDbHelper.java │ │ │ │ RosterProvider.java │ │ │ │ │ │ │ └─phone │ │ │ └─pro │ │ │ │ AboutActivity.java │ │ │ │ DividerItemDecoration.java │ │ │ │ MainActivity.java │ │ │ │ MessengerApplication.java │ │ │ │ StatusSelectorAdapter.java │ │ │ │ │ │ │ ├─account │ │ │ │ AccountsConstants.java │ │ │ │ Authenticator.java │ │ │ │ AuthenticatorService.java │ │ │ │ ConnectionChecker.java │ │ │ │ LoginActivity.java │ │ │ │ NewAccountActivity.java │ │ │ │ │ │ │ ├─conenctionStatus │ │ │ │ ConnectionStatusesFragment.java │ │ │ │ StatusesRecyclerViewAdapter.java │ │ │ │ ViewHolder.java │ │ │ │ │ │ │ ├─conversations │ │ │ │ │ AbstractConversationActivity.java │ │ │ │ │ │ │ │ │ ├─chat │ │ │ │ │ ChatActivity.java │ │ │ │ │ ChatItemFragment.java │ │ │ │ │ MyChatItemRecyclerViewAdapter.java │ │ │ │ │ ViewHolder.java │ │ │ │ │ │ │ │ │ └─muc │ │ │ │ JoinMucActivity.java │ │ │ │ MucActivity.java │ │ │ │ MucItemFragment.java │ │ │ │ MucItemRecyclerViewAdapter.java │ │ │ │ ViewHolder.java │ │ │ │ │ │ │ ├─db │ │ │ │ CPresence.java │ │ │ │ CursorRecyclerViewAdapter.java │ │ │ │ DatabaseContract.java │ │ │ │ DatabaseHelper.java │ │ │ │ RosterProviderExt.java │ │ │ │ │ │ │ ├─notifications │ │ │ │ MessageNotification.java │ │ │ │ │ │ │ ├─openchats │ │ │ │ MyOpenChatItemRecyclerViewAdapter.java │ │ │ │ OpenChatItemFragment.java │ │ │ │ ViewHolder.java │ │ │ │ │ │ │ ├─providers │ │ │ │ ChatProvider.java │ │ │ │ RosterProvider.java │ │ │ │ │ │ │ ├─roster │ │ │ │ │ MyRosterItemRecyclerViewAdapter.java │ │ │ │ │ PresenceIconMapper.java │ │ │ │ │ RosterItemFragment.java │ │ │ │ │ ViewHolder.java │ │ │ │ │ │ │ │ │ ├─contact │ │ │ │ │ EditContactActivity.java │ │ │ │ │ │ │ │ │ └─request │ │ │ │ SubscriptionRequestActivity.java │ │ │ │ │ │ │ ├─service │ │ │ │ AndroidLoggingHandler.java │ │ │ │ AutopresenceManager.java │ │ │ │ DataRemover.java │ │ │ │ Features.java │ │ │ │ MobileModeFeature.java │ │ │ │ SecureTrustManagerFactory.java │ │ │ │ ServiceRestarter.java │ │ │ │ StanzaExecutor.java │ │ │ │ XMPPService.java │ │ │ │ │ │ │ ├─settings │ │ │ │ AppCompatPreferenceActivity.java │ │ │ │ SettingsActivity.java │ │ │ │ │ │ │ └─utils │ │ │ AsyncDrawable.java │ │ │ AvatarHelper.java │ │ │ BitmapWorkerTask.java │ │ │ DiskLruCache.java │ │ │ ImageHelper.java │ │ │ │ │ └─res │ │ ├─drawable │ │ │ ic_accounts_24dp.xml │ │ │ ic_add.xml │ │ │ ic_add_chat_24dp.xml │ │ │ ic_connection_info_24dp.xml │ │ │ ic_groupchat_24dp.xml │ │ │ ic_menu_about.xml │ │ │ ic_menu_chats.xml │ │ │ ic_menu_roster.xml │ │ │ ic_menu_settings.xml │ │ │ ic_message_delivered_24dp.xml │ │ │ ic_message_not_sent_24dp.xml │ │ │ ic_message_sent_24dp.xml │ │ │ ic_messenger_icon.xml │ │ │ ic_muc_24dp.xml │ │ │ ic_send_24dp.xml │ │ │ message_bubble_error.9.png │ │ │ message_bubble_received.9.png │ │ │ message_bubble_received_4.9.png │ │ │ message_bubble_sent.9.png │ │ │ message_bubble_sent_1.9.png │ │ │ message_bubble_sysmsg.9.png │ │ │ presence_away.xml │ │ │ presence_chat.xml │ │ │ presence_dnd.xml │ │ │ presence_error.xml │ │ │ presence_offline.xml │ │ │ presence_online.xml │ │ │ presence_unknown.xml │ │ │ presence_xa.xml │ │ │ side_nav_bar.xml │ │ │ user_avatar.png │ │ │ │ │ ├─drawable-hdpi │ │ │ ic_info_black_24dp.png │ │ │ ic_launcher.png │ │ │ ic_notifications_black_24dp.png │ │ │ ic_sync_black_24dp.png │ │ │ │ │ ├─drawable-mdpi │ │ │ ic_info_black_24dp.png │ │ │ ic_launcher.png │ │ │ ic_notifications_black_24dp.png │ │ │ ic_sync_black_24dp.png │ │ │ │ │ ├─drawable-v21 │ │ │ ic_info_black_24dp.xml │ │ │ ic_notifications_black_24dp.xml │ │ │ ic_sync_black_24dp.xml │ │ │ │ │ ├─drawable-xhdpi │ │ │ ic_info_black_24dp.png │ │ │ ic_launcher.png │ │ │ ic_notifications_black_24dp.png │ │ │ ic_sync_black_24dp.png │ │ │ │ │ ├─drawable-xxhdpi │ │ │ ic_info_black_24dp.png │ │ │ ic_launcher.png │ │ │ ic_notifications_black_24dp.png │ │ │ ic_sync_black_24dp.png │ │ │ │ │ ├─drawable-xxxhdpi │ │ │ ic_info_black_24dp.png │ │ │ ic_launcher.png │ │ │ ic_notifications_black_24dp.png │ │ │ ic_sync_black_24dp.png │ │ │ │ │ ├─layout │ │ │ account_list_item.xml │ │ │ activity_about.xml │ │ │ activity_chat.xml │ │ │ activity_edit_contact.xml │ │ │ activity_join_muc.xml │ │ │ activity_login.xml │ │ │ activity_main.xml │ │ │ activity_muc.xml │ │ │ activity_new_account.xml │ │ │ activity_subscription_request.xml │ │ │ app_bar_main.xml │ │ │ content_chat.xml │ │ │ content_main.xml │ │ │ content_muc.xml │ │ │ fragment_chatitem_error.xml │ │ │ fragment_chatitem_list.xml │ │ │ fragment_chatitem_received.xml │ │ │ fragment_chatitem_sent.xml │ │ │ fragment_chatitem_sysmsg.xml │ │ │ fragment_connectionstatusitem.xml │ │ │ fragment_connectionstatus_list.xml │ │ │ fragment_groupchatitem_received.xml │ │ │ fragment_groupchatitem_sent.xml │ │ │ fragment_mucitem_list.xml │ │ │ fragment_openchatitem.xml │ │ │ fragment_openchatitem_list.xml │ │ │ fragment_rosteritem.xml │ │ │ fragment_rosteritem_list.xml │ │ │ nav_header_main.xml │ │ │ status_selectoritem.xml │ │ │ │ │ ├─menu │ │ │ activity_main_drawer.xml │ │ │ chatitem_context.xml │ │ │ connection_status_context.xml │ │ │ main.xml │ │ │ menu_chat.xml │ │ │ openchat_chat_context.xml │ │ │ openchat_fragment.xml │ │ │ openchat_groupchat_context.xml │ │ │ roster_context.xml │ │ │ roster_fragment.xml │ │ │ │ │ ├─mipmap-xhdpi │ │ │ ic_launcher.png │ │ │ │ │ ├─mipmap-xxhdpi │ │ │ ic_launcher.png │ │ │ │ │ ├─mipmap-xxxhdpi │ │ │ ic_launcher.png │ │ │ │ │ ├─raw │ │ │ trust_store_bks │ │ │ │ │ ├─values │ │ │ attrs.xml │ │ │ colors.xml │ │ │ dimens.xml │ │ │ strings.xml │ │ │ styles.xml │ │ │ │ │ ├─values-v21 │ │ │ styles.xml │ │ │ │ │ ├─values-w820dp │ │ │ dimens.xml │ │ │ │ │ └─xml │ │ account_preferences.xml │ │ authenticator.xml │ │ pref_accounts_list.xml │ │ pref_data_sync.xml │ │ pref_general.xml │ │ pref_headers.xml │ │ pref_notification.xml │ │ │ └─test │ └─java │ └─org │ └─tigase │ └─messenger │ └─phone │ └─pro │ ExampleUnitTest.java │ ├─documentation │ │ build.gradle │ │ │ └─src │ └─asciidoc │ │ index.asciidoc │ │ │ ├─css │ │ docbook-xsl.css │ │ │ ├─images │ │ Accounts.png │ │ ArchiveChat.png │ │ General.png │ │ JoinChat.png │ │ LeaveRoom.png │ │ Menu.png │ │ MUC.png │ │ Notifications.png │ │ Options.png │ │ Register.png │ │ Roster.png │ │ Screenshot_2015-04-26-13-38-30.png │ │ Screenshot_2015-04-26-13-38-46.png │ │ Screenshot_2015-04-26-13-40-14.png │ │ Screenshot_2015-04-26-13-40-53.png │ │ Screenshot_2015-04-26-13-41-20.png │ │ Screenshot_2015-04-26-13-41-42.png │ │ Screenshot_2015-04-26-13-42-20.png │ │ Screenshot_2015-04-26-13-43-54.png │ │ Screenshot_2015-04-26-14-00-37.png │ │ Screenshot_2015-04-26-14-00-49.png │ │ Screenshot_2015-04-26-14-00-56.png │ │ Screenshot_2015-04-26-14-01-13.png │ │ Screenshot_2015-04-26-14-01-23.png │ │ Screenshot_2015-04-26-14-01-31.png │ │ Screenshot_2015-04-26-14-01-50.png │ │ Screenshot_2015-04-26-14-02-01.png │ │ Screenshot_2015-04-26-14-02-36.png │ │ Screenshot_2015-04-26-14-03-06.png │ │ Screenshot_2015-04-26-14-03-16.png │ │ Screenshot_2015-04-26-14-04-35.png │ │ Screenshot_2015-04-26-14-05-35.png │ │ Screenshot_2015-04-26-14-06-03.png │ │ Screenshot_2015-04-26-14-07-03.png │ │ Screenshot_2015-04-26-14-07-11.png │ │ Screenshot_2015-04-26-14-08-09.png │ │ Screenshot_2015-04-26-14-09-31.png │ │ Screenshot_2015-04-26-14-15-35.png │ │ Screenshot_2015-04-26-14-18-03.png │ │ Status.png │ │ tiger-looking-left-small.png │ │ Welcome.png │ │ │ └─text │ Tigase_Tigase_Android_Messenger-General_overview.asciidoc │ Tigase_Tigase_Android_Messenger-User_guide.asciidoc │ └─gradle └─wrapper gradle-wrapper.jar gradle-wrapper.properties
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值