网站首页   文章专栏   SpringBoot整合支付宝支付案例
SpringBoot整合支付宝支付案例
转载 2020-02-19 18:51 暴裂无球 561浏览 SpringBoot

1.下载官方的demo

地址

重要的事情说三遍,官方demo很重要!!!

官方demo对于每一种方法,每种回调都说的很清楚;

若是maven项目可以引入如下依赖:


		
		

		
		
		

2.登陆蚂蚁金服官网,配置个人信息

蚂蚁金服开发者中心 https://openhome.alipay.com/platform/appDaily.htm

  1. 进入沙箱环境

  1. 进入沙箱环境,配置AppkID等信息

密钥需要自己生成,appID和支付宝网关是已经给好的,网关有dev字样,表明是用于开发测试。点那个设置 可以下载生成公钥

  1. 配置密钥

注意:

点击上图的生成方法 下载 跟你系统对用的 程序,然后生成 相应的 密匙

如果没有设置过,此时显示文本是"设置应用公钥",我这里是已经设置过得

查看你的公钥把 公钥的字符串 复制过去 AlipayConfig.java 里面

3.Natapp购买免费隧道,用于内外网穿透

地址

配置隧道端口

4.代码

  1. 代码结构

博主这里为了方便,就用了jsp页面

  1. 支付代码展示
package com.example.demo.controller;

import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.internal.util.AlipaySignature;
import com.alipay.api.request.AlipayTradePagePayRequest;
import com.example.demo.config.AlipayConfig;
import com.example.demo.pojo.Orders;
import com.example.demo.pojo.Product;
import com.example.demo.service.OrdersService;
import com.example.demo.service.ProductService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

/**
 * @Classname AlipayController
 * @Description TODO
 * @Date 2019/3/21 20:40
 * @Created by 爆裂无球
 */
@Controller
@RequestMapping("/alipay")
public class AlipayController {

    private static final Logger LOGGER = LoggerFactory.getLogger(AlipayController.class);


    @Autowired
    private ProductService productService;

    @Autowired
    private OrdersService ordersService;


    /**
     * 对应官方例子   alipay.trade.page.pay.jsp
     *
     * @Title: AlipayController.java
     * @Description: 前往支付宝第三方网关进行支付
     * Copyright: Copyright (c) 2019
     * Company:FURUIBOKE.SCIENCE.AND.TECHNOLOGY
     * @Classname AlipayController
     * @Description notify_url 和 return_url 需要外网可以访问,建议natapp 内网穿透
     * @Date 2019/3/21 20:40
     * @Created by 爆裂无球
     */
    @PostMapping("goAlipay")
    @ResponseBody
    public String goAlipay(String orderId, HttpServletRequest request, HttpServletRequest response) throws Exception {

        Orders order = ordersService.getOrderById(orderId);

        Product product = productService.getProductById(order.getProductId());

        //获得初始化的AlipayClient
        AlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.gatewayUrl, AlipayConfig.app_id, AlipayConfig.merchant_private_key, "json", AlipayConfig.charset, AlipayConfig.alipay_public_key, AlipayConfig.sign_type);

        //设置请求参数
        AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();
        alipayRequest.setReturnUrl(AlipayConfig.return_url);
        alipayRequest.setNotifyUrl(AlipayConfig.notify_url);

        //商户订单号,商户网站订单系统中唯一订单号,必填
        String out_trade_no = orderId;
        //付款金额,必填
        String total_amount = order.getOrderAmount();
        //订单名称,必填
        String subject = product.getName();
        //商品描述,可空
        String body = "用户订购商品个数:" + order.getBuyCounts();

        // 该笔订单允许的最晚付款时间,逾期将关闭交易。取值范围:1m~15d。m-分钟,h-小时,d-天,1c-当天(1c-当天的情况下,无论交易何时创建,都在0点关闭)。 该参数数值不接受小数点, 如 1.5h,可转换为 90m。
        String timeout_express = "10m";

        //例子去官方api找
        alipayRequest.setBizContent("{\"out_trade_no\":\"" + out_trade_no + "\","
                + "\"total_amount\":\"" + total_amount + "\","
                + "\"subject\":\"" + subject + "\","
                + "\"body\":\"" + body + "\","
                + "\"timeout_express\":\"" + timeout_express + "\","
                + "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}");


        //请求
        String result = alipayClient.pageExecute(alipayRequest).getBody();

        return result;
    }


/*
 * 功能:支付宝服务器同步通知页面  return_url.jsp  return_url必须放在公网上
 * 日期:2017-03-30
 * 说明:
 * 以下代码只是为了方便商户测试而提供的样例代码,商户可以根据自己网站的需要,按照技术文档编写,并非一定要使用该代码。
 * 该代码仅供学习和研究支付宝接口使用,只是提供一个参考。
*/

    /**
     * @Title: AlipayController.     对应官方例子return_url.jsp    return_url必须放在公网上  回跳页面
     * @Description: 支付宝同步通知页面
     * Copyright: Copyright (c) 2019
     * @Classname AlipayController
     * @Description TODO
     * @Date 2019/3/22 01:31
     * @Created by 爆裂无球
     */
    @RequestMapping("alipayReturnNotice")
    public String alipayReturnNotice(HttpServletRequest request, HttpServletRequest response, Map map) throws Exception {

        LOGGER.info("支付成功, 进入同步通知接口...");

        //获取支付宝GET过来反馈信息
        Map

版权声明:本文由暴裂无球原创出品,转载请注明出处!

本文链接:http://blog.csdn.net/weixin_42437633/article/details/88751283


  支付    SpringBoot 

赞助本站,网站的发展离不开你们的支持!
来说两句吧
最新评论
  • 不落阁
    不落阁
    我为大家做了模拟留言与回复!试试吧!

    Absolutely
    Absolutely这是用户回复内容

    2017-03-18 18:26回复

    Absolutely
    Absolutely 回复 不落阁这是第二个用户回复内容

    2017-03-18 18:26回复