支付宝沙箱环境使用详解

第一步、开通支付宝开放平台账户  https://open.alipay.com/

第二步、选择沙箱环境,按照官方文档操作即可 https://opendocs.alipay.com/common/02kkv7

进入沙箱控制台 https://open.alipay.com/develop/sandbox/app

第三步、配置接口的加密方式,选择自定义密钥

商户生成一对应用公钥和应用私钥,应用私钥商户需要自行保管,用于支付时的加密操作,应用公钥需要上传给支付宝用于对商户的支付进行验证。同时支付宝也会根据商户上传的应用公钥生成一对支付宝应用公钥和私钥,其中支付宝私钥用于对支付结果进行加密,支付宝公钥交给商户用于对支付结果的验证,支付宝私钥则由支付宝秘密保管,不对外公开。

将生成的应用公钥填入沙箱控制台的接口加密配置中,保存后支付宝沙箱会根据填入的应用公钥生成一个支付宝公钥

整合进项目

1、引入依赖:

参考官网:https://opendocs.alipay.com/open/54/103419

通用版,需要jdk1.6+

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

简化版,需要jdk1.8+

<dependency>
    <groupId>com.alipay.sdk</groupId>
    <artifactId>alipay-easysdk</artifactId>
    <version>2.2.0</version>
</dependency>

推荐使用通用版

  1. 配置参数,使用自定义配置动态配置

@Getter
@Setter
@Component
@PropertySource("classpath:/pay/alipay.properties")
@ConfigurationProperties(prefix = "alipay")
public class AliPayProperties {

    /**
     * 在支付宝中注册的应用ID
     */
    private String appId;

    /**
     * 开发者应用私钥,由开发者自己生成
     */
    private String privateKey;

    /**
     * 支付宝公钥,由支付宝生成
     */
    private String publicKey;

    /**
     * 支付宝网关(固定)
     */
    private String serverUrl;

    /**
     * 服务器异步支付结果通知页面路径,必须外网可以正常访问
     */
    private String notifyUrl;

    /**
     * 页面跳转同步通知页面路径,必须外网可以正常访问 商户可以自定义同步跳转地址
     */
    private String returnUrl;

    /**
     * 参数返回格式,只支持 JSON 格式(固定)
     */
    private String format;

    /**
     * 编码集,支持 GBK/UTF-8
     */
    private String charset;

    /**
     * 生成签名字符串所使用的签名算法类型,目前支持 RSA2 和 RSA,推荐使用 RSA2。
     */
    private String signType;
}

// @PropertySource 和 @ConfigurationProperties
// 组合使用,可以将属性文件与一个Java类绑定,将属性文件中的变量值注入到该Java类的成员变量中。也就是从默认的应用配置文件取值改为从指定文件取值
// alipay.properties 中的内容使用 Unicode 编码

alipay.properties 中的配置内容如下:

alipay.appId=\u5E94\u7528\u7F16\u53F7
alipay.privateKey=\u5E94\u7528\u79C1\u94A5
alipay.publicKey=\u652F\u4ED8\u5B9D\u516C\u94A5\uFF0C
alipay.serverUrl=\u652F\u4ED8\u5B9D\u652F\u4ED8\u7F51\u5173\uFF0C\u6C99
alipay.notifyUrl=https://openapi.alipaydev.com/gateway.do
alipay.returnUrl=https://openapi.alipaydev.com/gateway.do
alipay.format=\u652F\u4ED8\u5B9D\u516C\u94A5\u8BC1\u4E66
alipay.charset=\u652F\u4ED8\u5B9D\u6839\u8BC1\u4E66
alipay.signType=\u652F\u4ED8\u5B9D\u6839\u8BC1\u4E66

配置阿里支付操作代理对象:

@Configuration
public class AliPayConfig {

    @Bean
    @SneakyThrows
    public AlipayClient alipayClient(AliPayProperties properties) {
        AlipayConfig config = new AlipayConfig();
        config.setAppId(properties.getAppId());
        config.setPrivateKey(properties.getPrivateKey());
        config.setAlipayPublicKey(properties.getPublicKey());
        config.setServerUrl(properties.getServerUrl());
        config.setFormat(properties.getFormat());
        config.setCharset(properties.getCharset());
        config.setSignType(properties.getSignType());
        return new DefaultAlipayClient(config);
    }
}

简单测试:

@Autowired
private AlipayClient alipayClient;
 
@Autowired
private AliPayProperties properties;
 
@Test
public void aliPayTest() throws AlipayApiException {
    AlipayTradePagePayRequest request = new AlipayTradePagePayRequest();
    AlipayTradePagePayModel model = new AlipayTradePagePayModel();
    // 商户订单号,必填
    model.setOutTradeNo("123456789");
    // 付款金额,必填
    model.setTotalAmount("2023");
    // 订单商品名称,必填
    model.setSubject("商品SKU,魅族20");
    // 商品描述,可空
    model.setBody("PC支付测试");
    request.setBizModel(model);
    // 设置支付结果消息通知地址
    request.setNotifyUrl(properties.getNotifyUrl());
    // 设置支付之后的重定向地址
    request.setReturnUrl(properties.getReturnUrl());

    request.setBizContent("{\"out_trade_no\":\""+ model.getOutTradeNo() +"\","
                + "\"total_amount\":\""+ model.getTotalAmount() +"\","
                + "\"subject\":\""+ model.getSubject() +"\","
                + "\"body\":\""+ model.getBody() +"\","
                + "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}");
    AlipayTradePagePayResponse response = alipayClient.pageExecute(request);
    System.out.println(response.getBody());
}

将打印的内容复制到一个html文件中,然后打开,效果如下:

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

龙茶清欢

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值