欢迎加群:854228077。
帮助更多java程序员提升技术!资料多,大佬多!

提供信息:
首先商家支付宝收款账号要提供
接口方给接口文档
使用环境:
1.支付宝APP扫码进入H5 web端,购买商品,下单支付。
2.其他购物APP,如KFC官方APP扫码进入H5 web端,购买商品,下单支付。
对接大致流程:
1.调用第三方提供的接口getPaymentUrl(每家公司定义不同)
这个接口的作用是,我这边把基础参数以json格式,传递给ecpay那边的这个接口中,他们会处理这个json参数,向支付宝方发起请求,并且获取到一个form表单,直接返回给我这边。
2.我这边直接把这个form表单转发到前端,前端用JS方法拉起收银台(这里的收银台就是支付宝官方的输入密码界面,术语称为收银台)
3.选择付款方式,是花呗,余额,银行卡等,输入密码。
4.支付宝官方会回调支付成功的响应界面,第三方支付接口会回调我这边的支付结果告知接口,告知我们支付结果。最后,把支付结果返回给我们提供给他们的结果响应页面。
整个支付对接流程,就是这样,是不是很简单。

在这里,我这边条件限制,没有网络环境,所以,我只能按照第三方的接口,及这个交互流程,用支付宝沙箱环境模拟开发。
也就是模拟第三方的getPaymentUrl接口,调用支付宝沙箱支付接口,获取form表单,然后,把返回结果返回给前端页面,实现拉起收银台的动作。

收银台被拉起了,支付就不是问题了。

所以,这个块对接工作的难点就是在如何模拟拉起收银台。

上代码:

第一步:前端点击立即付款,调用我们自己后端的接口。

/*** 注意,因为涉及到商业隐私,这里算是伪代码,我只贴了关于接口对接的主要代码。*/
public Object PayRoadDemo(HttpServletRequest request,PayParams params) throws Exception {String jsonParam="";if("ALIPAY".equals(payWay)) {//获取支付宝支付方式的json参数。portalType="F2FWAP";jsonParam=getJsonParams();//生成第三方需要的json数据方法。}logger.info(jsonParam);//调用自己模拟编写的getPaymentURL接口,获取沙箱返回的form表单数据。HttpResponse response=HttpRequest.post("http://127.0.0.1/Alipay/Pay/getPaymentURL.do").header("Content-Type","application/json").body(jsonParam).execute();//从body中读取返回结果数据。BufferedReader tBufferedReader = new BufferedReader(new InputStreamReader(response.bodyStream()));StringBuffer checkoutUrl = new StringBuffer();String sTempOneLine = new String("");while ((sTempOneLine = tBufferedReader.readLine()) != null){checkoutUrl.append(sTempOneLine);}logger.info(checkoutUrl);return checkoutUrl;//返回拉起收银台的url给前端。}

第二步:调用getPaymentURL接口,获取form表单,拉起收银台。

/*** 注意,因为涉及到商业隐私,这里算是伪代码,我只贴了关于接口对接的主要代码。* 这个接口的编写,需要引入支付宝的SDK*     <dependency>*     <groupId>com.alipay.sdk</groupId>*      <artifactId>alipay-sdk-java</artifactId>*       <version>3.3.4.ALL</version>*   </dependency>*/public  Object getPaymentURL(HttpServletRequest request,HttpServletResponse response) throws IOException {String jsonParam="";String str = "";//从调用方发起的http请求,获取json参数。BufferedReader br;br = request.getReader();while((str = br.readLine()) != null){jsonParam += str;}logger.info("jsonParam:"+jsonParam);//把json参数转成map格式,读取内容。    JSONObject  jsonData = JSONObject.parseObject(jsonParam);Map<String,Object> dataMap = (Map<String,Object>)jsonData;JSONObject  paymentOrder = JSONObject.parseObject(dataMap.get("paymentOrder").toString());Map<String,Object> paymentOrderMap = (Map<String,Object>)paymentOrder;//支付宝接口需要的参数。String out_trade_no=new String(paymentOrderMap.get("orderId").toString().getBytes("ISO-8859-1"),"UTF-8");//商户订单号String subject=new String(paymentOrderMap.get("orderId").toString().getBytes("ISO-8859-1"),"UTF-8");//订单名称String total_amount=new String(paymentOrderMap.get("orderFee").toString().getBytes("ISO-8859-1"),"UTF-8");//付款金额 String body=new String("无".getBytes("ISO-8859-1"),"UTF-8");//商品描述String timeout_express=new String("3m".toString().getBytes("ISO-8859-1"),"UTF-8");//超时时间 可空String product_code=new String("QUICK_WAP_WAY".toString().getBytes("ISO-8859-1"),"UTF-8");// 销售产品码 必填//调用RSA签名方式,下面这段代码来自支付宝官方demo。AlipayClient client = new DefaultAlipayClient(AlipayConfig.URL, AlipayConfig.APPID, AlipayConfig.RSA_PRIVATE_KEY, AlipayConfig.FORMAT, AlipayConfig.CHARSET, AlipayConfig.ALIPAY_PUBLIC_KEY,AlipayConfig.SIGNTYPE);AlipayTradeWapPayRequest alipay_request=new AlipayTradeWapPayRequest();// 封装请求支付信息AlipayTradeWapPayModel model=new AlipayTradeWapPayModel();model.setOutTradeNo(out_trade_no);model.setSubject(subject);model.setTotalAmount(total_amount);model.setBody(body);model.setTimeoutExpress(timeout_express);model.setProductCode(product_code);alipay_request.setBizModel(model);// 设置异步通知地址alipay_request.setNotifyUrl(AlipayConfig.notify_url);// 设置同步地址alipay_request.setReturnUrl(AlipayConfig.return_url);   // form表单生产String form = "";try {// 调用SDK生成表单form = client.pageExecute(alipay_request).getBody();//这个字符编码格式,必须要设置,否则前端跳转时候会报**签名错误**,亲自掉坑。response.setContentType("text/html;charset=" + AlipayConfig.CHARSET); } catch (AlipayApiException e) {// TODO Auto-generated catch blocke.printStackTrace();} return form;}

第三步:前端获取返回结果的JS代码,拉起收银台。

$.ajax({type: "post",url:'${path}/Pay/PayRoadDemo.do',data:{Ip:'127.0.0.1',payWay:'ALIPAY',orderFee:'50',mobile:'13344445555',orderId:'1111111111'},dataType:"json",success:function(url){console.log(url);//下面四行代码是主要代码。const div = document.createElement('div');div.innerHTML = url;//此处form就是后台返回接收到的数据document.body.appendChild(div);document.forms[1].submit();//这里注意下forms[1],更具自己的情况来。}});

附文:官方demo下载地址。(这里具体如何使用官方网站的教程,就不细说了)
先登录:https://openhome.alipay.com/platform/manageHome.htm
在进入:
demo下载地址:https://docs.open.alipay.com/54/

对接第三方支付接口-支付宝方式对接(我这边对接的是ecpay公司支付接口)相关推荐

  1. 软件测试之第三方快捷支付_支付宝遭遇最强对手:银联正面PK快捷支付

    对于仅靠提供支付交易网关服务而生存的企业,银联"无卡支付"的正式上线无疑是一大噩耗. 没有网银照样支付 线上银联很强大 "无卡支付"正面PK"快捷支付 ...

  2. 和后台如何对接_业务系统如何对接第三方服务?

    在产品工作中,我们时常要对接第三方服务.本文作者从过往的对接项目经历中,提炼的关于业务系统,如何对接第三方服务的方法论,希望能对你有所帮助. 随着公司业务的发展,我们有时会遇到,需要在自身业务系统中加 ...

  3. 对接第三方系统实操经验分享

    对接第三方系统实操经验分享 前言 为使得指示性更强,有以下名词说明 A系统:是指要发起对接的我方系统,可以理解成 Client B系统:是要对接的第三方系统,可以理解成 Server 对接第三方的特殊 ...

  4. 微信支付与支付宝钱包的竞争分析

    微信支付与支付宝钱包的竞争分析 NO1: 十九世纪七十年代起,"物竞天择,适者生存,优胜劣汰"已逐渐成为现代生物学的口号.而今,不知不觉中,它似乎也成了当代社会学的口号.罗素说:& ...

  5. 微信支付与支付宝钱包的关键性差异

    本文主角:微信支付和支付宝钱包. 配角:微博支付.平安壹钱包.百度理财和网易理财. 本文结论:微信支付从流量切入拼支付流程,大而全的支付宝钱包无法舍弃存量拼流量,因此拉出微博支付专精流量作为牵制.支付 ...

  6. 对接第三方支付接口-记录

    对接支付接口,得知这种第三方的支付接口的对接方式一般为:组装接口需要的参数,以json数据格式或者其他格式(大多数为json),请求第三方支付接口的url,并且将回调的通知地址放在参数中,等支付完成后 ...

  7. Java对接第三方支付渠道之支付宝支付

    提示:支付宝相对于微信支付更人性化,且细节做得更好. Java对接第三方支付渠道之支付宝支付 一.前期准备工作 二.导入依赖 三.书写配置类 四.书写配置文件 五.调用相关支付接口 1.流程图 2.创 ...

  8. url 参数传递的两种方式_Java项目实践,支付功能实现方式,第三方支付与银行接口支付...

    1.第三方支付 B2C电商的支付,一般由于支付金额比较小,支付比较频繁,所以一般采用第三方支付,常用的第三方支付有:支付宝.微信等. 他们的原理都差不多,都是在点击支付时,直接调用第三方支付接口,传入 ...

  9. Java对接第三方支付渠道之微信支付APIV3版本

    提示:微信支付APIV3版本对接流程梳理,目前微信支付提供APIV3和APIV2两个版本,简而言之,V3版本的安全性比V2更高. Java对接第三方支付渠道之微信支付APIV3版本 一.接入指引 1. ...

  10. JavaWEB后端支付银联,支付宝,微信对接

    注:本文来源于:<  JavaWEB后端支付银联,支付宝,微信对接  > JavaWEB后端支付银联,支付宝,微信对接 标签(空格分隔): java 项目概述 最近项目需要后端打通支付,所 ...

最新文章

  1. [转载]C# 二进制与十进制,十进制与十六进制相互转换
  2. Vertica的这些事lt;十二gt;—— vertica存储统计信息
  3. 快递春节停运时间表刷屏,假的!但或涨价10-20元
  4. 计算机辅助普通话水平测试评分办法,江苏省计算机辅助普通话水平测试评分细则...
  5. 骚操作!有了这款神器,轻轻松松用Python写APP!(文末彩蛋)
  6. Post/Redirect/Get模式防止表单重复提交
  7. 网站决策分析软件WebBI
  8. 如何允许网页中的编辑器访问剪切板_Vditor下一代的 Markdown 编辑器,为未来而构建...
  9. github get 请求指定页面的代码
  10. Java中的泛型使用
  11. checkbox选中与取消选择
  12. 解决excel导出大数字溢出或者被科学计数法格式化
  13. 电信dns地址是多少?
  14. python 读取.sgy地震文件到三维ndarray矩阵,(全网仅此一份)
  15. 我的世界服务器物品管道,物品导管 (Item Conduit)
  16. 参加计算机培训典型材料,计算机应用专业典型学员事迹材料
  17. 电商后台管理系统订单列表模块
  18. 颜值高的游戏键盘—HyperX Alloy Origins 60 霓虹粉游戏机械键盘
  19. 大动作|阿里云扩招5000人!云计算、AI抢夺全球人才
  20. 程序员怎么提高英语阅读水平?

热门文章

  1. 解决dos打开界面变小和打开软件字体乱码的问题
  2. 无锡市计算机表演大赛,第二十七届中国儿童青少年计算机表演赛无锡赛区决赛-无锡少年宫.DOC...
  3. 小白也能学引流技巧:如何利用微信群找到你的精准用户| 二维彩虹二维码生成器
  4. mysql 8 my.ini skip_mysql8.0版本skip-grant-tables出现的新问题
  5. globk命令帮助信息
  6. 计算机的键盘怎么找出来,电脑的键盘隐藏了怎么办
  7. matlab imcrop 对应python函数_MATLAB车牌识别之车牌精准定位浅谈
  8. 目前可行的4种知网文献免费下载方法分享
  9. 知网免费查阅、下载论文方法
  10. 【Mac 教程系列第 8 篇】Mac 更换锁屏时的头像