前言

微信登录网页授权与APP授权
微信JSAPI支付
微信APP支付
微信APP和JSAPI退款
支付宝手机网站支付
支付宝APP支付
支付宝退款
以上我都放到个人公众号,搜一搜:JAVA大贼船,文末有公众号二维码!觉得个人以后开发会用到的可以关注一下哦!少走点弯路…

官方文档

开放能力文档:

https://opendocs.alipay.com/open/204/105297

APP支付接口API

https://opendocs.alipay.com/apis/api_1/alipay.trade.app.pay

开发准备工作

参考文档:https://opendocs.alipay.com/open/204/105297

后端代码实现

参数配置

application.yml

# 支付宝相关
ALIPAY:
# 应用IDAPP_ID: # 应用私钥APP_PRIVATE_KEY: #应用公钥APP_PUBLIC_KEY: # 支付宝公钥ALIPAY_PUBLIC_KEY: # 统一签名算法SIGN_TYPE: RSA2# 统一字符CHARSET: utf-8# 返回数据格式FORMAT: json# 支付基础APISERVER_URL: https://openapi.alipay.com/gateway.do#支付宝支付回调地址ALIPAY_NOTIFY_URL: # 支付宝收银台会自动跳转回商户return_url指定的页面。RETURN_URL:# 支付宝Api版本API_VERSION: 1.0# 产品码 PROD_CODE: # 终端信息TERMINAL_INFO: # 终端信息类型TERMINAL_TYPE: 

YmlParament

   //支付宝相关@Value("${ALIPAY.APP_ID}")private String appId;@Value("${ALIPAY.APP_PRIVATE_KEY}")private String appPrivatekey;@Value("${ALIPAY.APP_PUBLIC_KEY}")private String appPublickey;@Value("${ALIPAY.ALIPAY_PUBLIC_KEY}")private String alipayPublickey;@Value("${ALIPAY.SIGN_TYPE}")private String signType;@Value("${ALIPAY.CHARSET}")private String charset;@Value("${ALIPAY.FORMAT}")private String format;@Value("${ALIPAY.SERVER_URL}")private String serverUrl;@Value("${ALIPAY.ALIPAY_NOTIFY_URL}")private String alipayNotifyUrl;@Value("${ALIPAY.RETURN_URL}")private String returnUrl;@Value("${ALIPAY.API_VERSION}")private String apiVersion;@Value("${ALIPAY.PROD_CODE}")private String prodCode;@Value("${ALIPAY.TERMINAL_INFO}")private String terminalInfo;@Value("${ALIPAY.TERMINAL_TYPE}")private String terminalType;
初始化支付宝支付配置

AlipayConfig

 @Autowiredprivate YmlParament ymlParament;/*** 设置支付宝客户端* @return*/@Beanpublic AlipayClient setAlipayClient() {return new DefaultAlipayClient(ymlParament.getServerUrl(), ymlParament.getAppId(),ymlParament.getAppPrivatekey(), ymlParament.getFormat(), ymlParament.getCharset(), //这里不要搞错,这里是应用公钥而不是支付宝公钥ymlParament.getAppPublickey(), ymlParament.getSignType()); }/*** App支付请求公共参数* 参考官方链接:https://opendocs.alipay.com/open/54/106370* @return*/@Beanpublic AlipayTradeAppPayRequest setAlipayTradeAppPayRequest () {return new AlipayTradeAppPayRequest();}
APP支付

ZfbPay

 /**支付宝app支付* @param ac 支付宝客户端,传入 @Autowired AlipayClient* @param rquest 基础参数,传入 @Autowired AlipayTradeAppPayRequest* @param notifyUrl 付款成功后通知的页面或方法* @param mode 实际参数,参考https://opendocs.alipay.com/open/204/105465* @return AlipayTradeAppPayResponse 返回类型AlipayTradeAppPayResponse* @author aotezi* @date 2020/4/13 14:00*/public static AlipayTradeAppPayResponse appPay(AlipayClient ac, AlipayTradeAppPayRequest rquest, String notifyUrl, String orderNo, String subject, String orderAmount) throws AlipayApiException {AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();model.setOutTradeNo(orderNo);model.setSubject(subject);model.setTotalAmount(orderAmount);rquest.setBizModel(model);rquest.setNotifyUrl(notifyUrl);return ac.sdkExecute(rquest);}/*** 支付宝支付回调验证签名* 验证签名;参考:https://opendocs.alipay.com/open/203/105286* @param params       参数* @param alipayPublickey 传入支付宝公钥* @return true 正确 false 失败* @throws AlipayApiException*/public static boolean rsaCheckV1(Map<String, String> params, String alipayPublickey) throws AlipayApiException {return AlipaySignature.rsaCheckV1(params, alipayPublickey, "utf-8", "RSA2");}

服务层(业务逻辑略)

 @Autowiredprivate AlipayClient alipayClient;@Autowiredprivate AlipayTradeAppPayRequest alipayTradeAppPayRequest;@Transactional@Overridepublic String insertAlipayAppPayInfo(String sendOrderNo, String subject, String orderAmount) {try {AlipayTradeAppPayResponse alipayTradeAppPayResponse = ZfbPay.appPay(alipayClient, alipayTradeAppPayRequest,ymlParament.getAlipayNotifyUrl(), sendOrderNo,subject, orderAmount);if (!alipayTradeAppPayResponse.isSuccess()) {throw new RuntimeException(alipayTradeAppPayResponse.getMsg());}return alipayTradeAppPayResponse.getBody()} catch (AlipayApiException e) {e.printStackTrace();}}

controller(略)

前端代码实现

客户端Android集成流程

文档地址:https://opendocs.alipay.com/open/204/105296

客户端ios集成流程

文档地址:https://opendocs.alipay.com/open/204/105295

或者使用(可以了解一下哦)

Payment模块管理支付功能,用于提供网页安全支付能力,支持通过Web接口进行支付操作。通过plus.payment可获取支付管理对象。

支付接口可使得网页开发人员能获取浏览器支持的支付渠道进行支付操作,而不需要安装额外的浏览器支付插件。 规范不定义支付渠道安全认证及支付操作通讯协议,由运行环境的支付模块根据支付服务器接入规范实现。

集成了微信APP支付和支付宝APP支付:https://www.html5plus.org/doc/zh_cn/payment.html

支付宝回调通知

官方文档:https://opendocs.alipay.com/open/203/105286

    @ApiOperation("支付宝回调")@PostMapping("callback")public String callback(HttpServletRequest request) throws Exception {Object object = new Object();Map<String, String> params = convertRequestParamsToMap(request);log.info("支付宝回调:已回调,参数为====" + params);try {checkCallbackAlipay(params);/*处理一些业务*/} catch (Exception e) {e.printStackTrace();}return ZfbUtils.RETURN_SUCCESS;}}/*** 校验签名*验签文档:https://opendocs.alipay.com/open/203/105286*/private void checkCallbackAlipay(Map<String, String> params) throws Exception {if (!"TRADE_SUCCESS".equals(params.get("trade_status"))) {throw new Exception("支付宝支付失败!");}//校验签名if (!ZfbPay.rsaCheckV1(params, ymlParament.getAlipayPublickey())) {throw new Exception("支付宝回调签名认证失败");}//校验一些业务逻辑//订单是否支付重复//判断total_amount是否确实为该订单的实际金额(即商户订单创建时的金额)//.....// 校验通知中的seller_id(或者seller_email)是否为out_trade_no这笔单据的对应的操作方(有的时候,一个商户可能有多个seller_id/seller_email),// 验证app_id是否为该商户本身。if (!params.get("app_id").equals(ymlParament.getAppId())) {throw new Exception("APPID不对!");}}/*** 获取支付宝回调参数*/
private static Map<String, String> convertRequestParamsToMap(HttpServletRequest request) {Map<String, String> retMap = new HashMap<String, String>();Set<Map.Entry<String, String[]>> entrySet = request.getParameterMap().entrySet();for (Map.Entry<String, String[]> entry : entrySet) {String name = entry.getKey();String[] values = entry.getValue();int valLen = values.length;if (valLen == 1) {retMap.put(name, values[0]);} else if (valLen > 1) {StringBuilder sb = new StringBuilder();for (String val : values) {sb.append(",").append(val);}retMap.put(name, sb.toString().substring(1));} else {retMap.put(name, "");}}return retMap;}

交易查询

若不想在支付回调时候去做签名校验,那我们可以主动去查询这笔订单是否支付成功

 /*查询订单是否支付成功*/
AlipayTradeQueryResponse response = orderQuery(ac, params.get("out_trade_no"));if (!"TRADE_SUCCESS".equals(response.getTradeStatus())){throw new Exception("<==支付宝支付失败==>订单号为【"+ params.get("out_trade_no")+ "】的订单");}/*** 交易查询接口,处理业务参数                          https://opendocs.alipay.com/apis/api_1/alipay.trade.query#%E5%93%8D%E5%BA%94%E5%8F%82%E6%95%B0  * @param outTradeNo 订单号* @return* @throws AlipayApiException*/public static AlipayTradeQueryResponse orderQuery(AlipayClient ac , String outTradeNo) throws Exception {AlipayTradeQueryModel model = new AlipayTradeQueryModel();model.setOutTradeNo(outTradeNo);AlipayTradeQueryResponse response = tradeQuery(ac,model);if(!response.isSuccess()){throw new Exception("调用支付宝查询接口失败");}return response;}/*交易查询接口*/public static AlipayTradeQueryResponse tradeQuery(AlipayClient ac,AlipayTradeQueryModel model) throws AlipayApiException{AlipayTradeQueryRequest request = new AlipayTradeQueryRequest();request.setBizModel(model);return ac.execute(request);}

【支付宝支付】Java实现支付宝APP支付流程相关推荐

  1. java app微信支付接口_JAVA微信APP支付接口整合

    上次我们看到了支付宝的APP支付工具,那么这次就来封装封装微信的APP支付;如果已经清楚了支付宝的支付流程,那么微信支付也和它大同小异了,当然这其中肯定是有各种变化的: 首先让我把微信支付文档的官网贴 ...

  2. app微信支付-java服务端接口 支付/查询/退款

    app微信支付-java服务端接口 支付-查询-退款 个人看微信的文档,看了很多前辈的写法,终于调通了,在这里做一下记录. 首先来定义各种处理类(微信支付不需要特殊jar包,很多处理需要自己封装,当然 ...

  3. 【微信支付】Java实现微信APP支付流程

    前言 微信登录网页授权与APP授权 微信JSAPI支付 微信APP支付 微信APP和JSAPI退款 支付宝手机网站支付 支付宝APP支付 支付宝退款 以上我都放到个人公众号,搜一搜:JAVA大贼船,文 ...

  4. java微信web支付开发_微信支付java开发详细第三方支付功能开发之支付宝web端支...

    这段时间把支付基本搞完了,因为做的过程中遇到许多问题,特地记录下来,同时方便其他java coder,废话少说,下面开始. 整体思路:在后台,根据参数创建支付宝客户端AlipayClient,发送参数 ...

  5. 支付宝支付-当面付和App支付

    公司最近在做个视频桩的项目,需要在桩上用到支付宝支付功能. 去年项目当中有应用过支付宝,当时前端是用react,后台返回qcode到前端后,前端通过react的插件(其实就是支付宝的sdk),拼接qc ...

  6. 指纹支付 java lang6_支付宝;超6成人使用指纹、刷脸支付,网友;喜欢用密码!...

    就在今天,双十一狂欢节正式落寞,天猫也公布了自身的成绩:天猫双十一的成交额定格在2135亿,而京东也比去年进步,销售额达到了1598亿! 与此同时,支付宝也放出了大招!支付宝表示:消费者通过指纹.刷脸 ...

  7. java实现微信App支付

    废话不多说,直接上代码,微信的小程序,公众号支付都大差不差,自行看文档修改参数即可. maven依赖: <dependency><groupId>com.github.wxpa ...

  8. java app支付_java实现微信App支付

    废话不多说,直接上代码,微信的小程序,公众号支付都大差不差,自行看文档修改参数即可. maven依赖: com.github.wxpay wxpay-sdk 0.0.3 application.yml ...

  9. 微信APP支付(基于Java实现微信APP支付)

    步骤: 导入maven依赖 <!--微信支付--><dependency><groupId>com.github.wxpay</groupId>< ...

  10. Java实现微信APP支付实现记录

    这个就直接贴代码了,反正暂时没法验证对错 错误工具类 import plugins.pay.wechat.domain.WechatPayError;import java.util.HashMap; ...

最新文章

  1. oracle 游标小例
  2. 查询去重_如何在 1 秒内做到大数据精准去重?
  3. 4道Python装饰器练习题
  4. 网易邮箱开通imap服务器,网易邮箱率先全面默认开通IMAP服务
  5. 20145104张家明实验五
  6. SAP CRM IBASE对应的搜索实现,动态SQL语句的拼装
  7. Oracle 游标使用大全2
  8. [Node.js] 基于NodeJS+Express+mongoDB+Bootstrap的博客系统实战
  9. 区块链学习笔记:D02 区块链的技术发展历史和趋势
  10. python 读取、写入 pkl文件
  11. Android学习笔记---SQLite介绍,以及使用Sqlite,进行数据库的创建,完成数据添删改查的理解
  12. java与c基本数据类型比较,C++与Java基本数据类型比较
  13. 拓端tecdat|R语言马尔可夫MCMC中的Metropolis Hastings,MH算法抽样(采样)法可视化实例
  14. Rust: 逆序输出str
  15. 【matlab】数值计算实现电路仿真
  16. 在母亲节刷屏几天后,为母亲踏踏实实做点事
  17. Mirai僵尸网络介绍以及源码
  18. mac用什么软件测试硬盘好坏,谁说果粉不在意性能?6款macOS下硬盘测速软件介绍...
  19. Y400本本SSD装win10与机械硬盘上的系统组成双系统
  20. LED,LCD,CRT,TFT,TFD,STN显示屏说明

热门文章

  1. python中template_python Template中substitute()的使用
  2. django+django-haystack+Whoosh(后期切换引擎为Elasticsearch+ik)+Jieba+mysql
  3. 10分钟教你用python如何正确把妹-不知道妹子为何生气?那是因为你没学python
  4. 通达信财务函数与股票公式进阶篇[转]
  5. 三种最典型的大数据存储技术路线
  6. html 字体兼容ie,vue中使用@font-face(字体兼容IE、微信内置)
  7. 树莓派ubuntu换源方法
  8. windows音频声卡采集
  9. 国产开源数据库的讲解
  10. 为赋新词强说愁之一(儿时的那些事儿啊)