Spring Boot 完善订单【五】集成接入支付宝沙箱支付

1.1.什么是沙箱支付

支付宝沙箱支付(Alipay Sandbox Payment)是支付宝提供的一个模拟支付环境,用于开发和测试支付宝支付功能的开发者工具。在真实的支付宝环境中进行支付开发和测试可能涉及真实资金和真实用户账户,而沙箱环境则提供了一个安全、隔离的环境,使开发者能够模拟支付过程,测试支付功能,而不会使用真实资金。

使用支付宝沙箱支付环境,开发者可以模拟各种支付场景,包括交易创建、支付请求、支付回调等,以验证支付功能的正确性和稳定性。沙箱环境中的所有交易和数据都是虚拟的,不会产生真实的交易或资金流动。

支付宝沙箱支付提供了开发者工具和接口,使开发者能够在模拟环境下进行支付流程的调试和测试。开发者可以在沙箱环境中创建测试账户、配置模拟的交易金额和状态,使用沙箱环境中的接口进行支付操作,并模拟支付回调接口接收支付结果。

通过使用支付宝沙箱支付,开发者可以更安全、更有效地进行支付功能的开发和测试,避免了对真实环境的影响和风险。一旦支付功能在沙箱环境中验证通过,开发者可以将其部署到真实的支付宝生产环境中,与真实用户进行交互和支付。

步骤:

1.2接入支付宝开放平台

登陆支付宝:支付宝开放平台

Spring Boot 完善订单【五】集成接入支付宝沙箱支付_第1张图片

登录成功之后,点击控制台跳转到控制台主页面,将浏览器进度条滚动到最下面,选择沙箱,最后点击沙箱选项即可,如下:

Spring Boot 完善订单【五】集成接入支付宝沙箱支付_第2张图片

Spring Boot 完善订单【五】集成接入支付宝沙箱支付_第3张图片

下载密钥生成工具:

小程序文档 - 支付宝文档中心

Spring Boot 完善订单【五】集成接入支付宝沙箱支付_第4张图片

Spring Boot 完善订单【五】集成接入支付宝沙箱支付_第5张图片

手机上的模拟扫码:

Spring Boot 完善订单【五】集成接入支付宝沙箱支付_第6张图片

前端代码:

$(".pay").click(function () {
    //地址,手机号,收货人,支付方式,快递方式
    let el = $(".addres").find(".on")
    let person = el.find(".tit .fl").text()
    let address = el.find(".addCon p:first-child").text()
    let telephone = el.find(".addCon p:last-child").text()
    let pay = $(".way .on").attr('value')
    let mail = $(".dis .on").text()
    let ids = $(this).attr('data-ids')
    let order={
        person,telephone,address,pay,mail,ids
    }
    $.post('/order/add',order,resp=>{
        if(resp.code===200){
    //         进入支付
        let f = confirm("是否去结算?")
        if (f){
            console.log(resp.data)
            location.href="/order/pay?oid="+resp.data
        }else {
            location.href="/"
        }
        }
    },"json")
})

后端代码:

package com.lya.lyaspshop.controller;

import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.github.yitter.idgen.YitIdHelper;
import com.lya.lyaspshop.config.AlipayConfig;
import com.lya.lyaspshop.pojo.Goods;
import com.lya.lyaspshop.pojo.Order;
import com.lya.lyaspshop.pojo.OrderItem;
import com.lya.lyaspshop.pojo.User;
import com.lya.lyaspshop.resp.JsonResponseBody;
import com.lya.lyaspshop.service.IOrderItemService;
import com.lya.lyaspshop.service.IOrderService;
import com.lya.lyaspshop.service.impl.GoodsServiceImpl;
import com.lya.lyaspshop.service.impl.RedisServiceImpl;
import com.lya.lyaspshop.vo.CartItemVo;
import com.lya.lyaspshop.vo.OrderVo;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;


@RestController
@RequestMapping("/order")
public class OrderController {

    @Autowired
    private RedisServiceImpl redisService;
    @Autowired
    private GoodsServiceImpl goodsService;
    @Autowired
    private IOrderItemService iOrderItemService;
    @Autowired
    private IOrderService iOrderService;

    @RequestMapping("/add")
    public JsonResponseBody toOrder(User user, OrderVo orderVo){
        String ids = orderVo.getIds();
        List cartItems = redisService.loadCart(user, ids);
        //所有的购物车中商品的id集合
        List gds = cartItems.stream().map(CartItemVo::getGid).collect(Collectors.toList());
        //根据集合查询所有对应的商品
        List goods = goodsService.listByIds(gds);
        //遍历集合 赋值给对应的对象
        for (Goods g : goods) {
            //找到对应id相同的元素
            CartItemVo vo = cartItems.stream()
                    .filter(v -> Objects.equals(v.getGid(), g.getGid()))
                    .findFirst()
                    .get();
            //将商品g的属性赋值给vo
            BeanUtils.copyProperties(g,vo);
        }
        long oid = YitIdHelper.nextId();
        //增加订单项
        BigDecimal total=new BigDecimal(0);
        List orderItems=new ArrayList<>();
        for (CartItemVo item : cartItems) {
            //生成订单项
            OrderItem orderItem = new OrderItem();
            //赋值属性
            BeanUtils.copyProperties(item,orderItem);
            orderItem.setQuantity(item.getNum());
            orderItem.setOoid(YitIdHelper.nextId());
            orderItem.setOid(oid);
            //放到一个集合中 批量增加 只会有一次数据库新增
            orderItems.add(orderItem);
            //计算总价 + 当前的小计
            total = total.add(item.cartprice());
        }
        iOrderItemService.saveBatch(orderItems,5);
        //增加订单
        Order order = new Order();
        BeanUtils.copyProperties(orderVo,order);
        order.setOid(oid);
        order.setTotal(total);
        order.setUserId(user.getId());
        order.setStatus(0);
        order.setCreateDate(new Date());
        //订单插入数据库
        iOrderService.save(order);
        //删除缓存元素
//        redisService.removeCart(user,orderVo.getIds());
        return JsonResponseBody.success(oid);
    }
    @RequestMapping("/pay")
    public String pay(User user, String oid){
//        得到结算的订单
        Order order = iOrderService.getById(oid);
//        调用支付页面
//        传来的是表单
        String body = new AlipayConfig().goAlipay(order);
        return body;
    }
//    这里传递来的数据:
    @RequestMapping("/payDone")
    public String payDone(Map stringMap){
//        更具成功支付了id来修改状态:
        String oid = stringMap.get("out_trade_no");
        iOrderService.update(new UpdateWrapper()
                .eq("oid",oid)
                .set("status",1)
                .set("pay_date",new Date()));
//        html语句可以解析,json数据只能响应


        return "
                    
                    

你可能感兴趣的:(spring,boot,java,后端)