本项目中其他模块内容:
微服务架构下如何集成支付宝接口实现支付服务(一)总体设计.
微服务架构下如何集成支付宝接口实现支付服务(二)使用SpringCloudConfig搭建配置中心.
微服务架构下如何集成支付宝接口实现支付服务(三)结合配置中心搭建eureka服务注册中心.
微服务架构下如何集成支付宝接口实现支付服务(四)集成alipay来提供支付服务.
微服务架构下如何集成支付宝接口实现支付服务(五)消费支付服务的消费者搭建.
微服务架构下如何集成支付宝接口实现支付服务(六)支付宝接口(沙箱环境)申请.
这个服务是消费者,主要是模拟网站来使用支付服务,简单的说就是调用支付服务提供的功能。这个过程使用的是feign来做的负载均衡功能。然后去eureka中发现对应的服务,调用接口并返回数据。
1、pom文件
主要添加微服务依赖的代码,其他部分按自己项目需要自行添加。
<!-- 添加微服务 -->
<dependency>
<groupId>com.shqblog</groupId>
<artifactId>blog-api</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
<version>1.4.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-ribbon</artifactId>
<version>1.4.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-feign</artifactId>
<version>1.4.3.RELEASE</version>
</dependency>
2、配置文件
配置文件这里提一下,这里的bootstrap.yml是系统级配置文件,是最先进行加载的,如果加载失败,再去找application.yml文件加载配置
所以bootstrap.yml文件内容:这里是加载的配置中心的配置项,如果不会使用SpringCloudConfig的同学可以看这篇微博:使用SpringCloudConfig搭建配置中心
spring:
cloud:
config:
name: blog-config-security #需要从github上读取的资源名称,注意没有yml后缀名
profile: prod # 本次访问的配置项
label: master
uri: http://localhost:3344
application:
name: boot-server
而application.yml中的内容其实应该从配置中心中获取,当然也可以不使用配置中心,直接再本地配置,这里主要是配置feign和eureka的配置。
feign:
hystrix:
enabled: false #是否开启hystrix熔断处理
eureka:
client: #客户端注册金eureka服务列表中
register-with-eureka: false #自己不能注册
service-url:
defaultZone: http://localhost:6731/eureka/
#在微服务列表中注册的名字是spring.application.name的名
3、启动器配置
@SpringBootApplication
//开启eureka的客户端,就是可以连接eureka服务端,可以从中读取服务
@EnableEurekaClient
//开启feign的客户端,参数basePackages是来扫描哪个包下的关于fegin的所有注解。
@EnableFeignClients(basePackages={"com.shqblog"})
/*ComponentScan注解是用来扫描包,将包下的所有bean扫描到并注入到容器,包括
@Service,@Mapper,@Controller,@Component等,这里这样使用主要因为我将service
写到了一个另外的module里,编程jar包引入到该项目中,所以需要扫描对应jar包下的路径,
在扫描了jar包中的路径后,必须加上本项目的路径,否则只会扫描jar包下的路径,
而不会扫描本项目下的路径*/
@ComponentScan({"com.shqblog","com.boot.security.server"})
public class SecurityApplication {
public static void main(String[] args) {
SpringApplication.run(SecurityApplication.class, args);
}
}
4、核心代码
主要就是添加一个service
这个PayClientService.java是通过feign去访问的eureka上的服务。
@FeignClient注解中value里面的值是当你的服务注册到eureka上之后的那个名字,
具体步骤就是在浏览器中输入localhost:6731(这个接口看你自己设计的是多少)然后去下图这个地方看,默认的都是全大写的。
@FeignClient(value = "BLOG-PAY"/*,fallbackFactory=DeptClientServiceFallbackFactory.class*/) // 指定哪一个服务
public interface PayClientService {
//post形式访问BLOG-PAY服务中的/pay/add接口,参数就是传入的参数,参数是用json格式传送的。
@PostMapping("/pay/add")
public boolean add(@RequestBody PayInfo dept);
@GetMapping("/pay/get/{id}")
public PayInfo get(@PathVariable("id") Long id);
@GetMapping("/pay/list")
public List<PayInfo> list();
@GetMapping("/pay/discovery")
public Object deicovery();
@PostMapping("/pay/pay")
public String pay(AlipayBizParameters alipayBizParameters);
}
然后是controller中的核心代码
就是来调用PayClientService中feign的代码去访问支付服务中的接口,返回对应的值。
@RequestMapping("/payMoney")
public void pay(HttpServletResponse httpResponse,Float money)throws ServletException, IOException{
AlipayBizParameters alipayBizParameters = new AlipayBizParameters();
alipayBizParameters.setReturnUrl("http://www.shqblog.com");
alipayBizParameters.setNotifyUrl("http://2y5674v549.zicp.vip:80/pay/alipayNotify");
alipayBizParameters.setOut_trade_no("20150320010101002");
alipayBizParameters.setProduct_code("FAST_INSTANT_TRADE_PAY");
alipayBizParameters.setTotal_amount(money);
alipayBizParameters.setSubject("Iphone6 64G");
alipayBizParameters.setBody("Iphone6 64G");
alipayBizParameters.setPassback_params("merchantBizType%3d3C%26merchantBizNo%3d2016010101111");
String form = payClientService.pay(alipayBizParameters);
//这里是将一个表单输出到页面,页面会自动进行跳转,跳转到支付宝支付的页面。
httpResponse.setContentType("text/html;charset=UTF-8");
httpResponse.getWriter().write(form);//直接将完整的表单html输出到页面
httpResponse.getWriter().flush();
httpResponse.getWriter().close();
}
最后将所有服务启动,启动后访问上面的/payMoney接口,输入money值,进行扣费。