zoukankan      html  css  js  c++  java
  • Springboot整合支付宝支付加内网穿透工具实现本地回调

    640?wx_fmt=gif

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

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

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

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

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

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

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

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

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

    640?wx_fmt=png

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

    生成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

    640?wx_fmt=png

    然后生成密钥:

    640?wx_fmt=png

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

    如下图:

    640?wx_fmt=png

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

    640?wx_fmt=png

    配置成功,现在配置项目

    打开配置文件添加配置:

    640?wx_fmt=png

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

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

      @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

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

    640?wx_fmt=png

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

    640?wx_fmt=jpeg

    支付宝支付是需要回调的

    推荐一个内网穿透工具Ngrok

    使用方法:

    640?wx_fmt=png

    640?wx_fmt=png

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

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

    有问题的话可以在公众号内留言,我会第一时间回复

    或者回复“内网” 获得工具

    长按识别二维码,了解更多


    640?wx_fmt=jpeg


                                                  

                                             

    640?wx_fmt=gif

  • 相关阅读:
    Android源码编译jar包BUILD_JAVA_LIBRARY 与BUILD_STATIC_JAVA_LIBRARY的区别(一)
    模块化开发
    最近理解记忆
    ES6语法—— 模块化开发之import和export命令详解
    关于阿里图标库Iconfont生成图标的三种使用方式(fontclass/unicode/symbol)
    2.新知-display:inline-block元素之间空隙的产生原因和解决办法
    规避同源
    vue总结
    vue组件通信
    vue 多次学习
  • 原文地址:https://www.cnblogs.com/felordcn/p/12142498.html
Copyright © 2011-2022 走看看