微信支付
需要开通微信支付
微信公众平台:负责:小程序、公众号、服务号:登录、支付、分享:APPID、APP_SECRET(小程序ID、小程序密钥)
微信开放平台:第三方APP开发相关:支付、登录,需要在这里注册账号
企业认证:
企业认证开通:300元/年
开通微信支付:
前提:必须通过企业认证
微信商户平台:商家的流水以及银行账户
(收费的)
商户id:mch_id
商户key:key
支付证书:cert(相当于一个密钥,在微信商户平台上获取,是极其保密的东西)
扫码支付:扫码枪
JSAPI支付:微信内的网页支付:公众号
小程序支付:小程序内使用的支付
Native支付:二维码支付,应用在web网页内,二维码扫码支付
app支付:微信之外的第三方APP内发起的微信支付
刷脸支付:设备中的刷脸支付
商品名称、商品价格---》统一下单接口---》返回,预支付信息;支付标识()
目前不同微信版本写代码调的方法不同
V2版本与V3版本的区别
V2版本----比较适用于测试的开发者
协议:http
交互方式:xml格式
<name>火箭</name>
证书:支付的时候不需要,退款的时候需要
V3版本
协议:https
交互方式:json
证书:支付退款都需要支付证书
非对称加密:公钥、私钥
公钥:通过私钥加密的东西只能用公钥解密 同样通过公钥加密的也只能用私钥解密
*公钥是放在浏览器上的,私钥是自己保存的,要放在比较隐秘的地方
https也是使用的非对称加密
支付时序图
创建支付的微服务
创建配置文件
application.yml
spring:
application:
name: service-payment
profiles:
active: dev
cloud:
nacos:
discovery:
server-addr: localhost:8848
application-dev.yml
server:
port: 8210
mybatis-plus:
type-enums-package: com.atguigu.ssyx.enums
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
mapper-locations: classpath:mapper/*.xml
feign:
sentinel:
enabled: true
client:
config:
default: #配置全局的feign的调用超时时间 如果 有指定的服务配置 默认的配置不会生效
connectTimeout: 30000 # 指定的是 消费者 连接服务提供者的连接超时时间 是否能连接 单位是毫秒
readTimeout: 50000 # 指定的是调用服务提供者的 服务 的超时时间() 单位是毫秒
spring:
main:
allow-bean-definition-overriding: true #当遇到同样名字的时候,是否允许覆盖注册
rabbitmq:
host: 192.168.56.101
port: 5672
username: guest
password: guest
publisher-confirm-type: CORRELATED
publisher-returns: true
listener:
simple:
prefetch: 1
concurrency: 3
acknowledge-mode: manual
redis:
host: localhost
port: 6379
database: 0
timeout: 1800000
password:
lettuce:
pool:
max-active: 20 #最大连接数
max-wait: -1 #最大阻塞等待时间(负数表示没限制)
max-idle: 5 #最大空闲
min-idle: 0 #最小空闲
datasource:
type: com.zaxxer.hikari.HikariDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/shequ-order?characterEncoding=utf-8&useSSL=false
username: root
password: root
hikari:
connection-test-query: SELECT 1
connection-timeout: 60000
idle-timeout: 500000
max-lifetime: 540000
maximum-pool-size: 5
minimum-idle: 3
pool-name: GuliHikariPool
jackson:
date-format: yyyy-MM-dd HH:mm:ss
time-zone: GMT+8
# 微信
weixin:
#小程序微信公众平台appId
appid: wxcc651fcbab275e33
partner: 1481962542
partnerkey: MXb72b9RfshXZD4FRGV5KLqmv5bx9LT9
notifyurl: http://gmall-prod.atguigu.cn/api/payment/weixin/notify
cert: D:\yygh_work\yygh_parent\service\service-order\src\main\resources\apiclient_cert.p12
创建启动类
package com.atguigu.ssyx;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class ServicePaymentApplication {
public static void main(String[] args) {
SpringApplication.run(ServicePaymentApplication.class, args);
}
}
添加controller
引入依赖
<!--导入微信支付sdk-->
<dependency>
<groupId>com.github.wxpay</groupId>
<artifactId>wxpay-sdk</artifactId>
<version>0.0.3</version>
</dependency>
提交订单问题处理:
1.redisson要求所有的服务都必须加入redis配置
2提交订单成功之后,获取订单详情接口
orderInfo.getParam().put("orderStatusName",orderInfo.getOrderStatus() .getComment());
3.获取用户昵称的时候,不能使用Thread Local中取,因为没有存,需要根据userId取redis中取
4.优惠总金额以及优惠券总金额获取,要判空
BigDecimalactivity Amount=activityAmoundDetail.containsKey("activity:total")?activityAmoundDetail.get("activity:total"): new BigDecimal(0);
BigDecimalcoupanAmount=activityAmoundDetail.containsKey("coupon:total")?activityAmoundDetail.get("coupon:total"):new BigDecimal(e):
5.锁定库存的时候, 需要使用@Update注解