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

  进入主题, 支付宝支付先要去 蚂蚁金服开放平台注册账号:https://open.alipay.com/platform/home.htm

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

  

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

   Java支付宝支付

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

  这里直达官方文档:https://docs.open.alipay.com/203/105285/

   我直接贴我的代码:

 /*** * 说明:支付宝支付  (我只填了部分参数,如果有更多参数需求的 可以直接:https://docs.open.alipay.com/203/107090/ )* @param orderNumber  商户网站唯一订单号* @param orderMoney  订单金额* @param orderSubject  商品的标题,关键字 * @param notifyUrl  异步回调地址(后台) 获取订单信息* @param returnUrl  同步回调地址(APP) 处理业务及渲染页面  * @author 许奥伦* @time:2018年12月11日 下午2:14:57*/@Overridepublic 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异步通知代码    

  异步响应数据官方文档: https://docs.open.alipay.com/203/105286/

公共响应参数 : https://docs.open.alipay.com/api_1/alipay.trade.wap.pay

  

  /*** * 说明:对于手机网站支付产生的交易,支付宝会根据原始支付API中传入的异步通知地址notify_url,通过POST请求的形式将支付结果作为参数通知到商户系统。* @param request* @return* @author 许奥伦* @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<String,String> params = new HashMap<String,String>();  Map<String, String[]> requestParams = request.getParameterMap();  for (Iterator<String> 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<String,String> params = new HashMap<String,String>();Map<String, String[]> requestParams = request.getParameterMap();for (Iterator<String> 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不为nullmv.addObject("verify_result", verify_result);mv.addObject("msg", "商户订单号不存在");} */return mv;}else{//验证失败   跳失败页面System.out.println("验证失败");  return null;  } } catch (AlipayApiException e) {e.printStackTrace();//出现异常   跳失败页面return null;  }}

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

  

转载于:https://www.cnblogs.com/aolun/p/10104017.html

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

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

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

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

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

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

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

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

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

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

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

  6. 如何使用支付宝沙箱测试单笔转账到支付宝账号(php版)

    说明:    本帖是利用支付宝沙箱测试电脑网站支付接口    测试环境:Apache2.4.23 +php 5.6.25    沙箱环境测试正式环境请修改网关为下方值 正式环境网关:https://o ...

  7. thinkphp支付宝资金下发 单笔转账

    下载支付宝服务端对应的sdk,放到Vendor下面. 下载地址:https://opendocs.alipay.com/open/54/103419/#Alipay%20SDK /***支付宝转账接口 ...

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

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

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

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

最新文章

  1. vscode编辑器自动格式化
  2. mysql中有哪些数值型函数_mysql数值型函数汇总
  3. python对文件夹内文件去重
  4. oracle触发器 select into,Oracle触发器中selectinto报错no_data_found异常处理
  5. struts+hibernate+oracle+easyui实现lazyout组件的简单案例——OpSessionview实现
  6. Android之智能问答机器人
  7. java铃声类_java多线程抓取铃声多多官网的铃声数据
  8. [10] ADB 修改设置
  9. linux查看编译器的大小端,Linux系统大小端判断
  10. Nginx---- Nginx命令配置到系统环境
  11. 《设计模式详解》设计模式概述、UML
  12. 保存自动修复_模糊照片修清晰,使用自动修复软件,做出专业级老照片修复效果...
  13. Web前端页面的浏览器兼容性测试心得(三)总结一些IE8兼容问题的解决方案
  14. 你是这样理解shell编程的嘛?
  15. Oracle 查看表空间使用率,表空间扩展
  16. opengl绘制太阳、地球、月亮,贴上纹理,设置光照,符合自转和公转规律
  17. 反步法设计步骤及仿真验证(非线性系统)
  18. 【JAVA Core】精品面试题100道
  19. 狂神css视频笔记1-15课
  20. e470c拆机图解全拆 thinkpad_thinkpad t470怎么样?thinkpad t470拆机图解全面评测

热门文章

  1. 《感遇·其二》 作者:张九龄
  2. AI 从 PS 导入的路径显示不全
  3. 今年双11,退货率6%
  4. drf之day05: 2个视图基类,GenericAPIView的属性和方法,基于APIView写5个接口,基于GenericAPIView写5个接口,5个视图扩展类,9个视图子类,视图集
  5. 修复Unity空白报错问题
  6. 如何人物抠图?介绍三种人物抠图的方法
  7. 写给计算机专业学生的一些忠告
  8. Unity3D 如何用3D游戏体播放视频 VideoPlayer
  9. matplotlib.animation绘制动图并保存
  10. php echo 输出中文乱码