微服务架构下如何集成支付宝接口实现支付服务(五)消费支付服务的消费者搭建

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/weixin_42237752/article/details/96485014

本项目中其他模块内容:
微服务架构下如何集成支付宝接口实现支付服务(一)总体设计.
微服务架构下如何集成支付宝接口实现支付服务(二)使用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值,进行扣费。

猜你喜欢

转载自blog.csdn.net/weixin_42237752/article/details/96485014