当前位置: 代码网 > it编程>编程语言>Java > SpringBoot基于沙箱环境实现支付宝支付教程

SpringBoot基于沙箱环境实现支付宝支付教程

2025年03月10日 Java 我要评论
一、支付宝沙箱环境介绍沙箱环境是支付宝开放平台为开发者提供的安全低门槛的测试环境,开发者在沙箱环境中调用接口无需具备所需的商业资质,无需绑定和开通产品,同时不会对生产环境中的数据造成任何影响。合理使用

一、支付宝沙箱环境介绍

沙箱环境是支付宝开放平台为开发者提供的安全低门槛的测试环境,开发者在沙箱环境中调用接口无需具备所需的商业资质,无需绑定和开通产品,同时不会对生产环境中的数据造成任何影响。

合理使用沙箱环境,可以让研发流程与商业流程并行,降低联调资损风险,加速项目的交付。

更为详细的说明可以看官方文档:https://opendocs.alipay.com/common/02kkv7

二、沙箱环境准备

2.1 注册入驻支付宝开放平台

登录支付宝开放平台,支付宝登录平台,找到开发接入入驻为开发者。

2.2 配置沙箱环境

进入到开发者的控制台,找到最下方的开发者工具推荐 ,点击沙箱。

2.3 沙箱应用

获取支付参数信息

打开沙箱应用后,需要拿到3个参数,appid,应用私钥,支付宝公钥,用于对接支付接口使用。

支付宝网关里的https://不要复制,会帮我们自动拼接

三、springboot 结合 支付宝沙箱

3.1 pom.xml

<!--引入支付宝sdk -->
		<!-- https://mvnrepository.com/artifact/com.alipay.sdk/alipay-easysdk -->
		<dependency>
			<groupid>com.alipay.sdk</groupid>
			<artifactid>alipay-easysdk</artifactid>
			<version>2.2.2</version>
		</dependency>

3.2 application.yml

spring:
  application:
    name:
      springboot_pay
alipay:
  appid: 9021000137619573
  appprivatekey: miievqibadanbgkqhkig9w0baqefaascbkcwggsjageaaoibaqc43mr6yjcpwwdhb+d+2fxatyjdejjrnkj78ky6od2hatvawsqvg/dw9sr3bouit2rvoc6aqiem7cjq3gqevw15dn8q4uh+lwxbb5aujcjgr2fvp0elqhlnknugxacpgzfqlcpiygcgi6zqrrgta2pcd3tyjnbgyo18c4ozllwhpokr2ml7fi/f0h0irmm+zymupy2l/q5zjcf2y7z7cvfefof+wi06crcfpfqe9mjffh/mnhmdgxmy/mqvfe1slcpulmri2wmdkv34dqzfq0b0cmbmbilwnfaa/qtej5xn3ksvnz2vs7fj9r5/z7peutheqt8oybdnzye2ojhskt1zagmbaaecggeacc1tsff457z2p53izxydf//ol6cuxjjfp3skk8mhwvtcn/zyhrnz6xd23sxsy570izksforxbofqzf7nsas7vyweus3pptmfwvffeqrhippidtyog2mkhm7kdkfouk2/4j/tqieyduxg/lsjasyd1p9hmrc8szcr7ermhvia82y9d078bprdzedjcfriln8jxikpmcnezpcsmi2vwpkqiemo62hiuyd3iqur+s0mymlkh229hu4c9rbj+mcjudj9ewkyt7dhtmhfculqvae/lgqukru4zeidy1ebvicj2sexmh0ocu11cupieu2ksi5zainndr7basqrg90u+jfs7qkbgqdqbmv1/s8x6cu/gfgmljrvkanr6c+n0ehezj/53howzopyvi1qalmfpk7vemukpxvybmo/h+isbahq1+s2gw3cseqdimgrc1+s1dhkrgfzhwtpvg3i1ribxfkhdnvaa6+hgtb/zijp0qurmgo+hipusemvcxnrv0l3tlwpco2g4wkbgqdj4ev/kopfk/xojhgn/kt6qhk+yocc59835qom3zx9f6klwgl+9neiefxrcq4kqdp4kcqzw+y5ds7lv5eygiwsuyvn2obcg+mlj0qisrmwe61mj1bcxok7c+1ild3+fyxmbxqp7zunog3rgwzazs99x5ouell/mems1n/pt1ndkwkbgqc0e4un34hn5hioz3h0bcm4yfschrzagp+xmdrfzgasvyimvyswjyhn1nahacy2a7ss5if7liqkt1yxw/cvruyahhtyn09tw9xp4slmfzp10rf2aknihxxmbkfhobbqni4gs4debm9pjylrlssv1o5bnhjcag9ycwzamo0veckfbwkbgbd+htswtal87ctfxayfojy/i65lh2ffvb/j9aitpbfkzuxs7iaye/bsphzqqwmg+lmd5z5ivww5f+wfcetahqnktrkx8k9dnbjkzkeobbgfbndcdoyt4qwk2n/7f8yfetr6/zmcnypmkznkg5um6kgpzqznub/ibsbba8eb/dfraogadm5wn1q8g6ub7qsxhffjir6kbvfrf3wmpdviidtks49t0wucvvlpntipgcsb99mewoezvwvmhn0rmcznhwx7fy4hb4fcjw57awvidkwxeci9gdy5vmg0urisd3wpzczxbtceruvixrgh/tacatq9/wpteq1vp0agyxojhqslxls=
  publickey: miibijanbgkqhkig9w0baqefaaocaq8amiibcgkcaqeareet6bxexkinvjjqooptyjjyjiy+4dhhxbk2bomuws2ol9xqstprkcz3gvwzg0ym1nivv/g970u8sixl7gn42cbpew3hvimcjicldn1qmaurtakoutut0rygf118wthny40rzysmbnds7ucv4yyni8/5dehhvufe4pzm3by8wy+anjlx9fwn1fbra8awnzmglcep92xgkiyhc7yc/dja7j4xc44mgwvchy8lnjv7cznoehsq9daew5mpjyvrcr1piwghw8d9tkz/t1goreiiejabwf3zzpeuhq85t1gboypkwgtsb2ve8ribp3efkbqorgoc9ay7cnmkz8krtruk4widaqab
# 回调函数的地址 http://localhost:8080/api/alipay/notify
#  要使用公网地址,用路由侠进行内网穿透
  notifyurl: https://o4662e9430.vicp.fun/api/alipay/notify
  gatewayhost: openapi-sandbox.dl.alipaydev.com

3.3 对应的配置类

package com.by.config;

import com.alipay.easysdk.factory.factory;
import com.alipay.easysdk.kernel.config;
import lombok.data;
import org.springframework.boot.context.properties.configurationproperties;
import org.springframework.stereotype.component;

import javax.annotation.postconstruct;

@component
@configurationproperties(prefix = "alipay")
@data
public class alipayconfig {
    // 应用id

    private string appid;
    // 应用私钥
    private string appprivatekey;
    // 支付宝公钥
    private string publickey;
    // 回调接口路径,要进行内网穿透
    private string notifyurl;
    // 支付宝网关地址:配置文件中不要写https://,会自动补全
    private string gatewayhost;


    @postconstruct
    public void init(){
        config config = new config();
        // 基础配置
        config.protocol = "https";
        config.gatewayhost = this.gatewayhost;// 支付宝网关地址
        config.signtype = "rsa2";

        // 业务配置
        config.appid = this.appid;
        config.merchantprivatekey = this.appprivatekey;
        config.alipaypublickey = this.publickey;
        config.notifyurl = this.notifyurl;

        // 将配置信息, 添加到相应的工厂类
        factory.setoptions(config);
        system.out.println("支付宝初始化配置完成");

    }

}

3.4 支付接口,和支付的回调接口

package com.by.controller;

import com.alipay.easysdk.factory.factory;
import com.alipay.easysdk.payment.page.models.alipaytradepagepayresponse;
import org.springframework.web.bind.annotation.*;

import java.util.map;

@restcontroller
@requestmapping("/api/alipay")
public class paycontroller {

    /**
     * 订单支付接口, 核心是调用支付宝的 factory.payment.page().pay() 方法
     * @param subject  支付对象信息
     * @param outtradeno  订单号
     * @param totalamount 订单金额
     * @param returnurl   支付成功以后返回的页面地址
     * @return
     */
    @getmapping
    public string pay(string subject, string outtradeno, string totalamount,string returnurl) throws exception {
        alipaytradepagepayresponse response = factory.payment.page().pay(subject, outtradeno, totalamount, returnurl);
        string body = response.getbody();
        return body;
    }


    /**
     * 支付回调接口,如果支付成功,支付宝将会请求此接口,将成功信息返回
     */
    @postmapping("/notify")
    public string notify(@requestparam map parametermap) throws exception {
        string tradestatus = parametermap.getordefault("trade_status","").tostring();

        if (tradestatus.trim().equals("trade_success")) {
            // 验证请求的有效性
            if (factory.payment.common().verifynotify(parametermap)) {
                system.out.println("通过支付宝的验证");
                system.out.println("订单id:" + parametermap.get("out_trade_no"));
            }else {
                system.out.println("支付验证不通过");
            }
        }
        return "success";
    }

}

3.5 支付页面 apy.html

传递的参数用于支付接口接收 ,其中里的

  • subject 商品名称或交易标题
  • outtradeno 商户订单号
  • totalamount 订单总金额,单位为元
  • returnurl 订单返回url,本来应该为http://localhost:8080/payok.html?orderid=1001,要传递一个下单id,因为有问号,所以要进行url编码

<body>
<a href="/api/alipay?subject=商品支付&outtradeno=3123&totalamount=16.8&returnurl=http%3a%2f%2flocalhost%3a8080%2fpayok.html%3forderid%3d1001" rel="external nofollow"  class="a">
    <img src="https://zhengxin-pub.bj.bcebos.com/logopic/a9936a369e82e0c6c42112674a5220e8_fullsize.jpg?x-bce-process=image/resize,m_lfit,w_200" alt="支付宝支付">
    <h2>支付宝支付</h2>
</a>
</body>

3.6 支付成功的页面 payok.html

<div class="alert alert-primary" role="alert">
    支付成功
</div>

四、测试

4.1 访问http://localhost:8080/pay.html

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com