焦作大学学报要求格式模板
所属栏目:焦作大学学报
发布时间:2014-08-21 14:01:32 更新时间:2014-08-21 14:24:31
微信小店自微信公众平台推出后,成为又一种网络营销方式。微信小店提供了丰富的接口可供运营小店,而JAVA在移植性方面的优势很适合在多种平台上部署由其开发的微信小店服务端。该文介绍了微信小店服务端结构,以及使用JAVA语言实现微信小店服务端的主要环节。
摘要:介绍了微信小店接口功能、服务端结构及微信小店接口开发的一般过程,并使用JAVA语言实现了微信小店服务端HTTPS传输、JSON数据生成和分析、获取ACCESS_TOKEN以及微信小店接口调用等主要环节。
关键词:焦作大学学报编辑部,微信小店,接口开发,JAVA,JSON,HTTPS
The Implementation of Wechat Shop Server by Java
CHEN Fu
(South West Air Traffic Management Bureau.CAAC,Chengdu 610202,China)
Abstract:This paper presents a brief introduction to the interface functions and server structures of Wechat shop and the general process of its interface development. Using JAVA, it implements major sectors of Wechat shop server HTTPS transmission, JSON data generation and analysis, ACCESS_TOKEN acquisition, and Wechat shop interface, etc.
Key words: Wechat shop;interface development;JAVA;JSON;HTTPS
1 微信小店简介
微信小店是基于微信支付的一套通过公众号售卖商品的解决方案,包括开店、商品上架、商品管理、订单管理、货架管理、维权等多种功能,开通微信小店后,就可以进行小店的开启、运营和使用[1,2]。运营者可直接通过微信小店的各个功能运营微信小店。与微信公众号开发模式一样,微信小店也为具备开发能力的运营者提供了实现各种功能的接口,便于运营者结合自身已有的运营资源,建立微信小店服务端以管理和使用微信小店的各种功能,为顾客提供灵活细致的服务,提高顾客体验。
2 微信小店服务端结构
微信公众平台为运营者建立微信小店服务端提供了丰富的接口。通过在微信小店服务端调用这些接口,可以运营微信小店。图1是根据文献[2]绘制的微信小店接口图。从图1可见微信小店接口涉及微信小店的多个方面。微信小店服务端调用微信小店接口的大致过程如图2所示,据此,微信小店服务端结构和模块的层次关系如图3所示。在微信小店服务端结构中,微信小店服务端根据自己的业务逻辑生成相应的 JSON数据提交给微信小店接口,并将微信小店接口返回的JSON数据进行分析和引入微信小店服务端业务逻辑中,JSON数据生成和分析模块是微信小店服务端中业务逻辑与微信小店交互的关键。
3 微信小店服务端的实现
3.1 HTTPS传输
微信小店接口都通过 HTTPS方式访问。大多数时候HTTPS请求主要是POST方法,提交的内容主要是JSON数据,在上传图片时提交的内容是图片的数据;仅在访问获取所有商品信息、所有邮费模板信息、所有分组信息和所有货架信息等不需要复杂参数的接口时才使用GET方法。HTTPS传输模块的主要代码如下:
1)使用指定的信任管理器(MyX509TrustManager)创建HTTPS连接。
TrustManager[] tm = { new MyX509TrustManager() };
SSLContext sslContext = SSLContext.getInstance("SSL", "SunJSSE");
sslContext.init(null, tm, new java.security.SecureRandom());
SSLSocketFactory ssf = sslContext.getSocketFactory();
URL url = new URL(requestUrl);
HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
conn.setSSLSocketFactory(ssf);
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setUseCaches(false);
conn.setRequestMethod(requestMethod); //请求方式(GET/POST)
2)向输出流写数据。其中的outBytes为字节数组,可以来自于数据库大字段、本地图片和字符串。当将字符串转化为outBytes时需要使用UTF-8编码(与微信接口相关的编码一般都是UTF-8编码)。
if (null != outBytes) {
OutputStream outputStream = conn.getOutputStream();
outputStream.write(outBytes); outputStream.close();
}
3)从输入流读取返回内容,并将返回内容转化为JSON格式。
InputStream inputStream = conn.getInputStream();
InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8");
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
String str = null;
StringBuffer buffer = new StringBuffer();
while ((str = bufferedReader.readLine()) != null) {
buffer.append(str);
}
jsonObject = JSONObject.fromObject(buffer.toString());
3.2 JSON数据生成
大多数接口都需要向微信小店接口提交JSON数据,这些数据实际上是访问微信小店接口的参数。腾讯严格定义了所有微信小店接口传入的JSON数据格式和内容。
以生成增加分组的JSON数据为例。增加分组的JSON数据包括分组名称group_name、商品列表product_list。商品列表包含该新增组包含的商品ID(商品ID可以通过访问微信小店查询商品接口获取)。生成和获取JSON数据需要引入json-lib的jar包。需要定义 GroupDetail和GroupDetailObject两个类,主要代码为:
public class GroupDetail {
private String group_name;
private List product_list;
…… // group_name和product_list的set和get方法略
}
public class GroupDetailObject {
private GroupDetail group_detail;
…… // group_detail的set和get方法略
}
生成JSON数据的代码主要为:
List list=new ArrayList();
list.add("pDF3iY9cEWyMimNlKbik_NYJTzYU");
list.add("pDF3iY4kpZagQfwJ_LVQBaOC-LsM");
GroupDetail groupdetail=new GroupDetail();
groupdetail.setGroup_name("测试分组");
groupdetail.setProduct_list(list);
GroupDetailObject groupdetailobject=new GroupDetailObject();
groupdetailobject.setGroup_detail(groupdetail);
String jsonString = JSONObject.fromObject(groupdetailobject).toString();
生成的JSON数据将与来自文献[2]中增加分组的数据示例相同:
{
"group_detail" : {
"group_name": "测试分组",
"product_list" : [
"pDF3iY9cEWyMimNlKbik_NYJTzYU",
"pDF3iY4kpZagQfwJ_LVQBaOC-LsM"
] } }
3.3 获取ACCESS_TOKEN
微信小店所有接口的调用都需要ACCESS_TOKEN值。ACCESS_TOKEN是通过微信公众平台的ACCESS_TOKEN接口获取,该接口需要用到微信公众号的APPID和APPSECRET。ACCESS_TOKEN增加了微信小店接口调用的安全性。获取ACCESS_TOKEN的主要代码为:
String token_url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential& amp;appid=APPID&secret=APPSECRET";
token_url = token_url.replace("APPID", appid).replace("APPSECRET", appsecret);
JSONObject jsonObject = httpsRequest(token_url, "GET", null);
其中,token_url为ACCESS_TOKEN接口;jsonObject为返回的JSON数据。使用 jsonObject.getString("access_token")取得ACCESS_TOKEN值,ACCESS_TOKEN值的有效期可以通过jsonObject.getInt("expires_in")取得。获取ACCESS_TOKEN的详细代码可以参照文献[3-5]。 3.4 图片上传
在微信小店中商品和货架都需要显示图片。在调用增加商品、增加货架接口时提交的JSON数据并不包含图片的数据,而仅包含图片的URL。图片的URL是通过调用图片上传接口上传图片获取。主要代码为:
String requestUrl = "https://api.weixin.qq.com/merchant/common/upload_img?access_token=ACCESS_TOKEN&filename=test.png";
requestUrl = requestUrl.replace("ACCESS_TOKEN", accessToken).replace("test.png", filename);
JSONObject jsonObject = HttpsUtil.httpsRequest(requestUrl,"POST",imgBytes);
其中requestUrl为微信小店图片上传接口;imgBytes为提交给图片上传接口的图片的字节数组;jsonObject为微信小店图片上传接口返回的JSON数据。返回的JSON数据中图片的URL可以通过以下方式取得:
jsonObject.getString("image_url");
3.5 微信小店接口调用
调用微信小店接口,需要ACCESS_TOKEN和生成对应的JSON数据,再通过HTTPS传输模块按接口网址和提交方式完成调用。以调用增加分组接口为例,主要代码为:
String requestUrl = "https://api.weixin.qq.com/merchant/group/add?access_token=ACCESS_TOKEN";
requestUrl = requestUrl.replace("ACCESS_TOKEN", accessToken);
JSONObject jsonObject = HttpsUtil.httpsRequest(requestUrl,"POST",addGroupJson);
其中,requestUrl为增加分组的微信小店接口;accessToken为获取的ACCESS_TOKEN;addGroupJson为新增分组的JSON数据的字节数组;jsonObject为微信小店增加分组接口返回的JSON数据。
3.6 JSON数据分析
腾讯严格定义了微信小店接口返回的JSON数据格式和内容。返回的JSON数据中都包括了错误代码(errcode)和错误信息(errmsg),调用接口操作成功时,错误代码为0,错误信息为“success”。此外,微信小店查询类接口返回的JSON数据中还包括调用这些接口检索到的相应数据;微信小店增加对象类接口返回的JSON数据中一般包括对象的ID(例如商品ID,邮件模板ID等)。在程序中可以结合业务逻辑对返回的JSON数据进行分析处理。使用JSON数据的代码主要为:
jsonObject.getString("属性名");
其中jsonObject为返回的JSON对象,属性名为腾讯定义的返回数据名称,例如以下可以获取返回JSON对象的errcode值:
jsonObject.getString("errcode");
4 结束语
微信小店通过微信小店接口为运营者提供了灵活方便的管理和营运方式。微信小店服务端不仅可以将自己的业务逻辑体现到微信小店上,还可以充分利用运营者已有的在线数据实现微信小店与微博、淘宝和电子商务网站的数据共享。通过JAVA语言实现的微信小店服务端可以快速部署到百度云、新浪云和阿里云等平台上。
参考文献:
[1] 腾讯.微信公众平台小店接入流程指引[EB/OL].[2014-05-10].https://mp.weixin.qq.com/cgi-bin /readtemplate?t=shop/faq_tmpl&lang=zh_CN&token=9112006.
[2] 腾讯.微信小店API手册 v1.12[EB/OL].[2014-05-10].http://mp.weixin.qq.com/wiki/index.php?title=微信小店接口.
[3] 腾讯.微信公众平台开发文档[EB/OL]. [2014-04-30].http://mp.weixin.qq.com/wiki/index.php?title=首页.
[4] 柳峰.微信公众平台应用开发方法、技巧与案例[M].北京:机械工业出版社,2014.
月期刊平台服务过的文章录用时间为1-3个月,依据20年经验,经月期刊专家预审通过后的文章,投稿通过率100%以上!