Electricity supplier thirteenth day
test Stock:
introducing inventory system: gware-the Manage
1. introduced to the project inventory systems, inventory systems into the project root directory can!
2. The inventory system access entry http: // localhost: 9001 / index
configuration nginx.conf
http://www.gware.com/index
3. How to establish contact with our project inventory form} {remote call restful
write a orderService in the interface calls check inventory interface
http://www.gware.com/hasStock
skuId: goods skuId
NUM: number of items
featured development:
for (OrderDetail OrderDetail: orderDetailList) {
boolean RES = orderService.checkStock (orderDetail.getSkuId (), OrderDetail .getSkuNum ());
// not enough stock represents
IF (RES)! {
request.setAttribute ( "errMsg An",) "inventory shortage!";
return "tradeFail";
}
}
4. Add stock
5. 测试:
user-manage,passport-web,cart-service,order-service,order-web,gmall-gware.
注意:验证库存的时候,并没有真正的锁定库存!当支付完成之后锁定库存!
验价格:
// 实时价格skuInfo.getPrice(); 想得到skuInfo,orderDetail.getSkuId() = skuInfo.id;
SkuInfo skuInfo = manageService.getSkuInfo(orderDetail.getSkuId());
if (skuInfo.getPrice()!=orderDetail.getOrderPrice()){
request.setAttribute("errMsg",orderDetail.getSkuName()+"价格有变动,请重新下单!");
return "tradeFail";
}
// 变动购物车的价格
cartService.loadCartCache(userId);
// orderDetail.getOrderPrice()==skuInfo.getPrice() true: 验证通过,否则验证失败!
支付模块:
支付宝接口
支付流程:
1. 用户点击生成二维码需要 带着签名,参数。
2. 支付宝需要验证 签名,为了验证商家的真实性!
3. 验证通过,则进行处理交易
3.1 同步回调:给用户看
3.2 异步回调:给商家看
搭建支付模块 gmall-payment
将web-util ,service-util 放入同一个pom.xml
导入支付需要的sdkjar包
1. 直接安装到本地
2. mvn install:install-file -DgroupId=com.alipay -DartifactId=alipay-sdk -Dversion=3.0.0 -Dpackaging=jar -Dfile=alipay-sdk-java20180104135026.jar
3. 将sdk 导入到项目中
4. 修改域名
5. 导入静态资源
6. 立即支付需要完成
1. 生成一个二维码,进行支付
2. 保存一下交易记录 为什么需要记录订单信息!paymentInfo
3. 了解如何保证支付的幂等性!
一个订单,在支付宝中,只能交易成功一次!第三方交易编号outtradeNo
当用户点击支付的时候,outtradeNo 会被记录到支付宝中!
如果用户再次点击之后的时候,支付宝记录中已经存在 outtradeNo ,则不能支付!
7. 异步回调:
1. 先验签:boolean flag = AlipaySignature.rsaCheckV1(paramsMap, AlipayConfig.alipay_public_key, AlipayConfig.charset, AlipayConfig.sign_type); //调用SDK验证签名
2. flag = true 时,需要进行二次验签
2.1 "TRADE_SUCCESS".equals(trade_status) || "TRADE_FINISHED".equals(trade_status) 并且交易记录状态PaymentStatus.PAID,PaymentStatus.ClOSED
才是真正的验签成功!
3. 验签成功之后:
更新交易记录的状态PaymentStatus.PAID.
4. // 更新订单的状态 orderStatus=PAID 应该是由OrderService。消息中间件来处理!
面试题:
使用的哪款产品?
电脑网站支付