微信公众号发送客服消息(文本、图文)和模板消息

壹:客服消息

        微信文档发送客服消息链接:https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=ACCESS_TOKEN

一.根据链接我们需要获取access_token,以下先介绍access_token的获取。

1)获取access_token的链接:https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET

1.这里是基于微信公众号的,所以必须先得自己有一个公众号(没有则在微信文档里申请)。

 

2.由于获取access_token是需要网络请求,下面讲一下https的网络请求。

package com.cxb.accesstoken;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import javax.net.ssl.X509TrustManager;
/**
 * @author ChenXb
 *
 * 2018年4月18日
 *             https的请求安全问题          这里只需要实现该接口即可
 */
public class MyX509TrustManager implements X509TrustManager{


@Override
public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
// TODO Auto-generated method stub

}


@Override
public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
// TODO Auto-generated method stub

}


@Override
public X509Certificate[] getAcceptedIssuers() {
// TODO Auto-generated method stub
return null;
}

}

 

package com.cxb.accesstoken;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.security.NoSuchProviderException;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManager;
/**
 * @author ChenXb
 *
 *         2018年4月18日
 */
public class HttpUtil {
/**
 * httpsRequest https的请求方式
 * 
 * @author 81046
 * @date 2018年4月18日下午3:55:14
 * @param Url
 * @param method
 * @param outStr
 * @return
 */
public static String httpsRequest(String Url, String method, String outStr) {
StringBuffer buffer = null;
try {
SSLContext sslContext = SSLContext.getInstance("SSL", "SunJSSE");
TrustManager[] tm = { new MyX509TrustManager() };
// 初始化
sslContext.init(null, tm, new java.security.SecureRandom());
// 获取sslSocketFactory对象
SSLSocketFactory ssf = sslContext.getSocketFactory();
// 建立连接
URL url = new URL(Url);
HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
conn.setRequestMethod(method);
// 设置当前实例使用sslSocketFactory
conn.setSSLSocketFactory(ssf);
conn.setDoOutput(true);
conn.connect();
// 先写入数据,再读取数据
if (outStr != null) {
OutputStream os = conn.getOutputStream();
os.write(outStr.getBytes("UTF-8"));
os.close();
}
// 读取服务端的内容
InputStream is = conn.getInputStream();
InputStreamReader isr = new InputStreamReader(is, "UTF-8");
BufferedReader br = new BufferedReader(isr);
buffer = new StringBuffer();
String line = null;
while ((line = br.readLine()) != null) {
buffer.append(line);
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (NoSuchProviderException e) {
e.printStackTrace();
} catch (KeyManagementException e) {
e.printStackTrace();
}
return buffer.toString();
}

 

/**
 * httpRequest http的请求方式
 * 
 * @author 81046
 * @date 2018年4月18日下午3:54:45
 * @param Url
 * @return
 */
public static String httpRequest(String Url, String method) {
StringBuffer buffer = null;
try {
// 建立连接
URL url = new URL(Url);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod(method);
conn.setDoOutput(true);
conn.connect();
// 读取服务端的内容
InputStream is = conn.getInputStream();
InputStreamReader isr = new InputStreamReader(is, "UTF-8");
BufferedReader br = new BufferedReader(isr);
buffer = new StringBuffer();
String line = null;
while ((line = br.readLine()) != null) {
buffer.append(line);
}


} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return buffer.toString();
}


public static void main(String[] args) {
String url = "https://www.baidu.com";
String httpsRequest = httpsRequest(url, "GET", null);
System.out.println(httpsRequest);
}

}

 

3.上面简单实现了https的请求,下面则开始获取AccessToken。

package com.cxb.accesstoken;
/**
 * @author ChenXb
 *
 *         2018年4月18日   这个类只是为了将获取的accessToken转为对象而建
 */
public class AccessToken {

private String access_token;
private int expires_in;


public String getAccess_token() {
return access_token;
}


public void setAccess_token(String access_token) {
this.access_token = access_token;
}


public int getExpires_in() {
return expires_in;
}


public void setExpires_in(int expires_in) {
this.expires_in = expires_in;
}


@Override
public String toString() {
return "AccessToken [access_token=" + access_token + ", expires_in=" + expires_in + "]";
}

}

package com.cxb.accesstoken;
import com.google.gson.Gson;
/**
 * @author ChenXb
 *     这里是获取微信的accessToken
 * 2018年4月18日
 */
public class AccessTokenUtil {
public static String url="https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET";

public static String getAccessToken(String APPID,String APPSECRET){
url=url.replaceAll("APPID", APPID).replaceAll("APPSECRET", APPSECRET);
String json = HttpUtil.httpsRequest(url,"GET",null);
Gson gson=new Gson();
AccessToken accessToken = gson.fromJson(json, AccessToken.class);
String access_token = accessToken.getAccess_token();
return access_token;
}

public static void main(String[] args) {
String accessToken = getAccessToken(Account.APPID, Account.APPSECRET);
System.out.println(accessToken);
}

}

 

package com.cxb.accesstoken;
/**
 * @author ChenXb
 *
 * 2018年4月18日
 */
public class Account {
//常量值,为了方便修改而不修改代码
public static final String APPID="wx92a6376d2c2a7172";
public static final String APPSECRET="11c56b1ecc4ebdd2da482dcd03f50368";
public static final String OPENID="oPZTov-EmzLWvIPT5Fao-1QU7-M8";
public static final String TEMPLETEID="fzpznIjhmHBlzSNy4mttsmOCW8qqJUIRvz5aKD8VADs";
}

 

4.以上则完成了accessToken的获取。接下来继续客服消息的实现。因为发送消息都是json数据,接下来将采用java对象来实现json数据的实现。

1)文本消息、图文消息实体类的实现

package com.cxb.wx;
/**
 * @author ChenXb
 *
 *         2018年4月18日
 *                    消息共有的基类
 */
public class Basebean {
private String touser;
private String msgtype;


public String getTouser() {
return touser;
}


public void setTouser(String touser) {
this.touser = touser;
}


public String getMsgtype() {
return msgtype;
}


public void setMsgtype(String msgtype) {
this.msgtype = msgtype;
}
}

 

package com.cxb.wx;
/**
 * @author ChenXb
 *
 * 2018年4月18日
 */
public class Text {
private String content;  //发送的文本内容


public String getContent() {
return content;
}


public void setContent(String content) {
this.content = content;
}


}

 

package com.cxb.wx;
/**
 * @author ChenXb
 *
 * 2018年4月18日
 */
public class TextMesage extends Basebean{

private Text text;


public Text getText() {
return text;
}


public void setText(Text text) {
this.text = text;
}


}

 

***这里是图文的实体类了    思路就是一层一层的解剖,建类,最终融合到一个类里边即可。


 

package com.cxb.wx;


/**
 * @author ChenXb
 *
 *         2018年4月18日    这里是真正的图文消息
 */
public class Articles {
private String title; //标题
private String description;  //描述
private String url;  //该图文的点击跳转链接
private String picurl;  //图片的URL


public String getTitle() {
return title;
}


public void setTitle(String title) {
this.title = title;
}


public String getDescription() {
return description;
}


public void setDescription(String description) {
this.description = description;
}


public String getUrl() {
return url;
}


public void setUrl(String url) {
this.url = url;
}


public String getPicurl() {
return picurl;
}


public void setPicurl(String picurl) {
this.picurl = picurl;
}
}

 

package com.cxb.wx;
import java.util.List;
/**
 * @author ChenXb
 *
 *         2018年4月18日
 */
public class Kfnews{
private List<Articles> articles;


public List<Articles> getArticles() {
return articles;
}


public void setArticles(List<Articles> articles) {
this.articles = articles;
}


}

package com.cxb.wx;
/**
 * @author ChenXb
 *
 *         2018年4月18日   这里就把图文的内容包裹进来了    父类Basebean里面的包括了接收者的openid 和消息类型
 */
public class BaseNews extends Basebean{
private Kfnews news;


public Kfnews getNews() {
return news;
}

 
public void setNews(Kfnews news) {
this.news = news;
}
}

 

5.以上完成了文本和图文信息发送内容的实体类的包裹,接下来开始发送客服消息。

package com.cxb.wx;
import java.util.ArrayList;
import java.util.List;
import com.cxb.accesstoken.AccessTokenUtil;
import com.cxb.accesstoken.Account;
import com.cxb.accesstoken.HttpUtil;
import com.google.gson.Gson;
import net.sf.json.JSONObject;
/**
 * @author ChenXb
 *
 *         2018年4月18日  
 */
public class SendKfMsgManager {
public static void main(String[] args) {
//发送文本消息
String text = getText();
System.out.println(text);
SendMsg(text);

//发送图文消息
String getkfnews = getkfnews(Account.OPENID);
System.out.println(getkfnews);
SendMsg(getkfnews);
}

/**
*          图文消息
* getkfnews
* @author 81046
* @date 2018年4月18日下午3:22:24
* @param openid
* @return
*/
public static String getkfnews(String openid) {
//先实例化图文内容
Articles art1 = new Articles();
art1.setDescription("假如没有热情世界上任何伟大的事业都不会成功那么给我们一个支点用热情去撼动无限的未来吧!");
art1.setPicurl("http://www.joffro.com/Activity/upload/sendImg.jpg");
art1.setTitle("商品防伪溯源大师");
art1.setUrl("http://www.baidu.com");

Articles art2 = new Articles();
art2.setDescription("传统习俗出门赏月、燃灯放焰、喜猜灯谜、共吃元宵、拉兔子灯等。此外,不少地方元宵节还增加了耍龙灯、耍狮子、踩高跷、划旱船、扭秧歌、打太平鼓等传统民俗表演。");
art2.setPicurl("http://www.joffro.com/Activity/upload/hello.jpg");
art2.setTitle("欢度元宵");
art2.setUrl("https://baike.baidu.com/item/%E5%85%83%E5%AE%B5%E8%8A%82/118213?fr=aladdin&fromid=19472310&fromtitle=%E5%85%83%E5%AE%B5");
List<Articles> list = new ArrayList<Articles>();
Kfnews news = new Kfnews();
list.add(art1);
list.add(art2);
news.setArticles(list);


BaseNews kfbean = new BaseNews();
kfbean.setMsgtype("news");
kfbean.setTouser(openid);
kfbean.setNews(news);
//对象转json 方式1
String jsonkfbean = JSONObject.fromObject(kfbean).toString();
System.out.println(jsonkfbean);
//方式2
Gson gson=new Gson();
String json = gson.toJson(kfbean);
System.out.println(json);
return json;
}

/**
* 文本消息
*/
public static String getText(){
TextMesage tm=new TextMesage();
Text t=new Text();
t.setContent("我曾经跨过山和大海,也穿过人山人海!");

tm.setText(t);
tm.setMsgtype("text");
tm.setTouser(Account.OPENID);

//将对象转为json
Gson gson=new Gson();
String json = gson.toJson(tm);
return json;
}

/**
* 发送消息的方法
*/
public static void SendMsg(String json){
//发送消息的url
String url="https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=ACCESS_TOKEN";
String accessToken = AccessTokenUtil.getAccessToken(Account.APPID, Account.APPSECRET);
url = url.replaceAll("ACCESS_TOKEN", accessToken);
String httpsRequest = HttpUtil.httpsRequest(url, "POST", json);
System.out.println("***httpsRequest>"+httpsRequest);
}

}

6.自此客服消息的文本和图文消息发送完毕。效果如图。

 

贰:模板消息,这里就简单一些了,上面的获取accessToken都是通用的。

package com.cxb.wx.Templete;
import com.cxb.accesstoken.AccessTokenUtil;
import com.cxb.accesstoken.Account;
import com.cxb.accesstoken.HttpUtil;
import com.google.gson.Gson;
/**
 * @author ChenXb
 *
 * 2018年4月18日
 */
public class TempleteMananger {
public static void main(String[] args) {
String data = getData();
System.out.println(data);
sendTemplete(data);

}



/**
* 发送模板消息
*/
public static void sendTemplete(String json){
//发送消息的url
String url="https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=ACCESS_TOKEN";
String accessToken = AccessTokenUtil.getAccessToken(Account.APPID, Account.APPSECRET);
url = url.replaceAll("ACCESS_TOKEN", accessToken);
String httpsRequest = HttpUtil.httpsRequest(url, "POST", json);
System.out.println("***httpsRequest>"+httpsRequest);

}



/**
*        要发送的数据整理
* getData
* @author 81046
* @date 2018年4月18日下午5:17:38
* @return
*/
public static String getData(){
First first=new First();
first.setColor("#173177");
first.setValue("向您工资卡发放");

KeyWord1 keyWord1=new KeyWord1();
KeyWord2 keyWord2=new KeyWord2();
KeyWord3 keyWord3=new KeyWord3();
KeyWord4 keyWord4=new KeyWord4();
KeyWord5 keyWord5=new KeyWord5();

keyWord1.setColor("#173177");
keyWord1.setValue("100.00");

keyWord2.setColor("#173177");
keyWord2.setValue("200.00");

keyWord3.setColor("#173177");
keyWord3.setValue("300.00");

keyWord4.setColor("#173177");
keyWord4.setValue("400.00");

keyWord5.setColor("#173177");
keyWord5.setValue("500.00");


Remark remark=new Remark();
remark.setColor("#173177");
remark.setValue("详细情况请登录公司人事查询。");

Data data=new Data();
data.setFirst(first);
data.setKeyWord1(keyWord1);
data.setKeyWord2(keyWord2);
data.setKeyWord3(keyWord3);
data.setKeyWord4(keyWord4);
data.setKeyWord5(keyWord5);
data.setRemark(remark);



//由于是测试账号,所以以上数据都接收不到,这里只是做了实现。以上设计到的实体类下面加上。

Templete templete=new Templete();
templete.setData(data);
templete.setTemplate_id(Account.TEMPLETEID);
templete.setUrl("http://www.baidu.com");
templete.setTouser(Account.OPENID);


Gson gson=new Gson();
String json = gson.toJson(templete);
return json;
}
}

1.模板消息所涉及的实体类,(其实你使用json的拼接,这些实体类完全不用,看自己的需求了)

package com.cxb.wx.Templete;


/**
 * @author ChenXb
 *
 *         2018年4月18日   这是基类
 */
public class BaseTemplete {


private String value;


private String color;


public String getValue() {
return value;
}


public void setValue(String value) {
this.value = value;
}


public String getColor() {
return color;
}


public void setColor(String color) {
this.color = color;
}



}

package com.cxb.wx.Templete;


/**
 * @author ChenXb
 *
 * 2018年4月18日
 */
public class First extends BaseTemplete{



}

package com.cxb.wx.Templete;


/**
 * @author ChenXb
 *
 * 2018年4月18日
 */
public class KeyWord1 extends BaseTemplete{



}

 

//.......省略了KeyWord2  - KeyWord5

//KeyWord2 以及345和KeyWord1一样的,就不贴了。

package com.cxb.wx.Templete;


/**
 * @author ChenXb
 *
 * 2018年4月18日
 */
public class Remark extends BaseTemplete{


}

 

package com.cxb.wx.Templete;
/**
 * @author ChenXb
 *
 *         2018年4月18日     该类就是将keyword和remark整理在一起
 */
public class Data {
private First first;
private KeyWord1 keyWord1;
private KeyWord2 keyWord2;
private KeyWord3 keyWord3;
private KeyWord4 keyWord4;
private KeyWord5 keyWord5;
private Remark remark;


public First getFirst() {
return first;
}


public void setFirst(First first) {
this.first = first;
}


public KeyWord1 getKeyWord1() {
return keyWord1;
}


public void setKeyWord1(KeyWord1 keyWord1) {
this.keyWord1 = keyWord1;
}


public KeyWord2 getKeyWord2() {
return keyWord2;
}


public void setKeyWord2(KeyWord2 keyWord2) {
this.keyWord2 = keyWord2;
}


public KeyWord3 getKeyWord3() {
return keyWord3;
}


public void setKeyWord3(KeyWord3 keyWord3) {
this.keyWord3 = keyWord3;
}


public KeyWord4 getKeyWord4() {
return keyWord4;
}


public void setKeyWord4(KeyWord4 keyWord4) {
this.keyWord4 = keyWord4;
}


public KeyWord5 getKeyWord5() {
return keyWord5;
}


public void setKeyWord5(KeyWord5 keyWord5) {
this.keyWord5 = keyWord5;
}


public Remark getRemark() {
return remark;
}


public void setRemark(Remark remark) {
this.remark = remark;
}



}

package com.cxb.wx.Templete;
/**
 * @author ChenXb
 *                  https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=ACCESS_TOKEN
 * 2018年4月18日
 */
public class Templete {
private String touser;  //接收者的openid
private String template_id;  //模板id
private String url;   //点击该模板的跳转链接
private Data data;  //上面整理的数据
public String getTouser() {
return touser;
}
public void setTouser(String touser) {
this.touser = touser;
}
public String getTemplate_id() {
return template_id;
}
public void setTemplate_id(String template_id) {
this.template_id = template_id;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public Data getData() {
return data;
}
public void setData(Data data) {
this.data = data;
}

}

 

这些消息在自己的测试公众号里面配置即可。

2.自此模板消息发送完成,效果图。

附录:所需jar

  • 5
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 13
    评论
SmartWx是一个微信公众号的web管理工具,本项目采用springmvc+layui实现。 本项目是一个完整的微信公众号web操作版,直接编译即可运行。让用户不再用关心微信的底层接口,直接使用页面进行操作,简单方便。 包括服务器绑定、文本管理、图文管理、菜单管理、粉丝管理、群发消息等。 技术框架 开发语言:JAVA 数据库:MYSQL JAVA开发框架:Spring MVC+Spring+Mybatis 缓存框架:j2cache 前端开发框架:Layui+JQuery+html 前台模板引擎:art-template 应用场景: 1、SmartWx是一款基于JAVA企业级平台研发的微信公众号管理系统, 依托企业级JAVA的高效、安全、稳定等优势,开创国内JAVA版开源微信公众号管理系统先河。 2、SmartWx采用最流行的Spring语言,来实现多公众号的管理。 3、如果您要需要搭建一个微信公众号管理系统,那么您可以用SmartWx 4、如果您厌烦了微信公众号管理后台枯燥的页面,那么您可以用SmartWx 5、如果您手中有很多公众号,那么您可以用SmartWx 功能模块: 1、账号信息 绑定公众号信息 2、文本信息 新建消息 消息发送 3、模板消息 由于模板消息需要自己创建模板,系统中只是演示功能,大家可以自行更改 4、图文管理 多图文图文 5、菜单管理 支持几乎所有的微信菜单类型 可视化管理 保存&同步 6、粉丝管理 批量同步粉丝 单个粉丝同步 发送文本消息图文消息 7、多账号管理 添加公众号 选择公众号 环境要求: JDK7或更高版本 Tomcat7.0或更高版本 MySQL5.1或更高版本 部署说明: 1、创建数据库。如使用MySQL,字符集选择为utf8。 2、执行数据库脚本。数据库脚本在/doc目录下。 3、在eclipse中导入maven项目。点击eclipse菜单File - Import,选择Maven - Existing Maven Projects 4、设置项目编码为utf-8,选择jdk1.7版本或以上,不要选择jre。 5、修改数据库连接。打开/src/main/resources/property/jdbc.properties文件,根据实际情况修改jdbc.url、jdbc.username、jdbc.password的值 6、上传图片设置。upload.properties 如属性文件所描述,如图片想放到项目中,res.upload.url注释即可 7、缓存设置。为兼容jdk1.7,此版本中暂时废弃j2cache,默认仅使用ehcache缓存,如想使用,修改J2CacheUtil,用CacheJ2Utils替换CacheUtils,修改依赖文件 8、七牛云配置。app.properties 项目中暂时未用到,可废弃 9、项目中为简化代码,用到了 lombok 插件,大家可自行安装。 10、由于项目采用前后台分离,也为了将来配置读写分离,项目需 root 根目录运行,如若不然可能会js,css加载不到的情况(自己可修改) 11、编译项目。在eclipse中,右键点击项目名,选择Run as - Maven build...,Goals填入clean package,然后点击Run,第一次运行需要下载jar包,请耐心等待 12、部署项目。将项目部署到Tomcat7或以上版本,启动Tomcat。也可使用maven tomcat7插件运行,jetty插件运行暂时有问题 13、访问系统。地址:http://localhost:8080/;用户名:smartwx,密码:smartwx 14、由于eclipse识别问题,部分xml文件和html页面会报错,无需关心,运行即可。 15、添加公众号页面,url和token两项自动生成,无需手动填写。将 开通80端口的公网ip或域名(切记全路径)+url 和 token 这两项填入到微信后台即可 16、添加完公众号,大家先尝试下 同步粉丝功能,若成功,则项目配置完成,若无法获取accesstoken,切记检查 微信后台 获取accesstoken白名单设置
要在 PHP 中发送微信公众号模板消息,首先需要在微信公众平台中创建一个模板消息并获取模板 ID。接下来,您需要在 PHP 中使用 cURL 库向微信 API 发送 POST 请求,以便将模板消息发送给用户。以下是示例代码: ```php $access_token = 'YOUR_ACCESS_TOKEN'; $template_id = 'YOUR_TEMPLATE_ID'; $url = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=".$access_token; $data = array( 'touser' => 'OPENID', 'template_id' => $template_id, 'data' => array( 'first' => array('value' => 'Hello, world!'), 'keyword1' => array('value' => 'Keyword 1'), 'keyword2' => array('value' => 'Keyword 2'), 'remark' => array('value' => 'This is a remark.') ) ); $data_string = json_encode($data); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'Content-Type: application/json', 'Content-Length: ' . strlen($data_string) )); $result = curl_exec($ch); curl_close($ch); echo $result; ``` 上述代码中,`$access_token` 是您的公众号访问令牌,`$template_id` 是您创建的模板消息的 ID。您需要将 `OPENID` 替换为要接收模板消息的用户的 OpenID。`$data` 数组包含模板消息的详细信息,其中 `first`、`keyword1`、`keyword2` 和 `remark` 分别对应模板消息中的不同部分。最后,使用 cURL 库将 `$data` 数组作为 JSON 字符串发送到微信 API,然后解析响应以查看是否成功。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值