支付宝 沙箱环境 支付接口对接上卷

本文介绍了如何配置支付宝沙箱环境,包括设置回调网址、选择接口加签方式、生成和管理秘钥。在前端和后端分别进行了准备工作,如配置YAML文件、创建配置类,并展示了如何在后端调用接口生成待支付页面。此外,还提供了前端解析后端响应以展示待支付表单的方法。
摘要由CSDN通过智能技术生成

1 登录开放平台  搜索 沙箱

这里可以配置 异步回调/同步回调网址,已经选择接口加签方式,做测试可使用默认的秘钥,
选择公钥模式即可,也可尝试下载秘钥生成工具。

秘钥生成工具:小程序文档 - 支付宝文档中心
2 在搜索框搜 索秘钥工具

选择一篇文档点入

根据自己需求下载相应客户端,***安装在纯英文路径下***

安装完成后打开客户端,点击生成私钥
 

 然后,用自己的 公钥  去沙箱的:  沙箱应用——自定义私钥 位置 换取 支付宝的 公钥
注意:将自己的公私钥和 支付宝的公钥 用一个 TXT 文件保存一下,待会要用

3  前端准备一个请求调用 后端接口 生成待支付页面  前期准备大概就这样,接下来准备后端代码:

 3.1:在application.yaml中配置 对接需要的参数,之前打开的页面就有,先保存到TXT文档,再复制过来,防止格式错误 。 ***务必注意区分网关,防止出现APPID报错***

# 配置alipay数据
alipay:
  # 您的APPID,收款账号就是您APPID对应的支付宝账号
  APPID: 
  # 商户私钥,您的PKCS8格式RSA2私钥
  RSA_PRIVATE_KEY: "商户私钥"
  # 支付宝支付公钥
  ALIPAY_PUBLIC_KEY: "支付宝支付公钥"
  # 异步回调地址 必须外网能够访问(这里需要配置内网穿透),当支付成功后会调用该API
  notify_url: 
  # 同步回调地址 必须外网能够访问
  return_url: 
  # 网关(注意沙箱网关和正式网关的区别,这里填写沙箱环境下的网关)
  URL: https://openapi-sandbox.dl.alipaydev.com/gateway.do
  # 编码
  CHARSET: UTF-8
  # 返回数据格式
  FORMAT: json
  # 日志地址
  log_path: /log
  # RSA2
  SIGNTYPE: RSA2

3.2 准备一个配置类读取配置参数,后边业务层实现类需要调用,也方便后期维护

package com.jd.basic.config;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

/**
 * @Author: xiyang
 * @FileName: AlipayConfig
 * @Date: Created in 2021/8/5 10:32
 * @Vserion:
 * @Description: TODO
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
@Component
public class AlipayConfig {

    /**
     * 商户appid
     */
    @Value("${alipay.APPID}")
    public String APPID;

    /**
     * 私钥 pkcs8格式的
     */
    @Value("${alipay.RSA_PRIVATE_KEY}")
    public String RSA_PRIVATE_KEY;
    /**
     * 服务器异步通知页面路径
     * 需http://或者https://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问
     */
    @Value("${alipay.notify_url}")
    public String notify_url;

    /**
     * 页面跳转同步通知页面路径
     * 需http://或者https://格式的完整路径,不能加?id=123这类自定义参数,
     * 必须外网可以正常访问 商户可以自定义同步跳转地址
     */
    @Value("${alipay.return_url}")
    public String return_url;

    /**
     * 请求网关地址
     */
    @Value("${alipay.URL}")
    public String URL;

    /**
     * 编码
     */
    @Value("${alipay.CHARSET}")
    public String CHARSET;

    /**
     * 返回格式
     */
    @Value("${alipay.FORMAT}")
    public String FORMAT;

    /**
     * 支付宝公钥
     */
    @Value("${alipay.ALIPAY_PUBLIC_KEY}")
    public String ALIPAY_PUBLIC_KEY;

    /**
     * 日志记录目录定义在 logFile 中
     */
    @Value("${alipay.log_path}")
    public String log_path;

    /**
     * RSA2
     */
    @Value("${alipay.SIGNTYPE}")
    public String SIGNTYPE;


}

3.3 controller层接口自行准备 ,这里只提供业务层连接代码, 传入的参数和返回参数根据自己业务调整。

注意:***我这里返回的AjaxResult只是装数据用的数据传输类  实际有效的是下边这段代码中的response 对象,里边含有 支付宝提供的 form待支付表单,需要在前端将这个待支付表单取出并展示
            AlipayTradePagePayResponse response = alipayClient.pageExecute(request);

 @Override
    public AjaxResult alipay(PayDto payDto) {
        /**
         * 1. 获取阿里客户端
         * 2. 获取阿里请求对象
         * 3. 设置请求参数
         * 4. 设置同步通知回调路径
         * 5. 设置异步通知回调路径
         */
        try {

            AlipayClient alipayClient = new DefaultAlipayClient(alipayConfig.getURL(), alipayConfig.getAPPID(), alipayConfig.getRSA_PRIVATE_KEY(), "json", "utf-8", alipayConfig.getALIPAY_PUBLIC_KEY(), "RSA2");
            System.out.println(alipayConfig.getAPPID());
            AlipayTradePagePayRequest request = new AlipayTradePagePayRequest();

//异步接收地址,仅支持http/https,公网可访问

            request.setNotifyUrl(alipayConfig.getNotify_url());

//同步跳转地址,仅支持http/https

            request.setReturnUrl(alipayConfig.getReturn_url());

/******必传参数******/

            JSONObject bizContent = new JSONObject();

//商户订单号,商家自定义,保持唯一性

            bizContent.put("out_trade_no", "6465465465465");

//支付金额,最小值0.01元

            bizContent.put("total_amount", 0.01);

//订单标题,不可使用特殊符号

            bizContent.put("subject", "测试商品");

//电脑网站支付场景固定传值FAST_INSTANT_TRADE_PAY

            bizContent.put("product_code", "FAST_INSTANT_TRADE_PAY");


/******可选参数******/

//bizContent.put("time_expire", "2022-08-01 22:00:00");


 商品明细信息,按需传入

//JSONArray goodsDetail = new JSONArray();

//JSONObject goods1 = new JSONObject();

//goods1.put("goods_id", "goodsNo1");

//goods1.put("goods_name", "子商品1");

//goods1.put("quantity", 1);

//goods1.put("price", 0.01);

//goodsDetail.add(goods1);

//bizContent.put("goods_detail", goodsDetail);


 扩展信息,按需传入

//JSONObject extendParams = new JSONObject();

//extendParams.put("sys_service_provider_id", "2088511833207846");

//bizContent.put("extend_params", extendParams);


            request.setBizContent(bizContent.toString());

            AlipayTradePagePayResponse response = alipayClient.pageExecute(request);

            if (response.isSuccess()) {

                System.out.println("调用成功");
                return AjaxResult.success(response);

            } else {

                System.out.println("调用失败");
                return AjaxResult.error("系统繁忙");
            }
        } catch (AlipayApiException e) {
            throw new RuntimeException(e);
        }

    }

4 前端解析后端响应的待支付表单

这里提供两种解决方案:

4.1 准备一个div 双标签,添加一个id属性mydiv,用这段代码解析:$("#mydiv").html(res.data.resultObj.body);
4.2 直接用   document.write(res.data.resultObj.body); 完成解析即可展示待支付界面

支付宝沙箱环境对接-下卷

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值