Springboot 整合支付宝支付加内网穿透工具实现

发布时间:2019/03/08| 阅读:

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

**

项目中我们集成了支付宝, 用户可以使用支付宝来进行支付

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

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

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

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

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

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

@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;

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

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

生成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) 密钥

如下图:

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

配置成功,现在配置项目

打开配置文件添加配置:

商户私钥就是刚刚生成的私钥
支付宝公钥不是我们生成的公钥,是支付宝给我们的公钥
切记 不然签名校验会不通过

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

@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 "请求失败";
    }

返回结果:

https://qr.alipay.com/bax06188ujygeuazvcah0008

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

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

支付宝支付是需要回调的

推荐一个内网穿透工具 Ngrok

使用方法:

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


📚相关文章