最近一直在接触第三方,刚接入完支付宝的API做一下总结,个人能力薄弱有不对的地方望指教.  做的是一个小型电商项目,所以会接入第三方的支付和登入功能, 第一次接入第三方撸了很多官方文档.

然后创建应用选择需要接入的功能,有些应用是需要签约的签约就好了审核蛮快的.

以上应用申请,功能申请的一些操作我就不多做解释了网上很多例子,

Java支付宝支付

这里有APP支付和手机网站支付, APP支付是针对Android和IOS的案例,  那么我做的是手机网站支付针对Java后台的案例.

我直接贴我的代码:

/**

*

* 说明:支付宝支付 (我只填了部分参数,如果有更多参数需求的 可以直接:https://docs.open.alipay.com/203/107090/ )

* @param orderNumber 商户网站唯一订单号

* @param orderMoney 订单金额

* @param orderSubject 商品的标题,关键字

* @param notifyUrl 异步回调地址(后台) 获取订单信息

* @param returnUrl 同步回调地址(APP) 处理业务及渲染页面

* @author ArLen

* @time:2018年12月11日 下午2:14:57

*/

@Override

public void payment(String orderNumber,

String orderMoney,

String orderSubject,

String notifyUrl,

String returnUrl) {

//填写自己创建的app的对应参数

private static AlipayClient alipayClient = new DefaultAlipayClient("支付宝网关", "appid", "私钥", "json", "utf-8", "公钥","RSA2");

AlipayTradeWapPayRequest alipayRequest = new AlipayTradeWapPayRequest();

// 封装请求支付信息

AlipayTradeWapPayModel model=new AlipayTradeWapPayModel();

model.setOutTradeNo(orderNumber);

model.setTotalAmount(orderMoney);

model.setSubject(orderSubject);

model.setProductCode("QUICK_WAP_WAY");

alipayRequest.setBizModel(model);

//异步回调地址(后台)

alipayRequest.setNotifyUrl(notifyUrl);

// 同步回调地址(APP)

alipayRequest.setReturnUrl(returnUrl);

try {

//调用SDK生成表单

String form = alipayClient.pageExecute(alipayRequest).getBody();

//打印, 可以直接response到页面上

System.out.println(form);

} catch (AlipayApiException e) {

e.printStackTrace();

}

}

支付成功后支付宝会自动请求你写的  notifyUrl (异步通知, 接收支付宝异步通知,从而获取此订单的状态) 和 returnUrl  (支付完成后,支付宝会发送同步请求进行数据渲染,  这里我是用ModelAndView 渲染的数据)

notifyUrl异步通知代码

/**

*

* 说明:对于手机网站支付产生的交易,支付宝会根据原始支付API中传入的异步通知地址notify_url,通过POST请求的形式将支付结果作为参数通知到商户系统。

* @param request

* @return

* @author Arlen

* @time:2018年12月3日 下午4:51:35

*/

@RequestMapping("notifyUrl")

@ResponseBody

public String notify(HttpServletRequest request){

int im=0;

im++;

//测试请求次数

System.out.println("次数:"+im);

//获取支付宝POST过来反馈信息

Map params = new HashMap();

Map requestParams = request.getParameterMap();

for (Iterator iter = requestParams.keySet().iterator(); iter.hasNext();) {

String name = (String) iter.next();

String[] values = (String[]) requestParams.get(name);

String valueStr = "";

for (int i = 0; i < values.length; i++) {

valueStr = (i == values.length - 1) ? valueStr + values[i]

: valueStr + values[i] + ",";

}

//乱码解决,这段代码在出现乱码时使用。如果mysign和sign不相等也可以使用这段代码转化

//valueStr = new String(valueStr.getBytes("ISO-8859-1"), "gbk");

params.put(name, valueStr);

}

//获取支付宝的通知返回参数,可参考技术文档中页面跳转同步通知参数列表(以下仅供参考)//

//商户订单号

String out_trade_no = request.getParameter("out_trade_no");

//支付宝交易号

String trade_no = request.getParameter("trade_no");

//交易状态

String trade_status = request.getParameter("trade_status");

System.out.println(trade_status);

try {

boolean verify_result = AlipaySignature.rsaCheckV1(params, ALIPAY_PUBLIC_KEY, "utf-8", "RSA2");

if(verify_result){

//验证成功

//请在这里加上商户的业务逻辑程序代码

System.out.println("returnUrl_params:验证成功");

//——请根据您的业务逻辑来编写程序(以下代码仅作参考)——

boolean flg = false;

if(trade_status.equals("TRADE_FINISHED")){

System.out.println("returnUrl_params:交易结束");

//交易结束,不可退款

//注意:

//退款日期超过可退款期限后(如三个月可退款),支付宝系统发送该交易状态通知

} else if (trade_status.equals("TRADE_SUCCESS")){

//交易支付成功

//注意:

//付款完成后,支付宝系统发送该交易状态通知

//根据订单号将订单状态和支付宝记录表中状态都改为已支付

System.out.println("returnUrl_params:交易支付成功");

flg = true;

}

//——请根据您的业务逻辑来编写程序(以上代码仅作参考)——

if(flg){

return "success";

}else{

return "fail";

}

}else{//验证失败

//out.print("fail");

return "fail";

}

} catch (AlipayApiException e) {

e.printStackTrace();

return "500";

}

}

returnUrl 同步通知代码

我在这边处理了业务逻辑,还在测试阶段, 我觉得有些欠缺.

@RequestMapping("/returnUrl")

public ModelAndView result( HttpServletRequest request) {

System.out.println("进来");

//用ModelAndView 进行数据渲染

ModelAndView mv = new ModelAndView("alipay/return_url");

//获取支付宝GET过来反馈信息

Map params = new HashMap();

Map requestParams = request.getParameterMap();

for (Iterator iter = requestParams.keySet().iterator(); iter.hasNext();) {

String name = (String) iter.next();

String[] values = (String[]) requestParams.get(name);

String valueStr = "";

for (int i = 0; i < values.length; i++) {

valueStr = (i == values.length - 1) ? valueStr + values[i]

: valueStr + values[i] + ",";

}

//乱码解决,这段代码在出现乱码时使用。如果mysign和sign不相等也可以使用这段代码转化

//valueStr = new String(valueStr.getBytes("ISO-8859-1"), "utf-8");

params.put(name, valueStr);

}

//交易订单编号

String out_trade_no = request.getParameter("out_trade_no");

//交易金额

String total_amount = request.getParameter("total_amount");

//支付宝交易账号

//String trade_no = request.getParameter("trade_no");

//订单创建时间

String timestamp = request.getParameter("timestamp");

mv.addObject("out_trade_no", out_trade_no);

mv.addObject("total_amount", total_amount);

mv.addObject("timestamp", timestamp);

//打印所有响应数据

System.out.println("returnUrl_params:"+params);

try {

boolean verify_result = AlipaySignature.rsaCheckV1(params, ALIPAY_PUBLIC_KEY, "utf-8", "RSA2");

if(verify_result){

//验证成功 这里写的是假代码

//系统处理根据支付宝回调更改订单状态或者其他关联表的数据 (走业务流程, 根据订单编号获取订单数据

//Order order =orderService.queryOrderByNumber(out_trade_no);

/* if(order !=null){

//order不为null

mv.addObject("verify_result", verify_result);

mv.addObject("msg", "商户订单号不存在");

} */

return mv;

}else{

//验证失败 跳失败页面

System.out.println("验证失败");

return null;

}

} catch (AlipayApiException e) {

e.printStackTrace();

//出现异常 跳失败页面

return null;

}

}

今天就先写到 支付宝支付,明天再写支付宝退款及其他操作.

java 支付宝 退款_Java 支付宝支付,退款,单笔转账到支付宝账户(支付宝支付)相关推荐

  1. Springboot整支付宝网站支付、APP支付、单笔转账给用户、退款功能

    一.概述 最近在写项目,遇到了要调用支付宝支付的地方(后台管理页面的网站支付,APP内的用户支付,APP内用户提现也就是单笔转账给用户.退款).研究了好久,全部调通了,下面把我的代码分享出来. 首先那 ...

  2. 支付宝支付之“单笔转账到支付宝账户接口”的调用(生成签名、上传应用公钥、下载SDK、接口调用、报错自动排查、查看错误码)

    支付宝接口调用 "单笔转账到支付宝账户"的接口调用,一般涉及到下面几个知识点 1.生成签名 在使用支付宝接口的时候,需要使用支付宝的签名,这里需要使用支付宝的RSA生成工具. 关于 ...

  3. php 个人账户转账,alipay.fund.trans.uni.transfer(单笔转账到支付宝账户接口PHP示例)

    单笔转账接口是基于支付宝的资金处理能力,为了满足支付宝商家的转账需求,针对有部分开发能力的商家,提供通过API接口完成企业自身支付宝账户到支付宝账户.企业自身支付宝账户到银行卡的转账功能. 适用于:C ...

  4. 平台资金提现解决方案之实现支付宝单笔转账到银行卡功能

    大家好,我是小悟 使用场景 不管是做APP.电脑网站.手机网站还是小程序,为了推广基本上都离不开用户分佣的场景. 换句话说就是在其平台内为每个用户设置"电子钱包"功能,而电子钱包在 ...

  5. java 支付宝转账_Java 支付宝支付,退款,单笔转账到支付宝账户(支付宝订单退款)...

    上一篇写到支付宝的支付,这代码copy下来就能直接用了,   我写学习文档时会经常贴 官方参数文档的案例地址, 因为我觉得 请求参数,响应参数说明 官方文档整理的很好,毕竟官方不会误导大家. 我学一个 ...

  6. Java 支付宝支付,退款,单笔转账到支付宝账户(单笔转账到支付宝账户)

    上次分享了支付宝订单退款的代码,今天分享一下支付宝转账的操作.  现在是有一个余额提现的功能,本来是打算做提现到银行卡的,但是客户嫌麻烦不想注册银联的开放平台账户,就说先提现到支付宝就行,二期再做银行 ...

  7. Java 支付宝支付,退款,单笔转账到支付宝账户(支付宝支付)

    最近一直在接触第三方,刚接入完支付宝的API做一下总结,个人能力薄弱有不对的地方望指教.  做的是一个小型电商项目,所以会接入第三方的支付和登入功能, 第一次接入第三方撸了很多官方文档. 进入主题, ...

  8. 支付宝单笔转账到支付宝账户(用于分成或者退款)

    超快速接入 支付宝官方文档 直接上代码 SDK AlipayUtils 支付宝官方文档 转账到支付宝用户快速接入 单笔转账到支付宝账户接入助手 直接上代码 SDK <!-- https://mv ...

  9. 微信接口java解密_java使用AES-256-ECB(PKCS7Padding)解密——微信支付退款通知接口指定解密方式...

    1.场景 在做微信支付退款通知接口时,微信对通知的内容做了加密,并且指定用 AES256 解密,官方指定的解密方式如下: 2.导包 org.bouncycastle bcprov-jdk15on 1. ...

最新文章

  1. 阿里发布千亿参数规模AI模型,可设计30多种物品高清图像
  2. 面试----Object类
  3. 【数据结构与算法】之树的概念与使用
  4. 永磁直驱风力发电机结构图_风机越来越大,国内首台10兆瓦海上风力发电机研制成功...
  5. 使用ASP.NET Core开发GraphQL服务器 -- 极简预备知识(上)
  6. 如何运行ruby代码
  7. python中利用itchat实现自动回复
  8. 数据库 读锁(共享锁)、 写锁(排他锁)
  9. python创意动态图片_Python趣味创意编程
  10. Ubuntu下如何创建文本文件
  11. JavaScript语法引用数据类型之函数(Fuction)
  12. scrum master_你能使我成为一个scrum master吗
  13. 山东理工ACM【1532】矩阵输出
  14. 专题分纲目录 思维导图 手绘基础篇
  15. VxWorks编译ACE和TAO
  16. Office显示未授权,需要激活这种情况应该怎么处理
  17. STM32L0系列之【串口收发】
  18. Sofa生态: SofaBoot从入门到放弃
  19. softlayer iso_在SoftLayer云中启用地图和地理空间分析
  20. 种植福田{培植福报}~福慧双修——悟透自己!

热门文章

  1. AOP 还在配置吗改用打标签模式吧!
  2. Visual Studio 2017 与 Visual Studio for Mac 支持更新
  3. 开源纯C#工控网关+组态软件(六)图元组件
  4. 发达国家与发展中国家编程语言技术的分布差异性
  5. 利用 async amp; await 的异步编程
  6. 解决 Cmder 的光标跟文字有个间距 及常用配置
  7. [转]面试官,不要再问我三次握手和四次挥手
  8. 【MATLAB统计分析与应用100例】案例007:matlab数据的极差归一化变换
  9. C和指针之IO流和缓冲区
  10. Android之adb shell dumpsys activity获取task里面的所有actitiy