java 使用sdk接入支付宝扫描当面付 扫描二维码支付,退款以及退款查询 封装好了直接用就行

6 篇文章 0 订阅
1 篇文章 2 订阅

项目地址https://github.com/niezhiliang/alipay

首先把项目clone下来,把application.yml下面的参数该改的都改了,项目里面有个pic文件夹 里面记录了我调试时所得到支付宝给的返回值以及访问我写的controller返回的值 可以根据你自己需求去改,改好就可以将项目运行起来

二维码生成接口

127.0.0.1:10086/qrcode?totalAmount=0.01&subject=支付宝扫码支付测试&storeId=123456&timeoutExpress=5m&outTradeNo=110112113114115
描述: 生产支付所需的二维码链接地址(通过这个地址用插件生产二维码图片扫描进行支付)
Request URL: 127.0.0.1:10086/qrcode
Request Method: GET
参数:
名称类型是否必须参数描述
totalAmountString必须订单所需支付金额(0.01)
subjectString必须订单标题(支付宝扫码支付测试)
storeIdString必须商铺编号(123456)
timeoutExpressString必须订单自动关闭时间(5m)表示五分钟还未完成交易,自动关闭该订单
outTradeNoString必须交易流水号(不可重复)

这里只是填了一些必要的参数,更多请求参数详情访问支付宝的开发文档

https://docs.open.alipay.com/api_1/alipay.trade.pay/

响应:
名称类型参数描述
codeString响应码(10000为成功)
msgObject提示信息
out_trade_noString商户订单号
qr_codeString二维码内容

同样响应参数我也只要了一些我自己需要的,更多响应参数访问支付宝开发文档

https://docs.open.alipay.com/api_1/alipay.trade.pay/

得到二维码地址放到该网址去生产二维码:

https://cli.im/
这里写图片描述
这里写图片描述

支付回调

描述: 支付回调是支付宝来访问你的地址,这个地址必须外网能够访问到(作用就是告诉你当前订单处于什么状态)这里不多解释,直接贴出我项目中的部分代码
/**
     * 扫码的回调
     * @param request
     * @return
     */
    @RequestMapping(value = "notify_url",method = RequestMethod.POST)
    public String notifyurl(HttpServletRequest request) {
        //这里是将阿里回调带回来的参数封装进map里面 然后可以将一些我们需要的数据保存到数据库
        Map<String,String> map = alipayService.alipayNotify(request);
        if (map.get("trade_status").equals("TRADE_SUCCESS")) {//当状态为TRADE_SUCCESS表示用户支付成功啦
            //响应前端使用的是websocket 可以参考我的另一个项目springbootwebsocket
            /************前端响应支付成功让前端跳转到支付成功页面**************/
            String url = websocketurl+"userid="+map.get("out_trade_no");
            url+="&path=success";
            System.out.println(url);
            HttpClientUtils.get(url);
            /*********************************************************/
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            Alipay alipay = new Alipay();
            alipay.setOuttradeno(map.get("out_trade_no"));
            alipay.setBuyerid(map.get("buyer_id"));
            alipay.setBuyerlogonid(map.get("buyer_logon_id"));
            alipay.setTotalamount(map.get("total_amount"));
            try {
                alipay.setGmtcreate(sdf.parse(map.get("gmt_create")));
                alipay.setGmtpayment(sdf.parse(map.get("gmt_payment")));
            } catch (ParseException e) {
                e.printStackTrace();
            }
            alipay.setPaystatus((byte)1);
            alipay.setSubject(map.get("subject"));
            alipay.setReceiptamount(map.get("total_amount"));
            AlipayExample example = new AlipayExample();
            example.createCriteria().andOuttradenoEqualTo(alipay.getOuttradeno());
            alipayModelService.updateByExampleSelective(alipay,example);
            }
            //如果我们这边接收到了支付成功就该返回一个success的字符串给支付宝那边,避免支付宝一直不停的访问我们回调的url
            return "success";
        } else {
            return "failer";
        }
    }

通用退款接口

127.0.0.1:10086/refund?refund_amount=0.01&out_trade_no=110112113114115&refund_reason=正常退款
描述: 退款都可以使用这个接口来进行
Request URL: 127.0.0.1:10086/refund
Request Method: GET
参数:
名称类型是否必须参数描述
refund_amountString必须需要退款的金额,该金额不能大于订单金额,单位为元,支持两位小数
out_trade_noString必须订单支付时传入的商户订单号,不能和 trade_no同时为空。
refund_reasonString必须退款的原因说明

这里只是填了一些必要的参数,更多请求参数详情访问支付宝的开发文档

https://docs.open.alipay.com/api_1/alipay.trade.refund/

响应:
名称类型参数描述
codeString响应码(10000为成功)
msgObject返回必要内容
out_trade_noString商户订单号
buyer_logon_idString支付者的支付宝账号(159****0143)
buyer_user_idString买家在支付宝的用户id(2088312544416136)
fund_changeString本次退款是否发生了资金变化(Y/N)
gmt_refund_payString退款支付时间
refund_feeString退款总金额
send_back_feeString退款总金额
refund_feeString退款总金额
refund_detail_item_listList退款使用的资金渠道

同样响应参数我也只要了一些我自己需要的,更多响应参数访问支付宝开发文档
https://docs.open.alipay.com/api_1/alipay.trade.refund/
这里写图片描述

退款查询接口

127.0.0.1:10086/refund_query?trade_no=2018051821001004130589462290&out_trade_no=110112113114115&out_request_no=110112113114115

描述: 退款都可以使用这个接口来进行
Request URL: 127.0.0.1:10086/refund_query
Request Method: GET
参数:
名称类型是否必须参数描述
trade_noString必须支付宝交易号,和商户订单号不能同时为空
out_trade_noString必须订单支付时传入的商户订单号,和支付宝交易号不能同时为空。 trade_no,out_trade_no如果同时存在优先取trade_no
out_request_noString必须请求退款接口时,传入的退款请求号,如果在退款请求时未传入,则该值为创建交易时的外部交易号

项目地址https://github.com/niezhiliang/alipay

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值