一、所需jar包

服务端sdk下载地址:https://doc.open.alipay.com/docs/doc.htm?spm=a219a.7629140.0.0.470nRM&treeId=193&articleId=103419&docType=1

详细文档参考:蚂蚁金服开放平台文档中心,具体的api及测试demo都可以查到 地址: https://doc.open.alipay.com/

SDK包说明

  • alipay-sdk-java*.jar—————————支付宝SDK编译文件jar
  • alipay-sdk-java*-source.jar——————支付宝SDK源码文件jar
  • commons-logging-1.1.1.jar——————SDK依赖的日志jar
  • commons-logging-1.1.1-sources.jar———SDK依赖的日志源码jar

注意

  • 集成支付宝接口需要引入的文件是:
    alipay-sdk-java*.jar
    commons-logging-1.1.1.jar
  • 若进一步了解代码实现请引入文件:
    alipay-sdk-java*-source.jar
    commons-logging-1.1.1-sources.jar

二、调用支付

    //调用支付public void toPay() {String orderid = getRequest().getParameter("id");if (StringUtils.isBlank(orderid)) {throw new NullPointerException();}Order order = orderService.selectById(orderid);if (order == null) {throw new NullPointerException("根据订单号查询不到订单信息!");}Ordership ordership = ordershipService.selectOne(new Ordership(orderid));if (ordership == null) {throw new NullPointerException("根据订单号查询不到配送信息!");}ArrayNode goods_detail = JsonUtils.createArrayNode();// 商品详情设置(json格式-非必须参数,根据业务逻辑处理)String out_trade_no = order.getPayNo();//支付编号(订单编号-必须唯一)double total_amount = 0.01;//订单金额
        String subject = "订单标题";//订单描述
        AlipayTradePrecreateResponse resp = aliPayService.aliPay(out_trade_no, total_amount, subject, goods_detail);// 订单编号--订单金额--订单描述--商品明细(无 )if ("10000".equals(resp.getCode())) {//若请求成功,则进行逻辑处理String qr_code = resp.getQrCode();/*** 生成二维码*/// 支付宝返回Code(url)--用户account--订单--id(拼二维码地址而已)AttachmentEntity attachmentEntity = this.creatPayCode(qr_code, account, out_trade_no);if (attachmentEntity == null) {throw new NullPointerException("订单生成失败!OrdersAction--toPay");} else {// 返回二维码地址
                getOut().println(attachmentEntity.getAtt_path());}} else {throw new NullPointerException("二维码生成失败!OrdersAction--toPay");}}
   public AlipayTradePrecreateResponse aliPay(String out_trade_no, double total_amount,String subject, ArrayNode goods_detail) {/*** 创建Json对象 封装信息*/ObjectNode biz_content = JsonUtils.createObjectNode();biz_content.put("out_trade_no", out_trade_no); //订单号biz_content.put("total_amount", total_amount); //订单总金额biz_content.put("subject", subject); //订单标题biz_content.put("timeout_express", "5m"); //该笔订单允许的最晚付款时间,逾期将关闭交易
     AlipayTradePrecreateResponse response = null;//请求支付接口对象  //参数//1.请求网址 2.自己所注册的应用id(支付宝分配给开发者的应用ID) 3.私钥 4.json 5.字符编码集 6.公钥//实例化客户端AlipayClient alipayClient = new DefaultAlipayClient(request_url, app_id, private_key, "json", charset,public_key);//实例化具体API对应的request类,类名称和接口名称对应AlipayTradePrecreateRequest request = new AlipayTradePrecreateRequest();request.setBizContent(biz_content.toString());try {response = alipayClient.execute(request);} catch (AlipayApiException ex) {log.error(ex.getMessage());} return response;}
//生成二维码
private AttachmentEntity creatPayCode(String url, String user_id, String order_id) {String serverClassPath = Thread.currentThread().getContextClassLoader().getResource("").getPath();String logo_path = serverClassPath + "config/logo.png";String uploadPath = "payForUser/" + user_id + "/order/" + order_id + "/" + "payCode";String attName = "payCode.jpg";// 定义原图的名称BufferedImage barCode = BarCodeService.createImage(url, logo_path);ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();try {ImageOutputStream imageOutputStream = ImageIO.createImageOutputStream(byteArrayOutputStream);ImageIO.write(barCode, "jpg", imageOutputStream);} catch (IOException iOException) {iOException.printStackTrace();}InputStream inputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());String barCode_url = ossService.uploadFile(uploadPath, inputStream, attName);//将二维码文件上传阿里云(可自主处理)AttachmentEntity attachmentEntity = new AttachmentEntity();attachmentEntity.setAtt_name(attName);attachmentEntity.setAtt_path(barCode_url);attachmentEntity.setMoudel_name("payCode");attachmentEntity.setAtt_type("jpg");attachmentEntity.setUpload_time(DateUtils.getSystemDate());attachmentEntity.setDownload_count(0);attachmentEntity.setGid(DataUtils.getUUID());attachmentEntity.setIs_compress(0);attachmentEntity.setEntity_id(order_id);return attachmentEntity;}

三、查询支付状态

    public String isPay() {AlipayTradeQueryResponse alipayTradeQueryResponse = aliPayService.aliQuery(order.getPayNo());//订单编号if (alipayTradeQueryResponse.isSuccess()) {//若查询状态为successif ("10000".equals(alipayTradeQueryResponse.getCode())) {String Body = alipayTradeQueryResponse.getBody();String out_trade_no = alipayTradeQueryResponse.getOutTradeNo();// 支付编号
ObjectNode objectNode = (ObjectNode) JsonUtils.stringToJsonObject(Body).get("alipay_trade_query_response");String trade_status = objectNode.get("trade_status").textValue();// 支付状态if (trade_status != null && "TRADE_SUCCESS".equals(trade_status)) {String trade_no = objectNode.get("trade_no").textValue();//支付宝交易号//支付记录创建orderService.createPayInfo(order,trade_no,orderpay.orderpay_paystatus_y,orderpay.orderpay_paymethod_alipayescow,"");//订单--支付宝交易号-支付状态-支付类型orderService.orderStutasChange(orderId);// 修改订单状态getOut().print("000000");return null;}else if (trade_status != null && "TRADE_CLOSED".equals(trade_status)) {//二维码失效String trade_no = objectNode.get("trade_no").textValue();//支付宝交易号//修改订单支付编号。重新生成二维码String orderId=out_trade_no.substring(0, out_trade_no.length()-13);e.setId(orderId);String payNo=orderId+new Date().getTime();e.setPayNo(payNo);orderService.update(e);                getOut().print("000001");return null;}}}return null;}

支付宝支付接口开发———在线扫码支付相关推荐

  1. 第三方支付接口之微信扫码支付

    此篇文章是为了记录学习如何编写第三方支付接口,熟悉这个流程.使用的是威富通第三方支付平台https://open.swiftpass.cn/ 对接的是微信扫码和公总号支付 基本成员:用户,商户,第三方 ...

  2. 支付宝支付-当面付之扫码支付「扫码支付」

    前言 支付宝支付-沙箱环境使用 支付宝支付-支付宝PC端扫码支付 支付宝支付-手机浏览器H5支付 支付宝支付-当面付之扫码支付「本文」 当面付包含两种支付方式:商品条形码支付 + 扫码支付 经过前面两 ...

  3. 基于thinkphp5.0和支付宝面对面扫码支付DEMO制作的扫码支付

    ​ 基于thinkphp5.0和支付宝面对面扫码支付DEMO制作的扫码支付 今天接口申请下来,下载了官方demo对着调试了一天,终于实现想要的功能,先看图 选择支付宝支付 跳出二维码弹窗 手机支付宝进 ...

  4. 微信公众号开发之扫码支付

    此项目已开源欢迎Start.PR.发起Issues一起讨论交流共同进步 https://github.com/Javen205/IJPay http://git.oschina.net/javen20 ...

  5. 微信支付教程系列之扫码支付

    目录 (一)微信公众号开发之VS远程调试 (二)微信公众号开发之基础梳理 (三)微信公众号开发之自动消息回复和自定义菜单 (四)微信公众号开发之网页授权获取用户基本信息 (五)微信公众号开发之网页中及 ...

  6. C# 微信支付教程系列之扫码支付

    微信支付教程系列之扫码支付 今天,我们来一起探讨一下这个微信扫码支付.何为扫码支付呢?这里面,扫的码就是二维码了,就是我们经常扫一扫的那种二维码图片,例如,我们自己添加好友的时候,可以通过输入对方的微 ...

  7. 聚合支付/免签支付/第四方支付/在线扫码支付/个人收款/第三方收款接口详解,能给用户提供什么价值,背景介绍

    随着互联网的发展,电子商务变成21世纪非常主流的一种经营模式,既然是线上商城必然离不开线上支付,从最早的银行卡支付.银联支付,到现在的扫码支付.一键支付.支付方式百花绽放,各大巨头纷纷推出越来越便捷的 ...

  8. PB实现微信、支付宝、新大陆星POS扫码支付接口

    PB调用C#动态库实现新大陆星POS扫码支付接口. 实例下载地址:https://download.csdn.net/download/weixin_41317666/12418679 string ...

  9. 支付宝沙箱支付(包括直接扫码支付)SpringBoot

    准备工作 1.登录支付宝开放平台:https://open.alipay.com/platform/developerIndex.htm 2.点击研发服务: 3.设置密匙 由于我设置过了,里面有密匙, ...

最新文章

  1. git基础: 《获取Git仓库》学习笔记
  2. 《构建之法》读书笔记
  3. Linux server配置安装Java,Tomcat服务器
  4. LeetCode 1419. 数青蛙(脑洞题)
  5. 建立openstack quantum开发环境 .
  6. 卡尔曼_卡尔曼滤波最完整公式推导
  7. CSS样式表书写位置
  8. rda冗余分析步骤_FEMS Microbiol Ecol |微生物生态学中的多变量分析
  9. 在Laravel中使用自己的类库三种方式
  10. 过滤器做权限校验以及遇到的坑
  11. 克隆的仓库 设置全局https协议转换成git协议,加快拉取速度(git)
  12. USB Device Desctiptor 相关
  13. 怎么完全卸载赛门铁克_如何干净彻底卸载诺顿?
  14. 基于weber的齿轮啮合刚度计算
  15. Unity接入谷歌支付
  16. python 主函数传参数
  17. 瑞星网络版杀毒软件安装部署
  18. 单目标跟踪 Siamese系列网络:SiamFC、SiamRPN、one-shot跟踪、one-shotting单样本学习、DaSiamRPN、SiamRPN++、SiamMask
  19. 让孩子更快乐地学编程,一套积木就够了,长毛象AI百变编程积木套件体验
  20. 优盘突然显示无法在此计算机,复制文件到U盘时突然无法复制提示磁盘被写保护该如何修复...

热门文章

  1. 图书馆管理系统中遇见的问题与问题的解决方法思路
  2. 【渝粤教育】21秋期末考试互联网金融10139k2
  3. 正整数表示为连续自然数的和(难度:1颗星)
  4. 如何在不停机的情况下在Django中创建索引
  5. Linux系统调用七、与文件权限有关的系统API串讲
  6. 要有最朴素的生活和最遥远的梦想,即使明天天寒地冻,山高水远,路远马亡...
  7. 美学心得(第二百三十四集) 罗国正
  8. 编译原理 - 词法分析
  9. xmlhttp方法抓取下一页问题
  10. 异或运算与奇偶校验的作用