首先确保签约单笔转账到支付宝账号

转账到支付宝账号是APP这边一个提现的功能。支付宝提供了可以转账到支付宝账号的功能,可选择收款方账户类型。可取值:

1、ALIPAY_USERID:支付宝账号对应的支付宝唯一用户号。以2088开头的16位纯数字组成。2、ALIPAY_LOGONID:支付宝登录号,支持邮箱和手机号格式。

a、转到支付宝唯一用户号,获取1ALIPAY_USERID的方式需要,支付宝授权才能拿到,下面会有代码实现

b、转账到支付宝登录号,APP可以选择让用户自己填邮箱和手机号

我是用的a方式,b方式具体参照payee_type参数介绍,单笔转账到支付宝账号

代码如下 :

支付宝授权:

  /*** 组装支付宝授权登录信息*/@GetMapping("aliInfoStr")public ResultModel getAliInfoStr(HttpServletRequest request, HttpServletResponse response){ResultModel resultModel= new ResultModel();String targetId = String.valueOf(UUID.next());String signstr="";String signs = "apiname=" + AliPayConfig.AUTH_API_NAME +"&method=" + AliPayConfig.AUTH_API_METHOD +"&app_id=" + AliPayConfig.APP_ID_USER +"&app_name=" + AliPayConfig.AUTH_APP_NAME +"&biz_type=" + AliPayConfig.AUTH_BIZ_TYPE +"&pid=" + AliPayConfig.AUTH_PID +"&product_id=" + AliPayConfig.AUTH_PRODUCT_ID +"&scope=" + AliPayConfig.AUTH_SCOPE +"&target_id=" + targetId +"&auth_type=" + AliPayConfig.AUTH_TYPE +"&sign_type=" + AliPayConfig.SIGN_TYPE ;try {signstr = AlipaySignature.rsaSign(signs,AliPayConfig.PRIVATE_KEY,AliPayConfig.CHARSET,AliPayConfig.SIGN_TYPE);signstr=signs+"&sign="+signstr;resultModel.setStatus(0);resultModel.setMessage("支付宝授权串组装成功");resultModel.setResultObject(signstr);} catch (AlipayApiException e) {e.printStackTrace();}return  resultModel;}

组装返给APP,支付宝调能成功调起授权,把auth_code给服务端去获取用户信息

 /***  获取acesstoken 获取用户信息*/@PostMapping("getAccessToken")public ResultModel getAccessToken(@RequestBody OrderDto dto, HttpServletRequest request,HttpServletResponse response) throws AlipayApiException {ResultModel resultModel  = new ResultModel();AlipayClient alipayClient = new DefaultAlipayClient(AliPayConfig.URL, AliPayConfig.APP_ID_USER, AliPayConfig.PRIVATE_KEY, AliPayConfig.FORMAT, AliPayConfig.CHARSET,AliPayConfig.ALI_PUBLIC_KEY, AliPayConfig.SIGN_TYPE);AlipaySystemOauthTokenRequest aliRequest = new AlipaySystemOauthTokenRequest();aliRequest.setGrantType("authorization_code");aliRequest.setCode(dto.getAliAuthCode());AlipaySystemOauthTokenResponse aliResponse = alipayClient.execute(aliRequest);String authTokenData = aliResponse.getBody();JSONObject authTokenJsonObject = JSONObject.parseObject(authTokenData).getJSONObject("alipay_system_oauth_token_response");if(aliResponse.isSuccess()){System.out.println("调用成功");System.out.println("调用成功");//以下注释是拿到token后获取用户的全部信息,因为我只需要user_id ,没有再调用    ,app支持第三方登录时候可以放开使用 //String accessToken=authTokenJsonObject.getString("access_token");// AlipayUserInfoShareRequest userInfoRequest = new AlipayUserInfoShareRequest();// AlipayUserInfoShareResponse userInfoResponse = alipayClient.execute(userInfoRequest,accessToken);// String userInfoData = aliResponse.getBody();//  JSONObject userInfoJsonObject = JSONObject.parseObject(userInfoData).getJSONObject("alipay_user_info_share_response");//   if(userInfoResponse.isSuccess()){//       System.out.println("调用成功");//       String userAliId =  userInfoJsonObject.getString("user_id");//   } else {//       System.out.println("调用失败");//  }String userAliId =  authTokenJsonObject.getString("user_id");int k = iMicroInquiryUserService.updateUserAliId(userAliId,dto.getUserId()); //此处就是更新一下user里aliOpenId字段,自己写吧,不贴了if(k>0){resultModel.setStatus(1);resultModel.setMessage("绑定用户支付宝ID成功");}else{resultModel.setStatus(0);resultModel.setMessage("绑定支付宝ID失败");}} else {resultModel.setStatus(0);resultModel.setMessage("绑定支付宝授权失败");}return resultModel;}

用到的dto


import java.io.Serializable;/**
* @Description:    提现表用dto*/
public class TixianDto implements Serializable {private static final long serialVersionUID = -27273789824211424L;private Integer userId;   //用户IDprivate String userName;//用户名称private Integer userAliId;//阿里用户IDprivate String wxOpenId; //微信openIdprivate Integer orderNo; // 商户订单号,适配每个渠道对此参数的要求,必须在商户系统内唯一private Float amount; // 订单总金额(必须大于0),单位为对应币种的最小货币单位,人民币为分private String description; // 转账备注(支持200个英文/100个汉字)。当付款方为企业账户,且转账金额达到(大于等于)50000元,remark不能为空。收款方可见,会展示在收款用户的收支详情中。private Integer tixianType;//提现方式  1支付宝2微信3银行卡private String orderWalletId;//提现订单IDpublic Float getAmount() {return amount;}public void setAmount(Float amount) {this.amount = amount;}public String getDescription() {return description;}public void setDescription(String description) {this.description = description;}public Integer getUserId() {return userId;}public void setUserId(Integer userId) {this.userId = userId;}public Integer getOrderNo() {return orderNo;}public void setOrderNo(Integer orderNo) {this.orderNo = orderNo;}public Integer getUserAliId() {return userAliId;}public void setUserAliId(Integer userAliId) {this.userAliId = userAliId;}public String getUserName() {return userName;}public void setUserName(String userName) {this.userName = userName;}public Integer getTixianType() {return tixianType;}public void setTixianType(Integer tixianType) {this.tixianType = tixianType;}public String getWxOpenId() {return wxOpenId;}public void setWxOpenId(String wxOpenId) {this.wxOpenId = wxOpenId;}public String getOrderWalletId() {return orderWalletId;}public void setOrderWalletId(String orderWalletId) {this.orderWalletId = orderWalletId;}
}

下面是转账到支付宝账号

    /***  支付宝向发起提现的用户支付 */@PostMapping("payTixian")public ResultModel payUserAccountTixian(@RequestBody TixianDto dto, HttpServletRequest request,HttpServletResponse response) throws AlipayApiException {ResultModel resultModel = new ResultModel();AlipayClient alipayClient = new DefaultAlipayClient(AliPayConfig.URL, AliPayConfig.APP_ID_USER, AliPayConfig.PRIVATE_KEY, AliPayConfig.FORMAT, AliPayConfig.CHARSET, AliPayConfig.ALI_PUBLIC_KEY, AliPayConfig.SIGN_TYPE);AlipayFundTransToaccountTransferRequest tixianRequest = new AlipayFundTransToaccountTransferRequest();//订单号out_biz_no ,参考app支付订单一样的 String outBizNo = String.valueOf(UUID.next());// User user = 这一块自己实现吧,取用户的aliOpenIdtixianRequest.setBizContent("{" +"'out_biz_no':'" + outBizNo  + "'," +"'payee_type':'ALIPAY_USERID'," +//ALIPAY_LOGONID 使用看文档"'payee_account':'" + user.getAliOpenId() + "'," + //这个aliOpenId就是上面授权得到那个,根据userId查出来赋值"'amount':'0.1'," +"'remark':'审核通过,平台已转账到支付宝账户'}");AlipayFundTransToaccountTransferResponse tixianesponse = alipayClient.execute(tixianRequest);String data = tixianesponse.getBody();JSONObject jsonObject = JSONObject.parseObject(data).getJSONObject("alipay_fund_trans_toaccount_transfer_response");if (tixianesponse.isSuccess()) {System.out.println("调用成功");String outBizNo =  jsonObject.getString("out_biz_no");String orderId =  jsonObject.getString("order_id");String payDate = jsonObject.getString("pay_date");Date payTime = DateUtil.stringToDate(payDate,Constant.FORMAT);AlipayFundTransOrderQueryRequest queryRequest = new AlipayFundTransOrderQueryRequest();queryRequest.setBizContent("{" +"'out_biz_no':'" + outBizNo + "'," +"'order_id':'"+orderId+"'," +"  }");AlipayFundTransOrderQueryResponse queryResponse = alipayClient.execute(queryRequest);String querydata = queryResponse.getBody();JSONObject queryJsonObject = JSONObject.parseObject(querydata).getJSONObject("alipay_fund_trans_order_query_response");if(queryResponse.isSuccess()){System.out.println("调用成功");//上面提现成功后我又调用了查询订单信息,根据业务需求来吧。更新账户金额和生成提现历史明细} else {System.out.println("调用失败");}} else {System.out.println("调用失败");}}}return resultModel;}

支付相关(二):APP支付宝支付-转账到支付宝账号(JAVA服务端开发)相关推荐

  1. 微信支付java服务端开发(APP)

    我这边是针对微信商户支付功能开发.其他的未涉及到. 当你所有的准备工作准备好后:微信支付申请成功,api_key 配置好,等等一系列. 那么让我们进入java开发吧. 微信支付demo下载: http ...

  2. java服务端开发支付宝支付接口,网页支付与app支付

    s 前言 在开发的过程中,不可避免的都需要使用支付功能,本文档主要给大家分享,自己的一次支付宝开发时的经历.支付宝开发,对于个人开发者而言相对于其他支付来说相对比较友好,因为有沙箱环境支持我们在开发阶 ...

  3. APP登录功能的Java服务端开发

    token 在手机端 没有 Session 这样的概念 一般都是通过token , 来传递验证信息 APP的登录功能的实现方式 对于 账号,密码 两种方式, 一 : 存在手机端 , 二 : 通过 服务 ...

  4. java服务端开发安全_后端开发:APP与后端交互的安全性

    声明 此文原创,未经允许,禁止转载,可以分享. 最近在做一个项目,是一个APP的后端开发.我需要完成后端框架的建立.数据库设计.后端代码的编写.在这里讲一下APP与后端交互的安全性. 没有AUTH的验 ...

  5. 支付宝APP支付Java服务端

    支付宝APP支付Java服务端: 公司项目要求对接支付宝进行支付功能,这边做出整理方便以后使用(支付宝的支付对接还是很简单的). 1):去支付宝开放平台,-1.注册账号,2.创建应用 3.配置应用 4 ...

  6. 谷歌支付(Java服务端)

    Google Pay主要支付流程 1.手机端向Java服务端发起支付,生成预订单,给手机端返回生成的订单号 2.手机端向Google发起支付(传入本地服务器生成的订单号) 3.Google服务器将支付 ...

  7. php 个人账户转账,支付宝单笔转账到支付宝个人账户接口 ( PHP 版 )

    alipay.fund.trans.toaccount.transfer(单笔转账到支付宝账户接口) 单笔转账到支付宝账户接口是基于支付宝的资金处理能力,为了满足支付宝商家向其他支付宝账户转账的需求, ...

  8. 抖音、腾讯、阿里、美团春招服务端开发岗位硬核面试(二)

    在上一篇 文章中,我们分享了几大互联网公司面试的题目,本文就来详细分析面试题答案以及复习参考和整理的面试资料,小民同学的私藏珍品????. 首先是面试题答案公布,在讲解时我们主要分成如下几块:语言的基 ...

  9. app及Java服务端实现JT808协议的定义解析

    app及Java服务端实现JT808协议的定义解析,可以用做行车记录仪等的app. 网上很多帖子已经对JT808协议做了说明,我在这里就不做过多的赘述了. 最近接到一个项目是打车类的,所以对这协议做了 ...

最新文章

  1. OVS ovs-vsctl(二十五)
  2. 2021中超1 1010 zoto
  3. 重磅!李宏毅教授机器学习训练营
  4. XidianOJ 1176 ship
  5. (转)springboot:添加JSP支持
  6. c++ ea 代码 生成_看EA如何生成代码框架
  7. android ijkplayer c层分析-prepare过程与读取线程(续1-解码粗略分析)
  8. 20210501:字符串与哈希表力扣专题学习记录
  9. HDU2081 手机短号【水题】
  10. 1006 换个格式输出整数 (15)
  11. 图形界面编程成就了C++
  12. 【Demo】文件下载操作(console版和web版)
  13. 第五人格显示服务器维护中请稍后登录怎么办,第五人格维护登不上怎么办 服务器维护中详情...
  14. libreelec投屏_PVE系列四:安装LibreELEC-KODI的LINUX版
  15. 爬取《NBA30支球队》“现役球员信息”,分别存储到3种不同的数据库!
  16. odoo15 po文件自动翻译器
  17. 31道Java核心面试题(不会的都看过来啦)
  18. Folx Pro5最新版适用Mac电脑网络BT下载器
  19. Unity3D怪物基本AI
  20. ecshop模板支持php,ecshop模板不支持引入PHP语句的解决方法

热门文章

  1. ​实力证明赢在起跑线:小学生开发AI识别危险文具应用
  2. AdaBoost人脸检测算法1(转…
  3. Linux 7.X 各个版本的下载地址
  4. linux ks脚本,linux安装详解-配置ks.cfg实现自动安装过程
  5. 基于距离谱的DE增强蛋白质构象空间采样
  6. [Mugeda HTML5技术教程之17] 理解Mugeda访问统计结果
  7. Android实践-自定义dialog从屏幕底部弹出并且充满屏幕宽度
  8. Chrome 取代 Safari 成为最快的浏览器
  9. Python 屏幕取词功能?你知道怎么实现吗?
  10. netty 序列化工具类 protostuff