对接第三方支付接口-支付宝方式对接(我这边对接的是ecpay公司支付接口)
欢迎加群: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公司支付接口)相关推荐
- 软件测试之第三方快捷支付_支付宝遭遇最强对手:银联正面PK快捷支付
对于仅靠提供支付交易网关服务而生存的企业,银联"无卡支付"的正式上线无疑是一大噩耗. 没有网银照样支付 线上银联很强大 "无卡支付"正面PK"快捷支付 ...
- 和后台如何对接_业务系统如何对接第三方服务?
在产品工作中,我们时常要对接第三方服务.本文作者从过往的对接项目经历中,提炼的关于业务系统,如何对接第三方服务的方法论,希望能对你有所帮助. 随着公司业务的发展,我们有时会遇到,需要在自身业务系统中加 ...
- 对接第三方系统实操经验分享
对接第三方系统实操经验分享 前言 为使得指示性更强,有以下名词说明 A系统:是指要发起对接的我方系统,可以理解成 Client B系统:是要对接的第三方系统,可以理解成 Server 对接第三方的特殊 ...
- 微信支付与支付宝钱包的竞争分析
微信支付与支付宝钱包的竞争分析 NO1: 十九世纪七十年代起,"物竞天择,适者生存,优胜劣汰"已逐渐成为现代生物学的口号.而今,不知不觉中,它似乎也成了当代社会学的口号.罗素说:& ...
- 微信支付与支付宝钱包的关键性差异
本文主角:微信支付和支付宝钱包. 配角:微博支付.平安壹钱包.百度理财和网易理财. 本文结论:微信支付从流量切入拼支付流程,大而全的支付宝钱包无法舍弃存量拼流量,因此拉出微博支付专精流量作为牵制.支付 ...
- 对接第三方支付接口-记录
对接支付接口,得知这种第三方的支付接口的对接方式一般为:组装接口需要的参数,以json数据格式或者其他格式(大多数为json),请求第三方支付接口的url,并且将回调的通知地址放在参数中,等支付完成后 ...
- Java对接第三方支付渠道之支付宝支付
提示:支付宝相对于微信支付更人性化,且细节做得更好. Java对接第三方支付渠道之支付宝支付 一.前期准备工作 二.导入依赖 三.书写配置类 四.书写配置文件 五.调用相关支付接口 1.流程图 2.创 ...
- url 参数传递的两种方式_Java项目实践,支付功能实现方式,第三方支付与银行接口支付...
1.第三方支付 B2C电商的支付,一般由于支付金额比较小,支付比较频繁,所以一般采用第三方支付,常用的第三方支付有:支付宝.微信等. 他们的原理都差不多,都是在点击支付时,直接调用第三方支付接口,传入 ...
- Java对接第三方支付渠道之微信支付APIV3版本
提示:微信支付APIV3版本对接流程梳理,目前微信支付提供APIV3和APIV2两个版本,简而言之,V3版本的安全性比V2更高. Java对接第三方支付渠道之微信支付APIV3版本 一.接入指引 1. ...
- JavaWEB后端支付银联,支付宝,微信对接
注:本文来源于:< JavaWEB后端支付银联,支付宝,微信对接 > JavaWEB后端支付银联,支付宝,微信对接 标签(空格分隔): java 项目概述 最近项目需要后端打通支付,所 ...
最新文章
- [转载]C# 二进制与十进制,十进制与十六进制相互转换
- Vertica的这些事lt;十二gt;—— vertica存储统计信息
- 快递春节停运时间表刷屏,假的!但或涨价10-20元
- 计算机辅助普通话水平测试评分办法,江苏省计算机辅助普通话水平测试评分细则...
- 骚操作!有了这款神器,轻轻松松用Python写APP!(文末彩蛋)
- Post/Redirect/Get模式防止表单重复提交
- 网站决策分析软件WebBI
- 如何允许网页中的编辑器访问剪切板_Vditor下一代的 Markdown 编辑器,为未来而构建...
- github get 请求指定页面的代码
- Java中的泛型使用
- checkbox选中与取消选择
- 解决excel导出大数字溢出或者被科学计数法格式化
- 电信dns地址是多少?
- python 读取.sgy地震文件到三维ndarray矩阵,(全网仅此一份)
- 我的世界服务器物品管道,物品导管 (Item Conduit)
- 参加计算机培训典型材料,计算机应用专业典型学员事迹材料
- 电商后台管理系统订单列表模块
- 颜值高的游戏键盘—HyperX Alloy Origins 60 霓虹粉游戏机械键盘
- 大动作|阿里云扩招5000人!云计算、AI抢夺全球人才
- 程序员怎么提高英语阅读水平?
热门文章
- 解决dos打开界面变小和打开软件字体乱码的问题
- 无锡市计算机表演大赛,第二十七届中国儿童青少年计算机表演赛无锡赛区决赛-无锡少年宫.DOC...
- 小白也能学引流技巧:如何利用微信群找到你的精准用户| 二维彩虹二维码生成器
- mysql 8 my.ini skip_mysql8.0版本skip-grant-tables出现的新问题
- globk命令帮助信息
- 计算机的键盘怎么找出来,电脑的键盘隐藏了怎么办
- matlab imcrop 对应python函数_MATLAB车牌识别之车牌精准定位浅谈
- 目前可行的4种知网文献免费下载方法分享
- 知网免费查阅、下载论文方法
- 【Mac 教程系列第 8 篇】Mac 更换锁屏时的头像