购物车关键功能在于当后台用户更新了商品信息,那么购物车商品信息也应得到及时的更新。这里就需要传入商品信息,并且更新购物车的redis缓存数据详细代码如下:首先通过redisTemplate.boundHashOps("cartList")方法获取redis中所有购物车商品,然后再进行遍历,如果缓存中有商品id和更新的商品id相同,则进行更新。详细代码如下图5-11所示:
图 5-11
因此用程序流程图描述如下图5-12所示:
图 5-12 更新购物车商品程序流程图
在该服务的关键功能在于添加订单的功能,当创建订单时,需要将订单对象状态设为1(未付款状态),并且通过购物车商品数量和商品价格,计算总数。最后将订单保存到数据库中,详细代码如下图5-13所示:
图 5-13
程序流程图如下图5-14所示:
图 5-14 添加订单程序流程图
该支付功能使用了支付宝沙箱支付,用来模拟真实支付,因为真实支付需要个体工商户备案和上传经营执照等相关文件,因此只能使用沙箱环境模拟支付。该功能需要有一个支付宝账号,且需要登录支付宝开发平台进行实名验证,申请个人的沙箱账号并根据支付宝密钥工具生成个人密钥和应用公钥。且按照官方文档完成沙箱控制台及接口调用配置。配置格式如下图5-15所示:
图 5-15
这里生成支付二维码之前需要先验证支付宝客户端,代码如下所示:
@Bean
public AlipayClient setAlipayClient(){
return new DefaultAlipayClient(gateway, appId, privateKey, "json", "UTF-8", publicKey, "RSA2");
}
意思就是返回一个DefaultAlipayClient Bean,且DefaultAlipayClient创建时需要传入支付宝网关地址,应用id,支付宝私钥,应用公钥,加密方式等参数。如果都匹配的上则支付宝客户端配置成功。
然后就是生成支付二维码,需要设置请求内容,如下代码,把订单标题,订单编号,订单金额等数据设置到请求内容里面去,然后通过alipayClient.execute(request)方法向支付宝客户端请求,并如果成功响应,则会生成一个response.getQrCode()二维码链接。代码如下图5-16所示:
图 5-16
使用支付宝沙箱版支付完成之后,会跳转到一个成功回调接口,跳转之后做的第一件事就是进行验签,根据请求参数Map集合来验证生成二维码和完成之后的请求参数和应用公钥是否有效来确认是否成功支付。通过AlipaySignature.rsaCertCheckV1(resultMap,alipayPublicKey, "UTF-8", "RSA2")方法,传入请求参数Map集合和应用公钥,以及编码方式和加密方式等参数确认是否验证成功,如下代码:
// 1.获取支付宝post发送过来的信息
Map<String, String> resultMap = new HashMap<>();
for (Object v : requestParameterMap.entrySet()){
Map.Entry<String, String[]> item = (Map.Entry<String, String[]>) v;
resultMap.put(item.getKey(), item.getValue()[0]);
}
try {
return AlipaySignature.rsaCertCheckV1(resultMap,alipayPublicKey, "UTF-8", "RSA2");
}
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。