项目支付接入支付宝【沙箱环境】

简介: 该博客文章详细介绍了如何在PC端项目中接入支付宝支付功能,特别是在沙箱环境中的配置和实现步骤。文章提供了详细的配置指南,包括获取支付宝公钥和私钥、配置沙箱应用环境、生成密钥、设置服务端代码以及调用支付接口等步骤,并附有相应的代码示例和说明。

前言

订单支付接入支付宝,使用支付宝提供的沙箱机制模拟为订单付款。我这里主要记录一下沙箱环境如何接入到系统中,具体细节的实现。按照官方文档来就可以了。

1、使用步骤

这里有几个重要数据要拿到,一个是支付宝的公钥和私钥,一个是支付的网关,和支付的APPID。这几个数据是要写到代码中的
官方手册:文档

1.1 配置沙箱应用环境

开放平台控制台 > 开发工具推荐,点击 沙箱 进入沙箱环境

在这里插入图片描述

在这里插入图片描述

1.2 配置接口加签方式

接入系统使用自定义密钥,等下要添加公钥和私钥。

在这里插入图片描述

1.2 密钥生成器

需要下载对应版本的密钥生成器。本机使用的是windows。直接无脑安装下一步。地址

在这里插入图片描述在这里插入图片描述

在这里插入图片描述

将生成的公钥和私钥填入到这边

在这里插入图片描述

1.4 沙箱账号

就是付款的时候模拟的账户信息和付款密码。以及收款商家

在这里插入图片描述

2、订单支付接入支付宝

2.1 pom添加依赖

        <!-- 支付宝sdk -->
        <!-- https://mvnrepository.com/artifact/com.alipay.sdk/alipay-sdk-java -->
        <dependency>
            <groupId>com.alipay.sdk</groupId>
            <artifactId>alipay-sdk-java</artifactId>
            <version>4.9.28.ALL</version>
        </dependency>

2.2 服务端代码配置

沙箱环境调试接口时,开发者需调整如下代码配置:

• 支付宝网关地址 修改为:https://openapi.alipaydev.com/gateway.do
• APPID 切换为沙箱的 APPID
• 签名方式 使用 RSA2
• 根据配置的密钥/证书,选择对应加签代码设置商户应用私钥和支付宝公钥。

这里将这些数据抽取成配置文件。你也可以直接写死在代码里边

#支付宝相关的配置
alipay.app_id=你的id
alipay.merchant_private_key= 你的私钥
alipay.alipay_public_key=你的公钥
alipay.notify_url=http://497n86m7k7.52http.net/payed/notify //这个是下单后的通知
alipay.return_url=http://member.zyz.com/memberOrder.html
alipay.sign_type=RSA2
alipay.charset=utf-8
alipay.gatewayUrl=https://openapi.alipaydev.com/gateway.do

封装的接口,具体参数可以参考官方文档接口调用说明【接口API调用说明】


@ConfigurationProperties(prefix = "alipay")
@Component
@Data
public class AlipayTemplate {

    // 应用ID,您的APPID,收款账号既是您的APPID对应支付宝账号
    public String app_id;

    // 商户私钥,您的PKCS8格式RSA2私钥
    public String merchant_private_key;

    // 支付宝公钥,查看地址:https://openhome.alipay.com/platform/keyManage.htm 对应APPID下的支付宝公钥。
    public String alipay_public_key;

    // 服务器[异步通知]页面路径  需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问
    // 支付宝会悄悄的给我们发送一个请求,告诉我们支付成功的信息
    public String notify_url;

    // 页面跳转同步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问
    //同步通知,支付成功,一般跳转到成功页
    public String return_url;

    // 签名方式
    private  String sign_type;

    // 字符编码格式
    private  String charset;

    //订单超时时间
    private String timeout = "1m";

    // 支付宝网关; https://openapi.alipaydev.com/gateway.do
    public String gatewayUrl;

    public  String pay(PayVo vo) throws AlipayApiException {

        //AlipayClient alipayClient = new DefaultAlipayClient(AlipayTemplate.gatewayUrl, AlipayTemplate.app_id, AlipayTemplate.merchant_private_key, "json", AlipayTemplate.charset, AlipayTemplate.alipay_public_key, AlipayTemplate.sign_type);
        //1、根据支付宝的配置生成一个支付客户端
        AlipayClient alipayClient = new DefaultAlipayClient(gatewayUrl,
                app_id, merchant_private_key, "json",
                charset, alipay_public_key, sign_type);

        //2、创建一个支付请求 //设置请求参数
        AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();
        alipayRequest.setReturnUrl(return_url);
        alipayRequest.setNotifyUrl(notify_url);

        //商户订单号,商户网站订单系统中唯一订单号,必填
        String out_trade_no = vo.getOut_trade_no();
        //付款金额,必填
        String total_amount = vo.getTotal_amount();
        //订单名称,必填
        String subject = vo.getSubject();
        //商品描述,可空
        String body = vo.getBody();

        alipayRequest.setBizContent("{\"out_trade_no\":\""+ out_trade_no +"\","
                + "\"total_amount\":\""+ total_amount +"\","
                + "\"subject\":\""+ subject +"\","
                + "\"body\":\""+ body +"\","
                + "\"timeout_express\":\""+timeout+"\","
                + "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}");

        String result = alipayClient.pageExecute(alipayRequest).getBody();

        //会收到支付宝的响应,响应的是一个页面,只要浏览器显示这个页面,就会自动来到支付宝的收银台页面
        System.out.println("支付宝的响应:"+result);

        return result;

    }
}

2.3 调用支付接口

调用封装好的接口方法: String pay = alipayTemplate.pay(payVo); 关于为何传入这个参数,请自行查询沙箱案例Demo。各个参数代表的意义

    /**
     * 用户下单:支付宝支付
     * 1、让支付页让浏览器展示
     * 2、支付成功以后,跳转到用户的订单列表页
     * @param orderSn
     * @return
     * @throws AlipayApiException
     */
    @ResponseBody
    @GetMapping(value = "/aliPayOrder",produces = "text/html")
    public String aliPayOrder(@RequestParam("orderSn") String orderSn) throws AlipayApiException {

        PayVo payVo = orderService.getOrderPay(orderSn);
        String pay = alipayTemplate.pay(payVo);
        System.out.println(pay);
        return pay;
    }

2.4 单独的支付案例

在这里插入图片描述

直接下载运行一下,可以看看
在这里插入图片描述

3、实现的效果

3.1 订单支付页面

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

alipay.notify_url=http://497n86m7k7.52http.net/payed/notify
//这个是下单后的通知
这个就是自己内网的访问地址。也就是订单支付成功后,调用这个接口方法,然后修改订单的状态。所以要做一个内网穿透。就是让外部网络可以访问到内部网路

在这里插入图片描述

相关文章
|
7月前
|
Java 应用服务中间件 开发工具
如何使用支付宝沙箱环境支付并公网调用sdk创建支付单服务
如何使用支付宝沙箱环境支付并公网调用sdk创建支付单服务
SpringBoot+支付宝:实现沙箱支付全过程
SpringBoot+支付宝:实现沙箱支付全过程
854 0
|
Java 应用服务中间件 API
调用支付宝第三方支付接口详解(沙箱环境)
调用支付宝第三方支付接口详解(沙箱环境)
调用支付宝第三方支付接口详解(沙箱环境)
|
Java
23、【支付模块开发】——Java对接支付宝步骤(沙箱环境)
1、下载导入项目 https://docs.open.alipay.com/54/104506 打开支付宝接口官网: image.png 我们下载Java版Demo 下载之后解压,然后我们用IDEA导入这个Demo项目~ image.
2287 0
|
5月前
|
数据安全/隐私保护 开发者
支付系统12----使用沙箱,沙箱的使用步骤,沙箱参数的获取,支付宝应用要具备,创建应用,绑定应用,配置密钥,上线应用,签约功能,才能够完成使用,最后签约,要上传企业的营业的营业执照
支付系统12----使用沙箱,沙箱的使用步骤,沙箱参数的获取,支付宝应用要具备,创建应用,绑定应用,配置密钥,上线应用,签约功能,才能够完成使用,最后签约,要上传企业的营业的营业执照
|
5月前
|
数据安全/隐私保护 Windows
支付系统08-----支付宝支付---接入准备----创建应用,如果你有营业执照,网站有备案,就可以进行接入,真实的企业用户在做的时候,也可以用沙箱进行隔离,设置独立环境,隔离线上模式进行调试
支付系统08-----支付宝支付---接入准备----创建应用,如果你有营业执照,网站有备案,就可以进行接入,真实的企业用户在做的时候,也可以用沙箱进行隔离,设置独立环境,隔离线上模式进行调试
|
7月前
|
移动开发 前端开发 小程序
毕业设计中使用支付宝沙箱完成在线支付流程(二)
毕业设计中使用支付宝沙箱完成在线支付流程
237 0
毕业设计中使用支付宝沙箱完成在线支付流程(二)
|
7月前
|
网络协议 Java 应用服务中间件
如何使用支付宝的沙箱环境在本地配置模拟支付并发布至公网测试
如何使用支付宝的沙箱环境在本地配置模拟支付并发布至公网测试
|
7月前
|
Java 应用服务中间件 开发工具
Java开发者必备:支付宝沙箱环境支付远程调试指南
Java开发者必备:支付宝沙箱环境支付远程调试指南
如何配置支付宝沙箱环境
如何配置支付宝沙箱环境
162 0