API编写及部署
前提:淘宝客类的小程序微信是不能上线的,这里只是学习使用,请谨慎订阅,不过API可以使用在自己的网站或者APP里面
学习对象: 具有自己的网站或着线上有自己的APP的开发人员
小程序效果如图:
改章节所需条件:
编程工具:IntelliJ IDEA 2019.2.4 x64
语言:java
API框架:springBoot
1、创建一个新的java项目
1.1目录结构如下:
1.1.1 修改pom.xml,引用项目中使用的资源及项目的配置如下:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.2.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
<groupId>包名</groupId>
<artifactId>项目名称</artifactId>
<version>0.0.1</version>
<name>coupon</name>
<description>Coupon project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
<!-- fastjson -->
<fastjson.version>1.2.28</fastjson.version>
</properties>
<dependencies>
<!-- -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- 支持web模块 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>${fastjson.version}</version>
</dependency>
<dependency>
<groupId>org.apache.http</groupId>
<artifactId>legacy</artifactId>
<version>1.0.1</version>
<scope>system</scope>
<systemPath>${project.basedir}/src/main/resources/lib/org.apache.http.legacy.jar</systemPath>
</dependency>
<dependency>
<groupId>com.taobao.api</groupId>
<artifactId>tbk</artifactId>
<version>1.0.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/src/main/resources/lib/taobao-sdk-java-auto_1468685308771-20191224.jar</systemPath>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<includeSystemScope>true</includeSystemScope>
</configuration>
</plugin>
</plugins>
</build>
</project>
### 1.1.2主函数的端口重定向
```java
@SpringBootApplication
public class CouponApplication {
public static void main(String[] args) {
SpringApplication.run(CouponApplication.class, args);
}
/**
* http重定向到https
* @return
*/
@Bean
public TomcatServletWebServerFactory servletContainer() {
TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory() {
@Override
protected void postProcessContext(Context context) {
SecurityConstraint constraint = new SecurityConstraint();
constraint.setUserConstraint("CONFIDENTIAL");
SecurityCollection collection = new SecurityCollection();
collection.addPattern("/*");
constraint.addCollection(collection);
context.addConstraint(constraint);
}
};
tomcat.addAdditionalTomcatConnectors(httpConnector());
return tomcat;
}
@Bean
public Connector httpConnector() {
Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
connector.setScheme("http");
//Connector监听的http的端口号
connector.setPort(8080);
connector.setSecure(false);
//监听到http的端口号后转向到的https的端口号
connector.setRedirectPort(8443);
return connector;
}
}
1.1.3 API的编写
1.1.3.1 TaobaoController .java
@RestController
public class TaobaoController {
@Autowired
TaobaoService resourceService = TaobaoService.getInstance();
/**
* 根据推广链接生成淘宝口令,复制到淘宝应用即可
*
* @param createPWDBean
* @return
*/
@RequestMapping(value = "/api/createpwd", method = RequestMethod.GET)
@ResponseBody
public String createpwd(CreatePWDBean createPWDBean) {
return resourceService.createPWD(createPWDBean);
}
/**
* 根据关键字获取推广链接,产品列表
* 常用
* @param materialOptimusBean
* @return
*/
@RequestMapping(value = "/api/moptimus", method = RequestMethod.GET)
@ResponseBody
public String dgMaterialOptimus(MaterialOptimusBean materialOptimusBean) {
return resourceService.dGMaterialOptimus(materialOptimusBean);
}
}
1.1.3.2 TaobaoService.java
@Service
public class TaobaoService {
private static final String url = "https://eco.taobao.com/router/rest";
private static final String appkey = "xxx";//淘宝开发后台获取
private static final String secret = "xxx";//淘宝开发后台获取
private TaobaoClient client;
//adzone_id 获取推广位ID的方式 https://baichuan.bbs.taobao.com/detail.html?spm=a3c0d.7998981.0.0.2d772f453XCdqI&postId=7332467
pid:mm_xxx_xxx_xxx adzone_id 是第三个xxx
private Long mAdzoneId = xxxL;
//将双重检查改成懒汉模式,保证线程安全的问题。
private static class HdAtlasClient {
private static TaobaoService instance = new TaobaoService();
}
public static TaobaoService getInstance() {
return HdAtlasClient.instance;
}
private TaobaoService() {
if (client == null) {
client = new DefaultTaobaoClient(url, appkey, secret);
}
}
/**
* 淘宝口令生成
* String userId, String text, String url, String logoUrl
*/
public synchronized String createPWD(CreatePWDBean createPWDBean) {
TbkTpwdCreateRequest req = new TbkTpwdCreateRequest();
req.setUserId(createPWDBean.getUserId());
req.setText(createPWDBean.getText());
req.setUrl(createPWDBean.getUrl());
req.setLogo(createPWDBean.getLogoUrl());
req.setExt("{}");
TbkTpwdCreateResponse rsp = null;
try {
rsp = client.execute(req);
} catch (ApiException e) {
e.printStackTrace();
}
return rsp.getBody();
}
/**
* 淘宝客-推广者-物料精选:taobao.tbk.dg.optimus.material(适用于自己推广的媒体使用)
* 淘宝客-服务商-物料精选:taobao.tbk.sc.optimus.material(适用于工具服务商使用)
*/
public synchronized String dGMaterialOptimus(MaterialOptimusBean materialOptimusBean) {
TbkDgMaterialOptimusRequest req = new TbkDgMaterialOptimusRequest();
req.setAdzone_id(mAdzoneId);
req.setPage_no(Long.parseLong(materialOptimusBean.getPage_no()) );
req.setPage_size(Long.parseLong(materialOptimusBean.getPage_size()) );
req.setQ(materialOptimusBean.getKey());
req.setHas_coupon(true);
TbkResponse rsp = null;
try {
rsp = client.execute(req);
} catch (ApiException e) {
e.printStackTrace();
}
return rsp.getBody();
}
}
其中对应的接口:
1、taobao.tbk.tpwd.create
2、 taobao.tbk.dg.material.optional
后端详细项目下载地址待整理:服务器源代码提取码: cjxt ;解压密码:654321
2、打包成jar,并部署
2.1打包成jar
如图:
2.2 部署程序
2.2.1
//这样启动方式在关闭客户端项目就停止了,当你的项目需要永久的运行的时候,就需要使用下面的方法
java -jar xxx.jar
2.2.2
nohup java -jar xxx.jar > system.log 2>&1 &
nohup java -jar coupon-0.0.1.jar &
kill -9
nohup java -jar springboot_demo-1.0.0.jar &
tail -100f nohup.out #进入日志查看
运行命令后,在同级目录下会出现system.log文件,这个文件就项目的日志文件。
使用命令:ps -a可以查看Java程序运行的进程号,用于停止程序,不过当程序有好几个的时候,用命令:ps -ef|grep java这个命令会将搜索Java相关的所以进程号,根据jar包名称找到需要停止的进程号,使用命令:kill -9 11759杀死进程,11759是进程号。(PS:杀死进程时一定要注意不要看错了进程号,以免杀错!!
ps -ef|grep java
kill -9 11759