前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Springboot整合支付宝支付加内网穿透工具实现本地回调

Springboot整合支付宝支付加内网穿透工具实现本地回调

作者头像
码农小胖哥
发布2019-12-10 17:20:24
8330
发布2019-12-10 17:20:24
举报
项目中我们集成了支付宝,用户可以使用支付宝来进行支付

项目测试时,我们当然也需要一套测试环境对支付流程进行测试

如果我们使用线上的支付宝配置进行测试,那么我们必须使用真实货币进行支付

并且支付的金额会进入生产环境的支付宝绑定银行卡中,造成诸多不便

这里,支付宝为测试提供了一个沙箱环境,使我们可以使用虚拟货币进行支付测试

这篇文章就来详细说一下支付宝沙箱环境的配置和使用

首先创建支付宝配置文件类:

代码语言:javascript
复制
@Configuration
@Data
public class AliPayConfig {

    /**
     * 应用ID,您的APPID,收款账号既是您的APPID对应支付宝账号
     */
    @Value("${sdk.alipay.appID}")
    private String appID;

    /**
     * 商户私钥,您的PKCS8格式RSA2私钥
     */
    @Value("${sdk.alipay.merchantPrivateKey}")
    private String merchantPrivateKey;

    /**
     * 支付宝公钥
     */
    @Value("${sdk.alipay.alipayPublicKey}")
    private String alipayPublicKey;

    /**
     * 签名方式
     */
    @Value("${sdk.alipay.signType}")
    private String signType;

    /**
     * 网关
     */
    @Value("${sdk.alipay.gatewayUrl}")
    private String gatewayUrl;

    /**
     * 编码
     */
    @Value("${sdk.alipay.charset}")
    private String  charset;

    /**
     * 异步通知地址
     */
    @Value("${sdk.alipay.notifyUrl}")
    private String notifyUrl;

    /**
     * 类型
     */
    @Value("${sdk.alipay.format}")
    private String format;

    /**
     * 商户号
     */
    @Value("${sdk.alipay.sysServiceProviderId}")
    private String  sysServiceProviderId;

登陆支付宝开放平台进行沙箱环境配置

注意:沙箱环境的支付宝网关、公钥私钥都和正式不同,现在做的是沙箱环境的模拟支付

代码语言:javascript
复制
生成RSA密钥:https://docs.open.alipay.com/291/106074
上传应用公钥并获取支付钥:https://docs.open.alipay.com/291/105972/
使用应用私钥生成请求签名:https://docs.open.alipay.com/291/105974/
使用支付宝公钥验签:https://docs.open.alipay.com/291/106074/
下载密匙生成工具:https://docs.open.alipay.com/291/105971

然后生成密钥:

生成公钥 私钥以后把公钥上传到支付宝,在开发者配置中点击 RSA2(SHA256)密钥

如下图:

上传成功之后点击查看支付宝公钥,注意这里不要搞反了在配置文件中我们要的是支付宝给我们的公钥不是我们刚刚生成的公钥!

配置成功,现在配置项目

打开配置文件添加配置:

代码语言:javascript
复制
商户私钥就是刚刚生成的私钥
支付宝公钥不是我们生成的公钥,是支付宝给我们的公钥
切记 不然签名校验会不通过

添加生成支付代码,简单创建支付没有加参数和业务代码:

代码语言:javascript
复制
  @Override
    public String payWithAliPay() throws AlipayApiException {
        /**
         * 业务代码
         */
        String order_no = UUID.randomUUID().toString();    //77777777
        String body = "";
        String total_fee = "999.99";  //真实金钱
        AlipayClient alipayClient = new DefaultAlipayClient(aliPayConfig.getGatewayUrl(), aliPayConfig.getAppID(), aliPayConfig.getMerchantPrivateKey(), aliPayConfig.getFormat(),
                aliPayConfig.getCharset(), aliPayConfig.getAlipayPublicKey(), aliPayConfig.getSignType()); //获得初始化的AlipayClient
        AlipayTradePrecreateRequest request = new AlipayTradePrecreateRequest();//创建API对应的request类
        JSONObject jsonObject = new JSONObject();
        /**
         * 订单号
         */
        jsonObject.put("out_trade_no", order_no);
        /**
         * 支付金额
         */
        jsonObject.put("total_amount", total_fee);
        jsonObject.put("body", "");
        /**
         * 订单主题
         */
        jsonObject.put("subject", "测试支付宝支付");
        /**
         * 订单支付有效时间
         */
        jsonObject.put("timeout_express", "90m");
        request.setBizContent(jsonObject.toString());
        request.setNotifyUrl(aliPayConfig.getNotifyUrl());
        AlipayTradePrecreateResponse response = alipayClient.execute(request);
        System.err.print(response.getBody());
        //根据response中的结果继续业务逻辑处理
        if (response.getMsg().equals("Success")) {
            String qrcode = response.getQrCode();
            return qrcode;
//            return qrcode;
        }
        return "请求失败";

    }

返回结果:

代码语言:javascript
复制
https://qr.alipay.com/bax06188ujygeuazvcah0008

生成二维码,这里就不使用代码生成了

下载沙箱支付宝进行扫描:

支付宝支付是需要回调的

推荐一个内网穿透工具Ngrok

使用方法:

把地址copy到项目的支付宝回调地址中即可

GIT地址:https://github.com/sunluomeng/springboot-alipay

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-11-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 码农小胖哥 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档