SpringBoot+支付宝支付(沙箱)

这篇具有很好参考价值的文章主要介绍了SpringBoot+支付宝支付(沙箱)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

开发前准备

easy支付官方文档:

工具 | 网页&移动应用

通用版文档:

通用版 | 网页&移动应用

有基础的可以直接看文档自己搭建,官方文档写的很详细。

支付宝沙箱配置

1、注册支付宝开发者账户,进入开发者控制台

(有支付宝账户的直接支付宝扫码登入即可)

支付宝开放平台

 文章来源地址https://www.toymoban.com/news/detail-458721.html

https://auth.alipay.com/login(这个直接登入到控制台)

 

沙箱快捷入口

登录 - 支付宝

2、进入沙箱

SpringBoot+支付宝支付(沙箱)

 

 

沙箱界面

SpringBoot+支付宝支付(沙箱)

 

 

3、下载支付宝开放平台开发助手,生成应用公钥和应用私钥(重点)

开发助手下载地址: 生成密钥 | 开放平台

载后直接安装,打开后直接生成秘钥,生成秘钥后电脑会有两个文件,分别保存有应用公钥和应用私钥

注:安装路径不要有中文,不要有空格

SpringBoot+支付宝支付(沙箱)

 

 

双击安装下载好的开发助手

点击生成秘钥,选择PKCS8(JAVA适用)

SpringBoot+支付宝支付(沙箱)

 

4、配置支付宝沙箱公钥

将应用公钥复制下来,然后到沙箱应用中配置生成支付宝公钥

SpringBoot+支付宝支付(沙箱)

SpringBoot+支付宝支付(沙箱)

 

5、沙箱账号说明

  • 商家

    用于收款的一方

  • 买家

    付款的一方,建议沙箱客户端登入该账号

沙箱环境支付,只能使用这两个账号实现支付功能。

SpringBoot+支付宝支付(沙箱)

 

 

6、沙箱工具

客户端用于手机端支付唤醒支付宝进行支付,以及网页端二维码支付时手机扫码支付

SpringBoot+支付宝支付(沙箱)

 

SpringBoot中配置

1、导入依赖

alipay-sdk 完整版 (支持中文的subject)

<dependency>
   <groupId>com.alipay.sdk</groupId>
   <artifactId>alipay-sdk-java</artifactId>
   <version>4.22.110.ALL</version>
</dependency>

遇到的坑:

alipay-easysdk版不支持中文的subject

2、AliPayConfig配置类

public class AliPayConfig {
    // 应用ID,APPID,收款账号既是APPID对应支付宝账号
    public static String app_id = "2021000120617096";
    // 商户私钥,PKCS8格式RSA2私钥  刚刚生成的私钥直接复制填写
    public static String merchant_private_key ="";
    // 支付宝公钥,对应APPID下的支付宝公钥,别填成商户公钥
    public static String alipay_public_key ="";
    // 服务器异步通知页面路径  需http://格式的完整路径,其实就是支付完成后返回的页面URL
//    public static String notify_url = neturl+"/alipay/notify_url";
    public static String notify_url ="";
    // 页面跳转同步通知页面路径 需http://格式的完整路径,其实就是你的一个支付完成后返回的页面URL
//    public static String return_url = neturl+"/alipay/return_url";
    public static String return_url ="";
    // 签名方式
    public static String sign_type = "RSA2";
    // 字符编码格式
    public static String charset = "utf-8";
    // 支付宝网关
    public static String gatewayUrl = "https://openapi.alipaydev.com/gateway.do";
}

3、AliPayBean

@Data
public class AlipayBean implements Serializable {
​
    /**
     * 商户订单号
     */
    private String out_trade_no;
​
    /**
     * 订单名称
     */
    private String subject;
​
    /**
     * 付款金额
     */
    private String total_amount;
​
    /**
     * 商品描述
     */
    private String body;
​
    /**
     * 产品编号,支付方式不同,传的数据不同
     */
    //如果是PC网页支付,这个是必传参数
    private String product_code = "FAST_INSTANT_TRADE_PAY";
    //如果是扫码支付,这个是选传参数
    //private String product_code = "FACE_TO_FACE_PAYMENT";
}

4、AliPayController

​
@Controller
@Slf4j
@RequestMapping("/payment")
public class AlipayController extends BaseController{
    @Autowired
    private OrdersService ordersService;
​
    @SneakyThrows
    @RequestMapping("/pay")
    @ResponseBody
    

手机版的支付宝支付跳转(会跳转到app)

 public void aliPay() {
        AlipayClient alipayClient = new DefaultAlipayClient(AliPayConfig.gatewayUrl, AliPayConfig.app_id, AliPayConfig.merchant_private_key, "json", AliPayConfig.charset, AliPayConfig.alipay_public_key, AliPayConfig.sign_type);
        AlipayTradeWapPayRequest request = new AlipayTradeWapPayRequest();
        request.setNotifyUrl(AliPayConfig.notify_url);
        request.setReturnUrl(AliPayConfig.return_url);
        JSONObject bizContent = new JSONObject();
        bizContent.put("out_trade_no","111111");
        bizContent.put("total_amount", "0,01");
        bizContent.put("subject", "a");
        bizContent.put("product_code", "QUICK_WAP_WAY");
        bizContent.put("time_expire", LocalDateTime.now().plusMinutes(30));
//
        request.setBizContent(bizContent.toString());
//        AlipayTradeWapPayResponse response = alipayClient.pageExecute(request);
        String result = null;
        try {
            result = alipayClient.pageExecute(request).getBody();
        } catch (AlipayApiException e) {
            e.printStackTrace();
        }
        log.info("返回结果={}",result);
    }
}

Web版的支付宝扫码支付

@SneakyThrows
    @RequestMapping("/pay")
    @ResponseBody
    public void aliPay() {
        //获得初始化的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();
        //商户订单号,,必填
        String order_number = new String("1111123");
        //付款金额,从前台获取,必填
        String total_amount = new String("201314");
        //订单名称,必填
        String subject = new String("NewBoy");
        aliPayRequest.setBizContent("{\"out_trade_no\":\"" + order_number + "\","
                + "\"total_amount\":\"" + total_amount + "\","
                + "\"subject\":\"" + subject + "\","
                + "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}");
        //请求
        String result = null;
        try {
            result = alipayClient.pageExecute(aliPayRequest).getBody();
        } catch (AlipayApiException e) {
            e.printStackTrace();
        }
        //输出
        log.info("返回结果={}",result);
    }

5、WebMvcConfig放行payment

  @Override
    protected void addInterceptors(InterceptorRegistry registry) {
        log.info("加载了用户权限拦截器");
        //不拦截的地址
        List<String> urls = Arrays.asList(new String[]{
                "/employee/login",
                "/employee/logout",
                "/backend/**",
                "/front/**",
                "/common/**",
                "/user/sendMsg",
                "/user/login",
                "/swagger-ui.html/**",
                "/payment/**"
        });
        registry.addInterceptor(new CheckLoginInterceptor()).addPathPatterns("/**").excludePathPatterns(urls);
    }

6.支付阶段测试

postman请求支付接口

SpringBoot+支付宝支付(沙箱)

 

控制台打印以下内容代表成功

SpringBoot+支付宝支付(沙箱)

点击链接跳转到该页面(有些直接跳转会出现验签错误)

SpringBoot+支付宝支付(沙箱)

 

7、支付成功回调方法(AliPayController)

@Controller
@Slf4j
@RequestMapping("/payment")
public class AlipayController extends BaseController{
    @SneakyThrows
    @RequestMapping(value = "/notify",method = {RequestMethod.GET,RequestMethod.HEAD,RequestMethod.POST})  // 注意这里必须是POST接口
    @ResponseBody
    public void payNotify() {
        if (request.getParameter("trade_status").equals("TRADE_SUCCESS")) {
            System.out.println("=========支付宝异步回调========");
​
            Map<String, String> params = new HashMap<>();
            Map<String, String[]> requestParams = request.getParameterMap();
            for (String name : requestParams.keySet()) {
                params.put(name, request.getParameter(name));
                // System.out.println(name + " = " + request.getParameter(name));
            }
            String tradeNo = params.get("out_trade_no");
            String gmtPayment = params.get("gmt_payment");
            String alipayTradeNo = params.get("trade_no");
                System.out.println("交易名称: " + params.get("subject"));
                System.out.println("交易状态: " + params.get("trade_status"));
                System.out.println("支付宝交易凭证号: " + params.get("trade_no"));
                System.out.println("商户订单号: " + params.get("out_trade_no"));
                System.out.println("交易金额: " + params.get("total_amount"));
                System.out.println("买家在支付宝唯一id: " + params.get("buyer_id"));
                System.out.println("买家付款时间: " + params.get("gmt_payment"));
                System.out.println("买家付款金额: " + params.get("buyer_pay_amount"));
                // 更新订单为已支付(4)
        }
    }
}
​

8、沙箱配置回调网关

SpringBoot+支付宝支付(沙箱)

SpringBoot+支付宝支付(沙箱)

 

 

内网穿透

简单来说内网穿透:让外网能访问你本地的应用,例如在外网打开你本地http://127.0.0.1的指向Web站点。

内网穿透工具:花生壳(收费)、Natapp(免费)

SpringBoot+支付宝支付(沙箱)

 

 

Natapp注册

在这里我们使用一个免费的内网穿透工具:Natapp:NATAPP官网

在这里有详细教程:一分钟的natapp快速新手教程,在文档中已经提供

  1. 首先注册一个用户,要提供手机号

    SpringBoot+支付宝支付(沙箱)

     

  2. 购买隧道,如果是免费隧道,需要进行实名认证和支付宝认证。

    SpringBoot+支付宝支付(沙箱)

     

  3. 购买一个免费隧道

    SpringBoot+支付宝支付(沙箱)

     

     

  4. 后期还可以在"我的隧道"中修改

    SpringBoot+支付宝支付(沙箱)

     

natapp的使用

  1. 在这里复制authtoken,在natapp中配置的时候需要用到

SpringBoot+支付宝支付(沙箱)

 

  1. 找到natapp目录下的config.ini文件,把其中的authtoken改成上面的值

SpringBoot+支付宝支付(沙箱)

 

  1. 运行natapp,生成外网随机访问的地址。注:免费的生成地址不稳定,半小时可能会变了。

SpringBoot+支付宝支付(沙箱)

 

 

注:支付成功回调地址就是上面的外网域名加上你的接口方法地址

例如:http://fzkvax.natappfree.cc/payment/notify

 

 

 

 

 

到了这里,关于SpringBoot+支付宝支付(沙箱)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SpringBoot集成沙箱支付

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

    2024年02月03日
    浏览(44)
  • Java集成支付宝沙箱支付,详细教程(SpringBoot完整版)

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 easy支付官方文档:https://opendocs.alipay.com/open/009ys9 通用版文档:https://opendocs.alipay.com/open/02np94 支付宝沙箱的配置: 注册支付宝开发者账户,进入开发者控制台 沙箱快捷入口: https://open.alipay.com/develop/

    2024年02月20日
    浏览(53)
  • SpringBoot项目(支付宝整合)——springboot整合支付宝沙箱支付 & 从极简实现到IOC改进

    1.springboot整合支付宝沙箱支付; 2.准备工作:沙箱api,内网穿透; 3.极简实现理解支付,异步回调等; 4.按照spring依赖注入的思想改造基础demo; https://gitee.com/pet365/springboot-alipay 支付宝开放平台 (alipay.com) 支付参数 natapp.cn官网 启动和配置 订单ID,需要唯一;价格;物品名称(

    2024年02月11日
    浏览(42)
  • Java开发者必备:支付宝沙箱环境支付远程调试指南

    🔥 博客主页 : 小羊失眠啦. 🔖 系列专栏 : C语言 、 Linux 、 Cpolar ❤️ 感谢大家点赞👍收藏⭐评论✍️ 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 在沙箱环境调试支付SDK的时候,往往沙箱环境部署在本地

    2024年02月08日
    浏览(57)
  • 最新demo版|如何0-1开发支付宝小程序之前期准备篇(一)

    小程序作为目前一种轻量、便捷的应用、目前应用越来越广泛了。 很多没有开发经验的开发同学可能初次接触就是小程序开发,为了详细讲解下小程序开发的步骤,我会按照小程序的开发流程一步一步从零开始给大家介绍下如何开发支付宝小程序,后续教程中会更新最新版

    2024年02月05日
    浏览(43)
  • 支付宝手机网站支付接入(沙箱环境)

    参考阿里云文档:https://docs.open.alipay.com/203/105285/ 手机网站支付产品包含两类API: 页面跳转类:需要从前端页面以Form表单的形式发起请求,浏览器会自动跳转至支付宝的相关页面(一般是收银台或签约页面),用户在该页面完成相关业务操作后再回跳到商户指定页面。例如本

    2024年02月08日
    浏览(44)
  • 使用natapp进行支付宝沙箱支付的回调

    支付宝沙箱支付要想处理支付成功后的逻辑,就必须进行支付回调,那么对于本地开发的我们,如何进行回调测试呢,今天就给大家带来一个解决方法,使用natapp工具来进行回调 使用NATAPP:官网地址 先下载工具,下载完之后可能没有config.ini文件,需要自己加上 config.ini 先注

    2024年04月10日
    浏览(48)
  • spring boot支付宝沙箱环境测试支付功能

    目录 一、安装支付宝支付demo 二、配置demo信息 三、配置回调地址和异步地址 四、内网穿透 (一)简介 (二)使用场景 (三)内网穿透的几个常用软件 (四)使用natapp 选择Java版本,下载后是一个eclipse项目 SDK Demo 获取 - 支付宝文档中心 (alipay.com) 导入ideal参考:IDEA导入Ec

    2024年01月17日
    浏览(54)
  • 基于 Spring Boot 支付宝沙箱支付(Java 版本)

    打开沙箱地址:https://open.alipay.com/develop/sandbox/app 需要获取 :AppId、支付宝网关地址、应用私钥、支付宝公钥 注册 https://natapp.cn/ 购买免费隧道 注意:需要记住这个 authtoken,配置文件用得到 配置隧道 文件 config 配置 配置文件需要与 natapp 放在同级目录下 启动 natapp 为什么要

    2024年01月23日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包