精华内容
下载资源
问答
  • java 支付宝支付demo

    2016-12-14 14:45:09
    java 支付宝支付demo
  • Java支付宝支付

    千次阅读 2019-07-04 14:32:36
    Java支付宝支付 一:支付宝支付接入准备工作: 首先,支付宝支付和微信支付意愿,都是只支持企业用户,个人用户是不能接入支付宝支付的,所以要想接入支付宝支付,首先需要有支付宝的企业账号,有了企业账号才能拿...

    Java支付宝支付

    一:支付宝支付接入准备工作:

    首先,支付宝支付和微信支付意愿,都是只支持企业用户,个人用户是不能接入支付宝支付的,所以要想接入支付宝支付,首先需要有支付宝的企业账号,有了企业账号才能拿到支付宝支付的所需参数,这些工作都是需要公司层面的人操作的,作为码农,只管拿到这些需要的参数就可以进行看文档,对接支付支付接口了。那支付宝支付都需要哪些参数呢,请看下面:

    	// 支付宝支付参数配置 //
        @Value("${ALIPAY.APPID}")
        protected String app_id;//应用ID,您的APPID,收款账号既是您的APPID对应支付宝账号
        @Value("${ALIPAY.PRIVATEKEY}")
        protected String merchant_private_key;//商户私钥,您的PKCS8格式RSA2私钥
        @Value("${ALIPAY.PUBLICKEY}")
        protected String alipay_public_key;//支付宝公钥,查看地址:https://openhome.alipay.com/platform/keyManage.htm 对应APPID下的支付宝公钥。
        @Value("${ALIPAY.NOTIFY_URL}")
        protected String notify_url;//服务器异步通知页面路径
        @Value("${ALIPAY.RETURNA_URL}")
        protected String return_url;//页面跳转同步通知页面路径
        @Value("${ALIPAY.SIGN}")
        protected String sign_type = "RSA2";//签名方式
        protected String charset = "utf-8";//字符编码格式
        @Value("${ALIPAY.GATEWAY_URL}")
        protected String gateway_url;//支付宝网关
    
    

    上面就是支付宝支付需要的各类参数,在开始写代码之前,需要先把这些参数配置好才能进行下面的工作。
    二:支付宝(电脑网站支付)接口说明:
    首页访问支付宝的开放平台:https://docs.open.alipay.com/270 ,然后查看快速接入文档,首先是创建应用,然后是配置密钥,最好是搭建和配置开放环境。配置好上面的各项工作,下面来看下支付宝支付的接口说明:
    alipay.trade.page.pay(PC场景下单并支付)
    支付流程
    在这里插入图片描述
    公共参数
    请求地址:

    环境 HTTPS请求地址
    正式环境 https://openapi.alipay.com/gateway.do

    公共请求参数:
    在这里插入图片描述
    请求参数
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    三:下载支付宝的SDK

    下载地址:https://docs.open.alipay.com/270/106291/, 下载后可以导入本地,然后修改对应的配置,就可以测试支付接口了

    四:安装支付宝的SDKmaven依赖

    由于我们准备使用支付宝提供的SDK实现支付接口的对接,所以需要把支付宝的SDK安装到我们的本地maven仓库,安装命令如下:

    mvn install:install-file -DgroupId=com.alipay.api -DartifactId=alipay-sdk-java20170324180803 -Dversion=1.0.0 -Dpackaging=jar -Dfile=D://alipay-sdk-java20170324180803.jar
    

    安装好支付宝的SDK后,就可以在maven项目里面引用该依赖了,如下:

    !--支付宝SDK-->
            <dependency>
                <groupId>com.alipay.api</groupId>
                <artifactId>alipay-sdk-java20170324180803</artifactId>
                <version>1.0.0</version>
            </dependency>
    

    五:支付宝支付的核心代码

    AlipayVo.java

    package com.micai.springboot.vo.pay;
     
    import java.io.Serializable;
     
    /**
     * @Auther: Mike
     * @Date: 2018/8/30 15:14
     * @Description: 支付请求参数
     */
    public class AlipayVo implements Serializable {
     
        private static final long serialVersionUID = 1L;
        /**
         * 订单名称
         */
        private String subject;
        /**
         * 商户网站唯一订单号
         */
        private String out_trade_no;
        /**
         * 该笔订单允许的最晚付款时间
         */
        private String timeout_express;
        /**
         * 付款金额
         */
        private String total_amount;
        /**
         * 销售产品码,与支付宝签约的产品码名称
         */
        private String product_code;
     
        public String getSubject() {
            return subject;
        }
     
        public void setSubject(String subject) {
            this.subject = subject;
        }
     
        public String getOut_trade_no() {
            return out_trade_no;
        }
     
        public void setOut_trade_no(String out_trade_no) {
            this.out_trade_no = out_trade_no;
        }
     
        public String getTimeout_express() {
            return timeout_express;
        }
     
        public void setTimeout_express(String timeout_express) {
            this.timeout_express = timeout_express;
        }
     
        public String getTotal_amount() {
            return total_amount;
        }
     
        public void setTotal_amount(String total_amount) {
            this.total_amount = total_amount;
        }
     
        public String getProduct_code() {
            return product_code;
        }
     
        public void setProduct_code(String product_code) {
            this.product_code = product_code;
        }
    }
    

    PayBaseController.java

    package com.micai.springboot.controller.pay;
     
    import com.micai.springboot.base.BaseController;
    import org.springframework.beans.factory.annotation.Value;
     
    /**
     * @Auther: Mike
     * @Date: 2018/8/31 13:40
     * @Description:
     */
    public abstract class PayBaseController extends BaseController {
     
        // 支付宝支付参数配置 //
        @Value("${ALIPAY.APPID}")
        protected String app_id;//应用ID,您的APPID,收款账号既是您的APPID对应支付宝账号
        @Value("${ALIPAY.PRIVATEKEY}")
        protected String merchant_private_key;//商户私钥,您的PKCS8格式RSA2私钥
        @Value("${ALIPAY.PUBLICKEY}")
        protected String alipay_public_key;//支付宝公钥,查看地址:https://openhome.alipay.com/platform/keyManage.htm 对应APPID下的支付宝公钥。
        @Value("${ALIPAY.NOTIFY_URL}")
        protected String notify_url;//服务器异步通知页面路径
        @Value("${ALIPAY.RETURNA_URL}")
        protected String return_url;//页面跳转同步通知页面路径
        @Value("${ALIPAY.SIGN}")
        protected String sign_type = "RSA2";//签名方式
        protected String charset = "utf-8";//字符编码格式
        @Value("${ALIPAY.GATEWAY_URL}")
        protected String gateway_url;//支付宝网关
     
        // 微信支付参数配置 //
        @Value("${WXPAY.APPID}")
        protected String APPID;//公众账号ID
        @Value("${WXPAY.MCHID}")
        protected String MCHID;//微信支付商户号
        @Value("${WXPAY.KEY}")
        protected String KEY;//API密钥
        @Value("${WXPAY.APPSECRET}")
        protected String APPSECRET;//AppSecret是APPID对应的接口密码
        @Value("${WXPAY.NOTIFY_URL}")
        protected String NOTIFY_URL;//回调地址。测试回调必须保证外网能访问到此地址
        @Value("${WXPAY.CREATE_IP}")
        protected String CREATE_IP;//发起请求的电脑IP
     
    }
    

    AlipayController.java

    package com.micai.springboot.controller.pay;
     
    import com.alibaba.fastjson.JSONObject;
    import com.alipay.api.AlipayApiException;
    import com.alipay.api.AlipayClient;
    import com.alipay.api.DefaultAlipayClient;
    import com.alipay.api.internal.util.AlipaySignature;
    import com.alipay.api.request.AlipayTradePagePayRequest;
    import com.google.gson.Gson;
    import com.micai.springboot.vo.pay.AlipayVo;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.PostMapping;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
     
    import javax.servlet.http.HttpServletRequest;
    import java.io.UnsupportedEncodingException;
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.Map;
    import java.util.UUID;
     
    /**
     * @Auther: Mike
     * @Date: 2018/8/30 15:11
     * @Description: 支付宝后台接口
     */
    @RestController
    @RequestMapping(value = "/alipay")
    public class AlipayController extends PayBaseController {
     
        /**
         * 支付网站扫码支付接口-统一下单支付接口
         * @return
         * @throws AlipayApiException
         */
        @GetMapping("/pay")
        private String alipayPay() throws AlipayApiException {
            //这个应该是从前端端传过来的,这里为了测试就从后台写死了
            AlipayVo vo = new AlipayVo();
            vo.setOut_trade_no(UUID.randomUUID().toString().replace("-", ""));
            vo.setTotal_amount("0.01");
            vo.setSubject("nelson-test-title");
            vo.setProduct_code("FAST_INSTANT_TRADE_PAY"); //这个是固定的
            String json = new Gson().toJson(vo);
            logger.info("json: {}", json);
     
            AlipayClient alipayClient = new DefaultAlipayClient(gateway_url, app_id, merchant_private_key, "json",charset,alipay_public_key,sign_type);
            // 设置请求参数
            AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();
            alipayRequest.setReturnUrl(return_url);
            alipayRequest.setNotifyUrl(notify_url);
            alipayRequest.setBizContent(json);
            String result = alipayClient.pageExecute(alipayRequest).getBody();
            logger.info("result: {}", result);
            return result; //这里生成一个表单,会自动提交
        }
     
        /**
         * 支付宝服务器异步通知页面
         * @param request
         * @param out_trade_no 商户订单号
         * @param trade_no 支付宝交易凭证号
         * @param trade_status 交易状态
         * @return
         * @throws AlipayApiException
         */
        @PostMapping("/notify")
        public String alipayNotify(HttpServletRequest request, String out_trade_no, String trade_no, String trade_status) throws AlipayApiException {
            Map<String, String> params = getParamsMap(request);
            logger.info("notify params: {}", JSONObject.toJSON(params));
            // 验证签名
            boolean signVerified = AlipaySignature.rsaCheckV1(params, alipay_public_key, charset, sign_type);
            logger.info("notify signVerified: {}", signVerified);
            if (signVerified) {
                //处理你的业务逻辑,更细订单状态等
                return ("success");
            } else {
                logger.info("验证失败,不去更新状态");
                return ("fail");
            }
        }
     
        /**
         * 支付宝服务器同步通知页面
         * @param request
         * @param out_trade_no 商户订单号
         * @param trade_no 支付宝交易凭证号
         * @param total_amount 交易状态
         * @return
         * @throws AlipayApiException
         */
        @GetMapping("/return")
        public String alipayReturn(HttpServletRequest request, String out_trade_no,String trade_no,String total_amount) throws AlipayApiException {
            Map<String, String> params = getParamsMap(request);
            logger.info("return params: {}", JSONObject.toJSON(params));
     
            // 验证签名
            boolean signVerified = AlipaySignature.rsaCheckV1(params, alipay_public_key, charset, sign_type);
            logger.info("return signVerified: {}", signVerified);
     
            if (signVerified) {
                return ("success");
            } else {
                logger.info("验证失败,不去更新状态");
                return ("fail");
            }
        }
     
        private Map<String, String> getParamsMap(HttpServletRequest request) {
            Map<String,String> params = new HashMap<>();
            Map requestParams = request.getParameterMap();
            for (Iterator iter = requestParams.keySet().iterator(); iter.hasNext();) {
                String name = (String) iter.next();
                String[] values = (String[]) requestParams.get(name);
                String valueStr = "";
                for (int i = 0; i < values.length; i++) {
                    valueStr = (i == values.length - 1) ? valueStr + values[i]
                            : valueStr + values[i] + ",";
                }
                //乱码解决,这段代码在出现乱码时使用
                try {
                    valueStr = new String(valueStr.getBytes("ISO-8859-1"), "utf-8");
                    params.put(name, valueStr);
                } catch (UnsupportedEncodingException e) {
                    e.printStackTrace();
                }
            }
            return params;
        }
     
    }
    
    

    六:运行支付宝支付URL:http://dvnq2b.natappfree.cc/alipay/pay, 返回如下支付二维码页面:

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    支付宝回调日志如下,其中包括了同步回调和异步回调:

    在这里插入图片描述

    七:总结:

    经过上面的所以流程,相信大家都明白了支付宝支付的流程,这里我们对上面的流程做个总结,要想接入支付宝支付,必须是企业用户才行,个人用户不支持,所以在开始写代码之前,要和公司的相关负责人申请好支付宝支付的相关配置参数,有了这些才能进行下面的工作,这里最重要的一点就是支付宝支付的回调了,回调,在生产环境必须配置可以外网访问的URL,同时域名必须是备案过的,二级域名也可以,这里我们为了方便测试,所以就使用了内网穿透工具natapp,该工具既有免费通道也有收费通道,收费通道也很便宜,如果只是测试,免费通道就够用了,另外还有一点要注意,就是支付宝支付的回调,默认支付宝是回调多次的,所以会有重复回调的问题,这里留给大家一个思考,怎么防止支付宝的多次回调,以免影响业务,希望有兴趣的小伙伴可以留言交流。以上就是支付宝支付(电脑网站支付)的全部内容了

    展开全文
  • java 支付宝H5支付Demo

    2018-03-29 16:41:32
    java 支付宝H5支付Demo,已经成功使用在项目里,具体业务代码没有删除,请自动过滤业务层代码
  • java 支付宝APP支付Demo

    2018-03-29 16:40:27
    java 支付宝APP支付Demo,已经成功使用在项目里,具体业务代码没有删除,请自动过滤业务层代码
  • java支付宝支付

    2014-11-26 10:25:41
    包含了ASP、PHP、JAVA使用支付宝接口,支付实例(包含文档说明)
  • java支付宝支付退款

    2018-07-04 17:14:37
    java代码实现支付宝支付退款,代码已经封装,解压即用
  • java 支付宝支付

    千次阅读 2021-01-13 15:49:14
    支付宝支付前提 需开通支付宝支付服务 官网地址 文档地址 项目导入支付宝maven依赖 <...alipay-sdk-java</artifactId> <version>4.8.10.ALL</version> </dependency>

    支付宝支付前提

    需开通支付宝支付服务
    

    官网地址

    文档地址

    项目导入支付宝maven依赖

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

    相关配置文件, 读取配置文件

    // 配置文件,在项目resources目录下
    #ali
    alipay.public.key =
    alipay.private.key = 
    alipay.app.public.key =
    alipay.app.pay.notify.url = 
    alipay.app.id = 
    gateway_url = https://openapi.alipaydev.com/gateway.do
    
    // 读取配置文件类
    @Component
    public class SysConfig
    {
    
        public static final String ENCODING = "UTF-8";
        // 配置文件类名称
        public static final String CONFIG_PATH = "";
    
        private Properties props = null;
    
        /**
         * 获取全局唯一的SysConfig 对象
         *
         * @return
         */
        public static SysConfig getInstance()
        {
            SysConfig config = ConfigHolder.INSTANCE.getConf();
            config.init();
            return config;
        }
    
        /**
         * 初始化
         */
        private void init()
        {
            props = new Properties();
            loadConfigProps();
        }
    
        /**
         * 加载配置文件
         */
        public void loadConfigProps()
        {
            InputStream is = null;
            try
            {
                is = getClass().getResourceAsStream(CONFIG_PATH);
                props.load(is);
            }
            catch (IOException e)
            {
                e.printStackTrace();
            }
            finally
            {
                if (is != null)
                {
                    try
                    {
                        is.close();
                        is = null;
                    }
                    catch (Exception e)
                    {
                        e.printStackTrace();
                    }
                }
            }
        }
    
        public String getProperty(String key)
        {
            String tmp = props.getProperty(key);
            if (StringUtils.isNotEmpty(tmp))
            {
                return tmp.trim();
            }
            return tmp;
        }
    
        enum ConfigHolder
        {
            INSTANCE;
            SysConfig conf;
    
            ConfigHolder()
            {
                conf = new SysConfig();
            }
    
            public SysConfig getConf()
            {
                return conf;
            }
        }
    
    
    
    }
    
    

    初始化AlipayClient

    /**
         * 获得初始化的AlipayClient
         *
         * @return AlipayClient
         */
        private AlipayClient getAlipayClient() {
            // 获得初始化的AlipayClient
            return new DefaultAlipayClient(
                    //支付宝网关
                    SysConfig.getInstance().getProperty(EnumAlipayKey.gateway_url.getKey()),
                    //appid
                    SysConfig.getInstance().getProperty(EnumAlipayKey.app_id.getKey()),
                    //商户私钥
                    SysConfig.getInstance().getProperty(EnumAlipayKey.alipay_private_key.getKey()),
                    AlipayConstants.FORMAT_JSON,
                    //字符编码格式
                    AlipayConstants.CHARSET_UTF8,
                    //支付宝公钥
                    SysConfig.getInstance().getProperty(EnumAlipayKey.alipay_public_key.getKey()),
                    //签名方式
                    AlipayConstants.SIGN_TYPE_RSA2
            );
        }
    

    调用支付的request

    `		// 获得初始化的AlipayClient
            AlipayClient alipayClient = getAlipayClient();
            // 设置请求参数
            AlipayTradeAppPayRequest alipayRequest = new AlipayTradeAppPayRequest();
            // 服务器异步通知,支付宝会回调该路径,必须外网且不能有请求参数,获取回调参数校验后 处理自己业务逻辑(修改订单状态等等)
           	alipayRequest.setNotifyUrl(SysConfig.getInstance().getProperty(EnumAlipayKey.app_pay_notify_url.getKey()));
            // 封装参数
            AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();
            model.setOutTradeNo(orderSn);
            model.setTotalAmount(orderInfo.getPayPrice());
            model.setSubject(orderInfo.getCourseName());
            model.setBody("");
            model.setProductCode("FAST_INSTANT_TRADE_PAY");
            model.setTimeoutExpress("15m");
            alipayRequest.setBizModel(model);
    
    		//  请求支付宝进行支付,获取支付结果
    		String result = alipayClient.sdkExecute(alipayRequest).getBody();
    		log.info("支付结果:{}", result);
    
    
                
    

    调用查询订单request

    		// 获得初始化的AlipayClient
            AlipayClient alipayClient = getAlipayClient();
    
            AlipayTradeQueryRequest queryRequest = new AlipayTradeQueryRequest();
            AlipayTradeQueryModel queryModel = new AlipayTradeQueryModel();
            queryModel.setOutTradeNo(orderSn);
            queryRequest.setBizModel(queryModel);
    
            // 调用查询
            AlipayTradeQueryResponse execute = alipayClient.execute(queryRequest);
            log.info("返回结果:{}", execute.getBody()));
    

    退款,退款查询等等类似

    好啦, 就到这了,如有不足和疑问请留言

    展开全文
  • Java支付宝网页端支付Demo代码,喜欢的给好评哟
  • Java支付宝微信银联和H5支付功能,是做电商或支付功能必备神器,导入即用,无需更改,注释全面,坐等你来拿
  • java支付宝手机支付

    热门讨论 2016-09-14 13:57:12
    java版本 手机 PC 支付宝支付 下载dome 更改 config文件里面的私钥 公钥即可运行
  • Java 支付宝即时到账支付流程图+业务流程说明+关键参数
  • java支付宝支付(电脑网页支付&手机网页支付)springboot maven项目 pom.xml配置 <!-- https://mvnrepository.com/artifact/com.alipay.sdk/alipay-sdk-java --> <dependency> <groupId>...

    java支付宝支付(电脑网页支付&手机网页支付)springboot maven项目

    pom.xml配置

    <!-- https://mvnrepository.com/artifact/com.alipay.sdk/alipay-sdk-java -->
    		<dependency>
    			<groupId>com.alipay.sdk</groupId>
    			<artifactId>alipay-sdk-java</artifactId>
    			<version>4.9.124.ALL</version>
    		</dependency>
    

    AlipayConfig配置类

    package com.webber.cm.pay.config;
    
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.stereotype.Component;
    
    @Component
    public class AlipayConfig {
    
    	// 应用ID,您的APPID,收款账号既是您的APPID对应支付宝账号
    	public static String APPID;
    
    	// 支付宝网关
    	public static String URL;
    
    	// 商户私钥,您的PKCS8格式RSA2私钥
    	public static String RSA_PRIVATE_KEY;
    
    	// 支付宝公钥,查看地址:https://openhome.alipay.com/platform/keyManage.htm 对应APPID下的支付宝公钥。
    	public static String ALIPAY_PUBLIC_KEY;
    
    	// 服务器异步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问
    	public static String NOTIFY_URL;
    
    	// 页面跳转同步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问
    	public static String RETURN_URL;
    
    	// 签名方式
    	public final static String SIGNTYPE = "RSA2";
    
    	// 字符编码格式
    	public final static String CHARSET = "UTF-8";
    
    	// 返回格式
    	public final static String FORMAT = "json";
    
    	public static String getAPPID() {
    		return APPID;
    	}
    
    	@Value("${zhifubao.appid}")
    	public void setAPPID(String aPPID) {
    		APPID = aPPID;
    	}
    
    	public static String getURL() {
    		return URL;
    	}
    
    	@Value("${zhifubao.url}")
    	public void setURL(String uRL) {
    		URL = uRL;
    	}
    
    	public static String getRSA_PRIVATE_KEY() {
    		return RSA_PRIVATE_KEY;
    	}
    
    	@Value("${zhifubao.rsa_private_key}")
    	public void setRSA_PRIVATE_KEY(String rSA_PRIVATE_KEY) {
    		RSA_PRIVATE_KEY = rSA_PRIVATE_KEY;
    	}
    
    	public static String getALIPAY_PUBLIC_KEY() {
    		return ALIPAY_PUBLIC_KEY;
    	}
    
    	@Value("${zhifubao.alipay_public_key}")
    	public void setALIPAY_PUBLIC_KEY(String aLIPAY_PUBLIC_KEY) {
    		ALIPAY_PUBLIC_KEY = aLIPAY_PUBLIC_KEY;
    	}
    
    	public static String getNOTIFY_URL() {
    		return NOTIFY_URL;
    	}
    
    	@Value("${zhifubao.notify_url}")
    	public void setNOTIFY_URL(String nOTIFY_URL) {
    		NOTIFY_URL = nOTIFY_URL;
    	}
    
    	public static String getRETURN_URL() {
    		return RETURN_URL;
    	}
    
    	@Value("${zhifubao.return_url}")
    	public void setRETURN_URL(String rETURN_URL) {
    		RETURN_URL = rETURN_URL;
    	}
    }
    

    application.yml配置

    ########### 支付宝 ###################
    zhifubao:
      appid: 2016102300741651
      url: https://openapi.alipaydev.com/gateway.do
      rsa_private_key: MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBK......
      alipay_public_key: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQE......
      notify_url: http://127.0.0.1:8080/alipay/notify_url.jsp
      return_url: https://127.0.0.1:8080/ad/html-handler/paySuccess.html
    

    AliController.java

    package com.webber.cm.pay.controller;
    
    import org.apache.commons.lang.StringUtils;
    import org.springframework.web.bind.annotation.PostMapping;
    import org.springframework.web.bind.annotation.RequestBody;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    import com.alipay.api.AlipayApiException;
    import com.alipay.api.AlipayClient;
    import com.alipay.api.DefaultAlipayClient;
    import com.alipay.api.request.AlipayTradeCloseRequest;
    import com.alipay.api.request.AlipayTradeFastpayRefundQueryRequest;
    import com.alipay.api.request.AlipayTradePagePayRequest;
    import com.alipay.api.request.AlipayTradeQueryRequest;
    import com.alipay.api.request.AlipayTradeRefundRequest;
    import com.webber.cm.common.entity.AjaxResult;
    import com.webber.cm.log.aop.Log;
    import com.webber.cm.log.aop.LogOperType;
    import com.webber.cm.log.aop.LogType;
    import com.webber.cm.pay.config.AlipayConfig;
    import com.webber.cm.pay.pojo.AliPayBean;
    
    import io.swagger.annotations.Api;
    
    /**
     * 阿里接口
     */
    @Api(tags = "阿里接口")
    @RestController
    @RequestMapping("/ali")
    public class AliController {
    
    	// 获得初始化的AlipayClient
    	private static final AlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.URL, AlipayConfig.APPID,
    			AlipayConfig.RSA_PRIVATE_KEY, AlipayConfig.FORMAT, AlipayConfig.CHARSET, AlipayConfig.ALIPAY_PUBLIC_KEY,
    			AlipayConfig.SIGNTYPE);
    
    	/**
    	 * 支付
    	 */
    	@PostMapping("/pay")
    	@Log(logType = LogType.PC_LOG, logOperType = LogOperType.INSERT, detail = "支付宝-支付")
    	public String pay(AliPayBean aliPayBean) throws AlipayApiException {
    		if (aliPayBean == null) {
    			return "error";
    		}
    		if (StringUtils.isEmpty(aliPayBean.getOut_trade_no()) || StringUtils.isEmpty(aliPayBean.getTotal_amount())
    				|| StringUtils.isEmpty(aliPayBean.getSubject()) || StringUtils.isEmpty(aliPayBean.getBody())) {
    			return "error";
    		}
    		AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();
    		alipayRequest.setReturnUrl(AlipayConfig.RETURN_URL);
    		alipayRequest.setNotifyUrl(AlipayConfig.NOTIFY_URL);
    		alipayRequest.setBizContent(AliPayBean.toBizContent(aliPayBean));
    		String result = alipayClient.pageExecute(alipayRequest).getBody();
    		return result;
    	}
    
    	/**
    	 * 查询
    	 */
    	@PostMapping("/query")
    	@Log(logType = LogType.PC_LOG, logOperType = LogOperType.QUERY, detail = "支付宝-查询")
    	public AjaxResult query(@RequestBody String out_trade_no) throws AlipayApiException {
    		if (StringUtils.isEmpty(out_trade_no)) {
    			return AjaxResult.err("非法请求");
    		}
    		AlipayTradeQueryRequest alipayRequest = new AlipayTradeQueryRequest();
    		alipayRequest.setBizContent("{\"out_trade_no\":\"" + out_trade_no + "\"}");
    		String result = alipayClient.execute(alipayRequest).getBody();
    		return AjaxResult.succ(result);
    	}
    
    	/**
    	 * 退款
    	 */
    	@PostMapping("/refund")
    	@Log(logType = LogType.PC_LOG, logOperType = LogOperType.UPDATE, detail = "支付宝-退款")
    	public AjaxResult refund(@RequestBody String out_trade_no) throws AlipayApiException {
    		if (StringUtils.isEmpty(out_trade_no)) {
    			return AjaxResult.err("非法请求");
    		}
    		AlipayTradeRefundRequest alipayRequest = new AlipayTradeRefundRequest();
    		String refund_amount = "0.01";
    		String refund_reason = "申请退款";
    		alipayRequest.setBizContent("{\"out_trade_no\":\"" + out_trade_no + "\"," + "\"refund_amount\":\""
    				+ refund_amount + "\"," + "\"refund_reason\":\"" + refund_reason + "\"}");
    		String result = alipayClient.execute(alipayRequest).getBody();
    		return AjaxResult.succ(result);
    	}
    
    	/**
    	 * 退款查询
    	 */
    	@PostMapping("/refundQuery")
    	@Log(logType = LogType.PC_LOG, logOperType = LogOperType.QUERY, detail = "支付宝-退款查询")
    	public AjaxResult refundQuery(@RequestBody String out_trade_no) throws AlipayApiException {
    		if (StringUtils.isEmpty(out_trade_no)) {
    			return AjaxResult.err("非法请求");
    		}
    		AlipayTradeFastpayRefundQueryRequest alipayRequest = new AlipayTradeFastpayRefundQueryRequest();
    		String out_request_no = out_trade_no;
    		alipayRequest.setBizContent(
    				"{\"out_trade_no\":\"" + out_trade_no + "\"," + "\"out_request_no\":\"" + out_request_no + "\"}");
    		String result = alipayClient.execute(alipayRequest).getBody();
    		return AjaxResult.succ(result);
    	}
    
    	/**
    	 * 关闭
    	 */
    	@PostMapping("/close")
    	@Log(logType = LogType.PC_LOG, logOperType = LogOperType.OTHER, detail = "支付宝-关闭")
    	public AjaxResult close(@RequestBody String out_trade_no) throws AlipayApiException {
    		if (StringUtils.isEmpty(out_trade_no)) {
    			return AjaxResult.err("非法请求");
    		}
    		AlipayTradeCloseRequest alipayRequest = new AlipayTradeCloseRequest();
    		alipayRequest.setBizContent("{\"out_trade_no\":\"" + out_trade_no + "\"}");
    		String result = alipayClient.execute(alipayRequest).getBody();
    		return AjaxResult.succ(result);
    	}
    }
    

    AliwapController.java

    package com.webber.cm.pay.controller;
    
    import javax.servlet.http.HttpServletResponse;
    
    import org.apache.commons.lang.StringUtils;
    import org.springframework.web.bind.annotation.PostMapping;
    import org.springframework.web.bind.annotation.RequestBody;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    import com.alipay.api.AlipayApiException;
    import com.alipay.api.AlipayClient;
    import com.alipay.api.DefaultAlipayClient;
    import com.alipay.api.domain.AlipayTradeCloseModel;
    import com.alipay.api.domain.AlipayTradeFastpayRefundQueryModel;
    import com.alipay.api.domain.AlipayTradeQueryModel;
    import com.alipay.api.domain.AlipayTradeRefundModel;
    import com.alipay.api.domain.AlipayTradeWapPayModel;
    import com.alipay.api.request.AlipayTradeCloseRequest;
    import com.alipay.api.request.AlipayTradeFastpayRefundQueryRequest;
    import com.alipay.api.request.AlipayTradeQueryRequest;
    import com.alipay.api.request.AlipayTradeRefundRequest;
    import com.alipay.api.request.AlipayTradeWapPayRequest;
    import com.webber.cm.common.entity.AjaxResult;
    import com.webber.cm.log.aop.Log;
    import com.webber.cm.log.aop.LogOperType;
    import com.webber.cm.log.aop.LogType;
    import com.webber.cm.pay.config.AlipayConfig;
    import com.webber.cm.pay.pojo.AliPayBean;
    
    import io.swagger.annotations.Api;
    
    /**
     * 阿里接口
     */
    @Api(tags = "阿里手机接口")
    @RestController
    @RequestMapping("/aliwap")
    public class AliwapController {
    
    	// 获得初始化的AlipayClient
    	private static final AlipayClient client = new DefaultAlipayClient(AlipayConfig.URL, AlipayConfig.APPID,
    			AlipayConfig.RSA_PRIVATE_KEY, AlipayConfig.FORMAT, AlipayConfig.CHARSET, AlipayConfig.ALIPAY_PUBLIC_KEY,
    			AlipayConfig.SIGNTYPE);
    
    	/**
    	 * 支付
    	 */
    	@PostMapping("/pay")
    	@Log(logType = LogType.PC_LOG, logOperType = LogOperType.INSERT, detail = "支付宝-支付")
    	public String pay(HttpServletResponse response, AliPayBean aliPayBean) throws AlipayApiException {
    		if (aliPayBean == null) {
    			return "";
    		}
    		if (StringUtils.isEmpty(aliPayBean.getOut_trade_no()) || StringUtils.isEmpty(aliPayBean.getTotal_amount())
    				|| StringUtils.isEmpty(aliPayBean.getSubject()) || StringUtils.isEmpty(aliPayBean.getBody())) {
    			return "";
    		}
    		// 销售产品码 必填
    		String product_code = "ZSLT-HD-001";
    		AlipayTradeWapPayRequest alipay_request = new AlipayTradeWapPayRequest();
    		// 封装请求支付信息
    		AlipayTradeWapPayModel model = new AlipayTradeWapPayModel();
    		model.setOutTradeNo(aliPayBean.getOut_trade_no());
    		model.setSubject(aliPayBean.getSubject());
    		model.setTotalAmount(aliPayBean.getTotal_amount());
    		model.setBody(aliPayBean.getBody());
    		model.setTimeoutExpress("2m");// 超时时间 可空
    		model.setProductCode(product_code);
    		alipay_request.setBizModel(model);
    		// 设置异步通知地址
    		alipay_request.setNotifyUrl(AlipayConfig.NOTIFY_URL);
    		// 设置同步地址
    		alipay_request.setReturnUrl(AlipayConfig.RETURN_URL);
    		String result = client.pageExecute(alipay_request).getBody();
    		return result;
    	}
    
    	/**
    	 * 查询
    	 */
    	@PostMapping("/query")
    	@Log(logType = LogType.PC_LOG, logOperType = LogOperType.QUERY, detail = "支付宝-查询")
    	public AjaxResult query(@RequestBody String out_trade_no) throws AlipayApiException {
    		if (StringUtils.isEmpty(out_trade_no)) {
    			return AjaxResult.err("非法请求");
    		}
    		AlipayTradeQueryRequest alipayRequest = new AlipayTradeQueryRequest();
    		AlipayTradeQueryModel model = new AlipayTradeQueryModel();
    		model.setOutTradeNo(out_trade_no);
    		alipayRequest.setBizModel(model);
    		String result = client.execute(alipayRequest).getBody();
    		return AjaxResult.succ(result);
    	}
    
    	/**
    	 * 退款
    	 */
    	@PostMapping("/refund")
    	@Log(logType = LogType.PC_LOG, logOperType = LogOperType.UPDATE, detail = "支付宝-退款")
    	public AjaxResult refund(@RequestBody String out_trade_no) throws AlipayApiException {
    		if (StringUtils.isEmpty(out_trade_no)) {
    			return AjaxResult.err("非法请求");
    		}
    		AlipayTradeRefundRequest alipayRequest = new AlipayTradeRefundRequest();
    		String refund_amount = "0.01";
    		String refund_reason = "申请退款";
    		AlipayTradeRefundModel model = new AlipayTradeRefundModel();
    		model.setOutTradeNo(out_trade_no);
    		model.setRefundAmount(refund_amount);
    		model.setRefundReason(refund_reason);
    		model.setOutRequestNo(out_trade_no);
    		alipayRequest.setBizModel(model);
    		String result = client.execute(alipayRequest).getBody();
    		return AjaxResult.succ(result);
    	}
    
    	/**
    	 * 退款查询
    	 */
    	@PostMapping("/refundQuery")
    	@Log(logType = LogType.PC_LOG, logOperType = LogOperType.QUERY, detail = "支付宝-退款查询")
    	public AjaxResult refundQuery(@RequestBody String out_trade_no) throws AlipayApiException {
    		if (StringUtils.isEmpty(out_trade_no)) {
    			return AjaxResult.err("非法请求");
    		}
    		AlipayTradeFastpayRefundQueryRequest alipayRequest = new AlipayTradeFastpayRefundQueryRequest();
    		String out_request_no = out_trade_no;
    		AlipayTradeFastpayRefundQueryModel model = new AlipayTradeFastpayRefundQueryModel();
    		model.setOutTradeNo(out_trade_no);
    		model.setOutRequestNo(out_request_no);
    		alipayRequest.setBizModel(model);
    		String result = client.execute(alipayRequest).getBody();
    		;
    		return AjaxResult.succ(result);
    	}
    
    	/**
    	 * 关闭
    	 */
    	@PostMapping("/close")
    	@Log(logType = LogType.PC_LOG, logOperType = LogOperType.OTHER, detail = "支付宝-关闭")
    	public AjaxResult close(@RequestBody String out_trade_no) throws AlipayApiException {
    		if (StringUtils.isEmpty(out_trade_no)) {
    			return AjaxResult.err("非法请求");
    		}
    		AlipayTradeCloseRequest alipayRequest = new AlipayTradeCloseRequest();
    		alipayRequest.setBizContent("{\"out_trade_no\":\"" + out_trade_no + "\"}");
    		AlipayTradeCloseModel model = new AlipayTradeCloseModel();
    		model.setOutTradeNo(out_trade_no);
    		alipayRequest.setBizModel(model);
    		String result = client.execute(alipayRequest).getBody();
    		return AjaxResult.succ(result);
    	}
    }
    

    AjaxResult.java

    package com.webber.cm.common.entity;
    
    import lombok.ToString;
    
    /**
     * ajax结果
     */
    @ToString
    public class AjaxResult {
    	
    	private static final String SUCC_CODE="200";// 成功编码
    	
    	private static final String ERR_CODE="0";// 失败编码
    
    	private String code;
    	private String msg;
    	private Object data;
    
    	
    	public AjaxResult(String code,Object data) {
    		this.code = code;
    		this.data=data;
    	}
    	
    	public AjaxResult(String code,String msg) {
    		this.code = code;
    		this.msg=msg;
    	}
    	
    	public static AjaxResult succ(Object data) {
    		return new AjaxResult(SUCC_CODE,data);
    	}
    	
    	public static AjaxResult err(String msg) {
    		return new AjaxResult(ERR_CODE,msg);
    	}
    	
    	public static AjaxResult err(String code,String msg) {
    		return new AjaxResult(code,msg);
    	}
    
    	public String getCode() {
    		return code;
    	}
    
    	public void setCode(String code) {
    		this.code = code;
    	}
    
    	public String getMsg() {
    		return msg;
    	}
    
    	public void setMsg(String msg) {
    		this.msg = msg;
    	}
    
    	public Object getData() {
    		return data;
    	}
    
    	public void setData(Object data) {
    		this.data = data;
    	}
    
    }
    
    

    前端html

    <!DOCTYPE html>
    <html lang="zh">
    
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <script src="https://cdn.jsdelivr.net/npm/jquery@1.12.4/dist/jquery.min.js"></script>
        <script src="./js/zhifubao.js"></script>
        <title>支付</title>
    </head>
    
    <body>
        <form id="pay_form" method="post">
            订单号:<input name="out_trade_no" value="2020519252256736" />
            <input type="hidden" name="total_amount" value="0.01"/>
            <input type="hidden" name="subject" value="汽车团购活动定金"/>
            <input type="hidden" name="body" value="99抵扣10000元,厂家大放价!"/>
            <button class="new-btn-login" style="text-align: center;" onclick="fun_pay()">支付宝付款</button>
        </form>
        <br/>
        <br/>
        <br/>
        <div>
            订单号:<input id="query_out_trade_no" value="2020519252256736" />
            <button class="new-btn-login" style="text-align: center;" onclick="fun_query()">交易查询</button>
        </div>
        <br/>
        <br/>
        <br/>
        <div>
            订单号:<input id="refund_out_trade_no" value="2020519252256736" />
            <button class="new-btn-login" style="text-align: center;" onclick="fun_refund()">支付宝退款</button>
        </div>
        <br/>
        <br/>
        <br/>
        <div>
            订单号:<input id="refundQuery_out_trade_no" value="2020519252256736" />
            <button class="new-btn-login" style="text-align: center;" onclick="fun_refundQuery()">支付宝退款查询</button>
        </div>
        <br/>
        <br/>
        <br/>
        <div>
            订单号:<input id="close_out_trade_no" value="2020519252256736" />
            <button class="new-btn-login" style="text-align: center;" onclick="fun_close()">支付宝交易关闭</button>
        </div>
        <br/>
        <br/>
        <br/>
        <div id="msg"></div>
    </body>
    
    </html>
    

    前端js

    // 支付
    function fun_pay(){
        if (/(iPhone|iPad|iPod|iOS|Android)/i.test(navigator.userAgent)) {
            $('#pay_form').attr('action', 'http://127.0.0.1:8081/aliwap/pay');
        } else {
            $('#pay_form').attr('action', 'http://127.0.0.1:8081/ali/pay');
        };
        $("#pay_form").submit();
    }
    
    // 查询
    function fun_query(){
        var out_trade_no=$("#query_out_trade_no").val();
        $.ajax({
            type: "POST",
            url: "http://127.0.0.1:8081/ali/query",
            data: out_trade_no,
            dataType: "json",
            contentType: 'application/json;charset=utf-8',
            success: function (data) {
                if (data.code === "200") {
                    $("#msg").html(data.data);
                } else {
                    alert(data.msg);
                }
            },
            error: function (data) {
                alert("数据存在错误!");
            }
        })
    }
    
    其他方法类似......
    
    展开全文
  • Java支付宝订单查询

    千次阅读 2018-09-11 08:40:57
    Java支付宝订单查询 电脑网站支付成功后可通过支付宝接口主动...该方法基于 Java 支付宝扫码支付 (新) 实现 调用查询接口进行订单查询 public class AliQueryServiceImpl extends AliCoreServiceImpl { ...

    Java支付宝订单查询

    电脑网站支付成功后可通过支付宝接口主动查询订单结果

    更多精彩

    前置条件

    1. 该方法基于 Java 支付宝扫码支付 (新) 实现

    调用查询接口进行订单查询

    public class AliQueryServiceImpl extends AliCoreServiceImpl {
    
        public Boolean getPayResult(Long orderId) {
            AlipayTradeQueryRequest queryRequest = new AlipayTradeQueryRequest();
    
            queryRequest.setBizModel(generateOrderInfo(orderId));
    
            AlipayTradeQueryResponse response = null;
            try {
                response = alipayClient.execute(queryRequest);
            } catch (AlipayApiException e) {
                logger.error("支付宝查询订单" + orderId + "失败!", e);
            }
    
            if (response == null) {
                logger.error("支付宝未获取订单" + orderId + "详情!");
                return false;
            }
    
            if (response.isSuccess()) {
                if (response.getTradeStatus().equals(TRADE_STATUS_SUCCESS) || response.getTradeStatus().equals(TRADE_STATUS_FINISHED)) {
                    // 更新订单状态
                    updateOrderInfo(response.getOutTradeNo(), OrderPay.aliPay.getCode());
                    return true;
                }
    
                logger.error("支付宝订单" + orderId + "交易失败,交易状态:" + response.getTradeStatus());
                return false;
            } else {
                logger.error("支付宝订单" + orderId + "查询失败!");
                return false;
            }
        }
    
        private AlipayTradeQueryModel generateOrderInfo(Long orderId) {
            OrderDTO order = orderManageService.getOrder(orderId);
    
            AlipayTradeQueryModel model = new AlipayTradeQueryModel();
            model.setOutTradeNo(order.getCode());
    
            return model;
        }
    
    }
    展开全文
  • Java实现对支付宝即时到账接口调用。
  • JAVA支付宝扫码支付

    2019-12-25 15:46:02
    网站面对面网页支付以及二维码扫码支付,PC网页支付功能和生成二维码图片扫码支付功能。使用Springboot框架编写。支付宝沙箱环境已配置完成,下载后解压,idea可直接启动。
  • 调用支付宝支付java后台源码,springboot项目,可直接运行,包括Controller和回调函数等。
  • java支付宝支付Demo

    2020-11-17 15:47:22
    import java.io.FileWriter; import java.io.IOException; /* * *类名:AlipayConfig *功能:基础配置类 *详细:设置帐户有关信息及返回路径 *修改日期:2017-04-05 *说明: *以下代码只是为了方便商户测试而...
  • java 支付宝 H5支付

    千次阅读 2019-09-04 17:19:08
    目录 使用须知: 1:maven: 2:编写工具类 AlipayUtil 3:调用代码: ... 需先在支付宝中开通支付宝H5支付,开通细节暂不描述。。 1:maven: <dependency> <groupId>commons-logging&...
  • 支付宝支付java,新版的是json 依赖包` <dependency> <groupId>com.alipay.sdk</groupId> <artifactId>alipay-easysdk</artifactId> <version>2.0.2</version> </...
  • Java 支付宝支付 Alipay

    万次阅读 2018-07-23 13:40:39
    阿里的文档还是比较清晰明了的,Java部分的代码更是做了非常棒的封装,引用jar包中的方法,支付宝的流程都类似,可以迅速的写出相应的支付代码; 以alipay.trade.app.pay(统一收单交易支付接口) 为例子: 我们...
  • 1.使用支付宝注册登录支付宝开放平台 转送门 2.下载支付宝支付源码 源码地址 3.
  • Java支付宝扫码支付[新]

    千次阅读 2018-09-11 08:39:14
    Java支付宝扫码支付[新] 支付宝老版本的 Web 端扫码支付产品为即时到账,更新到新版后现在的产品为电脑网站支付 官网 电脑网站支付快速接入 准备数据 电脑网站支付 应用需要在开发者页面...
  • java 支付宝支付实例

    2021-01-14 15:31:39
    alipay-sdk-java 4.6.0.ALL 实现代码 public AlipayTradePayResponse alipayTradePay(String orderId, String tradeNo, String scene, String authCode, String subject, String storeId, BigDecimal totalAmount) ...
  • java 版手机PC 支付宝支付
  • Java支付宝扫码支付[旧] 在实际开发过程中,首先采用当面付模式进行开发,但没有成功,个人认为当面付更适合线下模式 之后改用即时到账模式才成功接入支付宝扫码支付功能 以下内容是基于即时到账模式开发 ...
  • Java支付宝支付功能整理

    千次阅读 2017-08-05 16:38:06
    Java版支付宝支付功能整理文档 2一、 引用文件 21、基础配置类:AlipayConfig.java 22、支付宝MD5签名处理核心文件:MD5.java 43、支付宝接口公用函数类:AlipayCore.java 54、支付宝通知处理类:AlipayNotify.java ...
  • 支付宝的网页端支付原声配置的Demo,Java代码,采用SSH框架。希望帮助大家解决支付的大坑。有问题可以留言
  • JAVA支付——支付宝支付对接

    万次阅读 2019-03-12 10:02:36
    前言 [蚂蚁金服对接平台]... ... 按照官方提示,设置以下配置。 开发部分 依赖包pom ...-- https://mvnrepository.com/artifact/com.alipay.sdk/alipay-sdk-java --&gt; ...
  • 将下载好的demo(由于我测试了两个所以我就下载了两个“电脑网站支付DEMO”、“手机网站支付DEMO”)解压,导入eclipse 注:由于需要notify_url和return_url的配置必须是公网可以访问的,我使用的是nat123。...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 12,639
精华内容 5,055
关键字:

java支付

java 订阅