• springboot+支付宝条码支付开发详解


    背景:项目原有乐刷聚合支付,无法参加支付宝、微信等支付机构的官方活动

    需求:增加原生支付(支付宝条码支付)

    方法:

      一、官方文档:https://docs.open.alipay.com/194/106039

      二、没有真实企业账号的可以使用沙箱环境:https://docs.open.alipay.com/200/105311

      三、两种方法实现:

        (一)基于支付宝标准SDKalipay-sdk-java

          1pom文件中添加SDK依赖

            地址:https://mvnrepository.com/artifact/com.alipay.sdk/alipay-sdk-java

          2配置支付宝参数

            在系统常量类里追加(我这里配的是沙箱参数,就直接写在实现类里)

            

          3.实现代码

            

      1 package com.bhp.aaa.bbb.service;
      2 
      3 import com.alibaba.fastjson.JSONObject;
      4 import com.alipay.api.AlipayApiException;
      5 import com.alipay.api.AlipayClient;
      6 import com.alipay.api.DefaultAlipayClient;
      7 import com.alipay.api.request.AlipayTradeCancelRequest;
      8 import com.alipay.api.request.AlipayTradePayRequest;
      9 import com.alipay.api.request.AlipayTradeQueryRequest;
     10 import com.alipay.api.request.AlipayTradeRefundRequest;
     11 import com.alipay.api.response.AlipayTradeCancelResponse;
     12 import com.alipay.api.response.AlipayTradePayResponse;
     13 import com.alipay.api.response.AlipayTradeQueryResponse;
     14 import com.alipay.api.response.AlipayTradeRefundResponse;
     15 import com.google.common.collect.ImmutableMap;
     16 import org.springframework.beans.factory.annotation.Autowired;
     17 import org.springframework.stereotype.Service;
     18 import org.wustrive.java.core.request.ViewResult;
     19 import org.wustrive.java.dao.jdbc.dao.BaseDao;
     20 
     21 import javax.servlet.http.HttpServletRequest;
     22 import java.util.Map;
     23 
     24 @Service
     25 public class AlipayService1 {
     26     // 正式
     27     /*private static String gateway = SysConstants.Alipay.gateway;
     28     private static String appId = SysConstants.Alipay.app_id;
     29     private static String privateKey = SysConstants.Alipay.app_private_key;
     30     private static String publicKey = SysConstants.Alipay.alipay_public_key;*/
     31 
     32     // 沙箱
     33     //网关
     34     private static String gateway = "https://openapi.alipaydev.com/gateway.do";
     35     //应用ID
     36     private static String appId = "你自己的APPID";
     37     //应用秘钥
     38     private static String privateKey = "你自己的应用秘钥";
     39     //支付宝公钥
     40     private static String publicKey = "你自己的支付宝公钥";
     41 
     42     @Autowired
     43     private BaseDao baseDao;
     44     
     45     // 初始化一个统一的客户端
     46     AlipayClient alipayClient = new DefaultAlipayClient(gateway,appId,privateKey,"json","utf-8",publicKey,"RSA2");
     47 
     48     // 发起支付
     49     public  ViewResult alipayPay(AppUser appUser, String outTradeNo, String payMoney, String authCode){
     50         
     51         ViewResult viewResult = ViewResult.newInstance();
     52         String sql = "SELECT short_name FROM sys_merchants WHERE id=:merchantsId";
     53         String short_name =  baseDao.queryForString(sql, ImmutableMap.of("merchantsId",appUser.getMerchantsId()));
     54 
     55         JSONObject data = new JSONObject();
     56         data.put("out_trade_no",outTradeNo);
     57         data.put("scene","bar_code");
     58         data.put("auth_code",authCode);
     59         data.put("subject",short_name+"消费");
     60         data.put("store_id",appUser.getShopId());
     61         data.put("total_amount",payMoney);
     62 
     63         AlipayTradePayRequest request = new AlipayTradePayRequest();
     64         //request.setNotifyUrl(notifyUrl);
     65         request.setBizContent(data.toJSONString());
     66         try {
     67             AlipayTradePayResponse response = alipayClient.execute(request);
     68             if(response.isSuccess()){
     69                 viewResult.success(response.getBody());
     70             } else {
     71                 viewResult.fail(response.getBody());
     72             }
     73         } catch (AlipayApiException e) {
     74             viewResult.fail(e);
     75             e.printStackTrace();
     76         }finally {
     77             return viewResult;
     78         }
     79     }
     80 
     81     // 发起查询
     82     public ViewResult alipayQuery(String trade_no ){
     83         ViewResult viewResult = ViewResult.newInstance();
     84         JSONObject data = new JSONObject();
     85         data.put("trade_no",trade_no);
     86         AlipayTradeQueryRequest request = new AlipayTradeQueryRequest();
     87         request.setBizContent(data.toJSONString());
     88         try {
     89             AlipayTradeQueryResponse response = alipayClient.execute(request);
     90             if(response.isSuccess()){
     91                 viewResult.success(response.getBody());
     92             } else {
     93                 viewResult.fail(response.getBody());
     94             }
     95         } catch (AlipayApiException e) {
     96             viewResult.fail(e);
     97             e.printStackTrace();
     98         } finally {
     99             return viewResult;
    100         }
    101     }
    102 
    103     // 发起撤销
    104     public ViewResult alipayCancel(String trade_no){
    105         ViewResult viewResult = ViewResult.newInstance();
    106         JSONObject data = new JSONObject();
    107         data.put("trade_no",trade_no);
    108         AlipayTradeCancelRequest request = new AlipayTradeCancelRequest();
    109         request.setBizContent(data.toJSONString());
    110         try {
    111             AlipayTradeCancelResponse response = alipayClient.execute(request);
    112             if(response.isSuccess()){
    113                 viewResult.success(response.getBody());
    114             } else {
    115                 viewResult.fail(response.getBody());
    116             }
    117         } catch (AlipayApiException e) {
    118             viewResult.fail(e);
    119             e.printStackTrace();
    120         } finally {
    121             return viewResult;
    122         }
    123     }
    124 
    125     // 发起退款
    126     public ViewResult alipayRefund(String trade_no,String refund_amount){
    127         ViewResult viewResult = ViewResult.newInstance();
    128         JSONObject data = new JSONObject();
    129         data.put("trade_no",trade_no);
    130         data.put("refund_amount",refund_amount);
    131         AlipayTradeRefundRequest request = new AlipayTradeRefundRequest();
    132         request.setBizContent(data.toJSONString());
    133         try {
    134             AlipayTradeRefundResponse response = alipayClient.execute(request);
    135             if(response.isSuccess()){
    136                 viewResult.success(response.getBody());
    137             } else {
    138                 viewResult.fail(response.getBody());
    139             }
    140         } catch (AlipayApiException e) {
    141             viewResult.fail(e);
    142             e.printStackTrace();
    143         } finally {
    144             return viewResult;
    145         }
    146     }
    147 
    148 
    149 
    150 
    151 }
    支付宝条码支付方法(一)

     未完,待续……

     

     

  • 相关阅读:
    程序员丨学习编程需要攻克这 8 个壁垒,解决后编程能力显著提升!
    编程不难学,方法最重要!学习编程语言最好的方法是什么?
    Navicat for MySQL怎么往表中填数据
    WinForm开发(1)——DataGridView控件(1)——C# DataGridView控件用法介绍
    【C#】图解如何添加引用using MySql.Data.MySqlClient;
    源代码管理工具(2)——SVN(2)——第一次用SVN遇到的问题
    源代码管理工具(1)——SVN(1)——SVN 的使用新手指南,具体到步骤详细介绍----TortoiseSVN
    C#取整函数Math.Round、Math.Ceiling和Math.Floor
    服务器(2)——IIS(2)——IIS Express(1)——IIS跟IIS Express之间的区别和关系
    C# 连接 Oracle 的几种方式
  • 原文地址:https://www.cnblogs.com/java-bhp/p/11385250.html
Copyright © 2020-2023  润新知