2021最新版 支付宝沙箱 SpringBoot


前言

我就是个沙雕,用错类,搞了一天。但我就是想喷,垃圾沙箱,不人性化,解释都不清楚,搞的很累。手机版的app在今天也无法登录与注册。估计很久没更新了还什么。文档也可能只更新了部分。信息错乱

步骤

总的步骤就是生成密钥,获取支付宝的密钥,接着用一个类发送请求,返回得到的是一个String,String是一个Form表单,会自动提交跳转到支付宝支付页面。

1. 生成密钥

这儿已经有在线版的生成密钥了,不再需要下载应用

点击生成密钥,再下载一下密钥,这儿的公钥要放在下一个网站里生成一个支付宝的公钥

到时候在类中使用的是密钥支付宝的公钥

2. 点击进入研发服务

记住这三个玩意儿,都是有用的

3. 点击RSA2...密钥

在下面放入之前的公钥,就会提供一个支付宝公钥


小插曲:(因为我以前是搞过一次的,但是忘记了,所以不知道初次注册的操作会不会有出入。这儿比较疑惑的就是上图的公钥证书,可能第一次弄必须得搞这个公钥证书吧,公钥证书又得去第一个网址中生成CSR文件,然后导入。如果不需要弄这个公钥证书那是最好的了,还麻烦。)

左侧导航栏看商家信息按理是都存在的,如果不存在可能就是要搞公钥证书


最后

最后就是要弄类了

maven导入

        <!-- 支付 -->
        <dependency>
            <groupId>com.alipay.sdk</groupId>
            <artifactId>alipay-sdk-java</artifactId>
            <version>4.13.32.ALL</version>
        </dependency>

Impl

import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.domain.AlipayTradePagePayModel;
import com.alipay.api.request.AlipayTradePagePayRequest;
import com.alipay.api.response.AlipayTradePagePayResponse;
import org.springframework.stereotype.Service;

@Service
public class OrderServiceImpl {

    final static String APP_ID = "第二个网址的APPID";
    final static String APP_PRIVATE_KEY = "第一个网址的私钥";
    final static String ALIPAY_PUBLIC_KEY = "第二个网址的支付宝公钥";

    public String pay() {

        //实例化客户端
        AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipaydev.com/gateway.do",
                APP_ID,
                APP_PRIVATE_KEY,
                "json",
                "utf-8",
                ALIPAY_PUBLIC_KEY,
                "RSA2");

        AlipayTradePagePayRequest request = new AlipayTradePagePayRequest();

        AlipayTradePagePayModel model = new AlipayTradePagePayModel();
        model.setOutTradeNo("20150320010112312323");
        model.setProductCode("FAST_INSTANT_TRADE_PAY");
        model.setSubject("Iphone6 16G");
        model.setTotalAmount("0.01");
        //以上四个为必选内容。ProductCode是写死的,订单号这些可以自己生成
        //model.setTimeoutExpress("30m");
        request.setBizModel(model);

        request.setReturnUrl("https://xxx");//据说是支付成功后返回的页面
        request.setNotifyUrl("https://xxx");//回调的页面,可以用来执行支付成功后的接口调用什么的
        // 这两个据说都得是外网能访问的,不是localhost那种,而且不能传参
        try {
            AlipayTradePagePayResponse response = alipayClient.pageExecute(request);
            System.out.println(response.getBody());//输出的就是Form表单
            return response.getBody();
        } catch (AlipayApiException e) {
            e.printStackTrace();
        }
        return null;
    }
}

实现类写在这儿了,像以前古老版本的有GitHub的,用的JSP。我这的就是Controller调用Impl,然后Controller接口直接return这个String,页面就会根据这个String的Form表单

自动进行跳转(因为Form下面有写js)。如果无误的话,就能到支付界面了。

然后再使用之前的商家信息页面的账号密码,支付

附带AlipayTradePagePayModel API

结尾

以下只是我的吐槽,可以不用看了

我是个憨批,起初在密钥那困了许久,实在不懂他在讲什么,因为我跳转一直说签名有问题,但其实最大的问题是我用错类了!!!!

AlipayTradePagePayRequest、AlipayTradePagePayModel,这是网页版正确的两个类,

首先!我用的是App的!!!应该是AlipayTradeAppPayRequest、AlipayTradeAppPayModel

然后一直出错,charset一改成utf-8就直接,我一度以为和charset有关,网上根本找不到这答案

如果我charset是gbk,下图。并且setObject等一些参数必须用中文!!!不用中文就也是上面那张图一样!

然后!我看了各种博客以后,发现原来不是App,我就把App删了!还是错误错误错误

最后才注意到用的是Page的,被我自己蠢哭


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM