访问流程
nginx
sell.com:
location / {
root /opt/data/wwwroot/sell;
index index.html index.htm;
}
sell.com/sell/..:
location /sell/ {
proxy_pass http://192.168.1.105:8080/sell/;
}
网站首页:sellUrl: 'http://sell.com',
openidUrl: 'http://qinjun.natapp1.cc/sell/wechat/authorize',
wechatPayUrl: 'http://qinjun.natapp1.cc/sell/pay/create'
师兄代理地址:http://proxy.springboot.cn/pay?openid=OPENID&orderId=1501830787417512510&returnUrl=http://www.imooc.com
- 微信请求sell.com
- fiddler抓包
- host解析(虚拟机地址192.168.1.107 sell.com)
- nginx进行跳转至index
- 页面进行判断是否有cookie,无则跳转至openidUrl,获取openid写入cookie
- 点击下单,填写信息
- 点击支付,跳转至wechatPayUrl,因为使用借用账号(跳转至支付授权目录),在跳转至自己的 /sell/pay/create(只有授权地址才可以)
- 完成支付
微信授权流程
- 用户统一授权,获取code(/wechat/authorize)
- 通过code换取网页授权access_token(/wechat/userInfo)
- 获取openid
微信支付流程
- 发起微信支付,跳转至create.ftl
- 微信返回异步通知
- 客户端接受异步通知,进行判断,修改订单状态
- 客户端返回给微信支付成功success.ftl
商家流程
- 分布式系统
分布式系统:旨在支持应用程序和服务的开发,可以利用物理架构有多个自治的处理元素(多节点),不共享主内存,但通过网络发送消息合作(消息通信)。(不同功能模块: 厨房中一个洗菜,一个炒菜)
集群:多节点(相同功能模块:厨房中两个都炒菜)
分布式计算
- session
理解为一种保存ke-value的机制
sessionid/token
- redis
当用户很多,一个服务器支撑不住 — 添加服务器(水平扩展-集群/垂直扩展(拆分服务)-分布式)
水平扩展:通过iphash将同一个ip过来的请求转发到同一个服务器上(隐患:当一个服务器bug后,该服务器上的所有用户将不能再访问系统)
通用方案:使用一个专门的服务去保存session信息,其他服务器需要session的时候再去该服务器要,这个服务通常就是用redis集群去做的
- login
- openid去和数据库里的数据匹配里是引用
- 设置token至redis
- 设置token至cookie
- logout
- 从cookie里查询
- 清除redis
- 清除cookie
微信->客户端消息(websocket)
- pom文件引入
- 编写前端代码
websocket = new WebSocket('ws://qinjun.natapp1.cc/sell/webSocket');
- 配置websocket
@Component
public class WebSocketConfig {
@Bean
public ServerEndpointExporter serverEndpointExporter() {
return new ServerEndpointExporter();
}
}
- 编写websocket类