Skip to content

支付宝_发起支付接口

egan edited this page Dec 9, 2019 · 3 revisions

下面的代码假设你已经有了一个PayService实例,怎么构造请看 快速入门


@RestController
@RequestMapping
public class PayController {

    private PayService payService;

    private PayMessageRouter router;

    /**
     * 这里对 PayService 与 router进行构造
     */
    @PostConstruct
    public void init() {
        ....
    }


    /**
     * 跳到支付页面
     * 针对实时支付,即时付款
     *
     * @return 跳到支付页面
     */
    @RequestMapping(value = "toPay.html", produces = "text/html;charset=UTF-8")
    public String toPay() {

        PayOrder order = new PayOrder("订单title", "摘要", new BigDecimal(0.01), UUID.randomUUID().toString().replace("-", ""));

        //WAP支付
        //order.setTransactionType(AliTransactionType.WAP);
        //电脑网页支付
        order.setTransactionType(AliTransactionType.PAGE);


        //获取支付订单信息
        Map orderInfo = payService.orderInfo(order);
        //组装成html表单信息
        return payService.buildRequest(orderInfo, MethodType.POST);

    }


    /**
     * 被动扫码付款(条码付),声波付
     * @param authCode 条码信息
     * @return 支付结果
     */
    @RequestMapping(value = "microPay")
    public Map<String, Object> microPay(String authCode) throws IOException {


        PayOrder order = new PayOrder("订单title", "摘要", new BigDecimal(0.01), UUID.randomUUID().toString().replace("-", ""));

        //声波付
        // order.setTransactionType(AliTransactionType.WAVE_CODE);
        //条码付
        order.setTransactionType(AliTransactionType.BAR_CODE);


        //设置授权码,条码等
        order.setAuthCode(authCode);
        //支付结果
        Map<String, Object> params = payService.microPay(order);
        PayConfigStorage storage = payService.getPayConfigStorage();
        //校验
        if (payService.verify(params)) {
            PayMessage message = new PayMessage(params, storage.getPayType(), storage.getMsgType().name());
            //支付校验通过后通过路由进行业务处理
            router.route(message);

        }
        //这里开发者自行处理
        return params;
    }

    /**
     * 获取二维码图像
     * 二维码支付
     *
     * @return 二维码图像
     */
    @RequestMapping(value = "toQrPay.jpg", produces = "image/jpeg;charset=UTF-8")
    public byte[] toWxQrPay() throws IOException {
        PayOrder order = new PayOrder("订单title", "摘要", new BigDecimal(0.01), UUID.randomUUID().toString().replace("-", ""));
        //扫码付
        order.setTransactionType(AliTransactionType.SWEEPPAY);
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        ImageIO.write(payService.genQrPay(order), "JPEG", baos);
        return baos.toByteArray();
    }


    /**
     * 获取支付预订单信息
     *
     * @return 支付预订单信息
     */
    @RequestMapping("app")
    public Map<String, Object> app() {

        Map<String, Object> data = new HashMap<>();
        data.put("code", 0);
        PayOrder order = new PayOrder("订单title", "摘要", new BigDecimal(0.01), UUID.randomUUID().toString().replace("-", ""));
        //App支付
        order.setTransactionType(AliTransactionType.APP);
        data.put("orderInfo", UriVariables.getMapToParameters(service.orderInfo(order)));
        return data;
    }