支付接口开发总结,支付宝接口、通联接口
主要知识点:会使用httpclient、理解回调和通知机制、理解session机制
支付宝开发主要就是三个接口:一个是下订单的接口。
这个接口中,先存储自己的订单业务逻辑。
然后根据自己支付宝注册成为商户时,支付宝提供给你的商户appid、私钥,来实例化一个支付宝的客户端。
AlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.gatewayUrl, AlipayConfig.app_id,AlipayConfig.merchant_private_key, "json", AlipayConfig.charset, AlipayConfig.alipay_public_key,AlipayConfig.sign_type);
然后实例化一个存储参数的类,在这个类中,设置同步通知和异步通知地址,还需要设置支付宝需要的几个参数,可以在支付宝的商户中心查看支付宝需要的参数api。
AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();
然后调用client的pageExcute方法就可以执行了
String result = alipayClient.pageExecute(alipayRequest).getBody();
方法执行成功后,会跳到支付宝的二维码支付页面,当用户支付成功后,支付宝会调用同步通知地址,这时浏览器的url会重定向到你在上一步,拼参数时设置的同步通知地址。
这也就是第二个接口:在这个接口中,需要验证发消息的是否是支付宝。
也就是验签,验证签名成功后可以执行自己的业务逻辑。
也即把上一个接口中存储的订单信息都改为已支付啥的。
boolean signVerified = AlipaySignature.rsaCheckV1(params, AlipayConfig.alipay_public_key, AlipayConfig.charset,AlipayConfig.sign_type); // 调用SDK验证签名
参数都是从request中获取的,支付宝提供的实例中有demo,demo中的api都是可以用的。
这个先获取ISO-8859-1格式再转为UTF-8的api尤其好用,我在弄通联接口的时候,因为tomcat默认ISO-8859-1编码,所以我一开始就是遇到了编码转换错误,造成生成签名总是出错。
String out_trade_no = new String(request.getParameter("out_trade_no").getBytes("ISO-8859-1"), "UTF-8");
第三个接口是支付宝的异步通知接口,在这个接口中,可以做一些验证工作,也就是防止同步通知出问题,导致本地订单信息没有修改。
接口的最后一定要返回success,不然支付宝会一直八次。
通联支付开发就是真的坑了,第一个坑就是编码问题,通联提供的demo中没有提到编码格式,导致我压根没注意格式问题。再加上通联有近三十个参数,所以验签失败我一直以为是我参数拼接错误。
第二个坑就是我先开发的支付宝,所以我错误的把通联接口开发也按照支付宝的流程走,就是生成一个httpclient,然后拼接请求的request,最后返回页面给用户浏览器。
我这个逻辑是没问题的,但是我忽略了通联的sesison验证。站在通联的视角,就是我用服务器拦截了用户的请求,并且自己拼接请求,再把请求发送给通联,并且把通联的相应返回给用户。这在通联看来是不安全的,通联不希望我拦截用户的请求。
通联的demo是用表单的post方式提交的,所以我认为,必须能让用户浏览器使用post方法提交,服务端不能拦截数据,要让浏览器直接与通联交互。
所以,可以模仿在支付宝的做法,查看支付宝源码,得知,支付宝在服务端得到参数后,手动拼接了一个form表单。返回给浏览器,让浏览器执行。
public static String buildForm(String baseUrl, Map<String, String> parameters) {java.lang.StringBuffer sb = new StringBuffer();sb.append("<form name=\"punchout_form\" method=\"post\" action=\"");sb.append(baseUrl);sb.append("\">\n");sb.append(buildHiddenFields(parameters));sb.append("<input type=\"submit\" value=\"绔嬪嵆鏀粯\" style=\"display:none\" >\n");sb.append("</form>\n");sb.append("<script>document.forms[0].submit();</script>");java.lang.String form = sb.toString();return form;}
支付接口开发总结,支付宝接口、通联接口相关推荐
- 容联云通讯php短信接口,开发中使用 【容联 云通信】获取短信验证码的 Javascript 接口...
开发中使用 [容联 云通信]获取短信验证码的 Javascript 接口 在平台应用列表添加应用. 在测试号码中绑定测试手机号码,只有这个号码能接收验证短信. 在项目中绑定配置:将控制台首页的开发者主 ...
- java微信web支付开发_微信支付java开发详细第三方支付功能开发之支付宝web端支...
这段时间把支付基本搞完了,因为做的过程中遇到许多问题,特地记录下来,同时方便其他java coder,废话少说,下面开始. 整体思路:在后台,根据参数创建支付宝客户端AlipayClient,发送参数 ...
- 餐饮支付受理为什么一定要找通联收银宝?
餐饮行业作为现在国民经济的大产业之一,其背后的支付难题一直备受关注,而在众多的第三方支付机构中,为什么越来越多的人选择通联支付的餐饮解决方案,选择通联收银宝.其背后主要是因为通联收银宝相比其他的方式, ...
- 支付宝接口 java_JAVA调用支付宝的直充接口
[java]代码库JAVA调用支付宝的直充接口原理和银联接口一样,当商家和支付宝签好协议后就可以问支付宝的人要相关的代码了. 我本地用的是支付宝UTF-8编码的代码,先把util里的东西达成一个ali ...
- php微信支付测试开发(流程已通)
必要条件: appid //公众号后台开发者中心获得(和邮件内的一样) mchid//邮件内获得 key//商户后台自己设置 appsecret //公众号开发者中心获得 两个证书文件,邮件内 ...
- php 动态彩码辨色 接口的调用_好用的云函数!后端低代码接口开发,零基础编写API接口...
前言 在开发项目过程中,经常需要用到API接口,实现对数据库的CURD等操作. 不管你是专业的PHP开发工程师,还是客户端开发工程师,或者是不懂编程但懂得数据库SQL查询,又或者是完全不太懂技术的人, ...
- api 接口开发理论 在php中调用接口以及编写接口
如: http://localhost/openUser.php?act=get_user_list&type=json 在这里openUser.php相当于一个接口,其中get_user_l ...
- java系统接口开发_模拟用户管理系统java接口开发与测试实战
一.接口开发 1.引入依赖 1 2 org.springframework.boot 3 spring-boot-starter-parent 4 1.5.3.RELEASE 5 6 7 org.sp ...
- 【掌握接口开发技巧 打造可靠的API接口】按关键字搜索商品
作为一名程序员,在开发过程中经常需要开发API接口来实现数据的传输和交互等功能.本文将介绍程序员如何开发API接口,并提供一些实用的技巧. 第一步: 设计接口文档 在开发API之前,我们需要先设计接口 ...
最新文章
- 用ext_skel,实现一个PHP扩展,添加到PHP并调用
- 全面优化—配置高性能lnmp架构
- 【嵌入式开发】用 VLC 显示 树莓派摄像头 H264 裸流
- php+yii手册下载,yii中文手册-yii框架中文手册教程下载pdf格式免费版-东坡下载
- C语言在VS2017环境下写俄罗斯方块的感悟
- python 安装PIL包的方法以及简单介绍
- python word转txt_Python办公自动化| word 表格转excel
- PowerPoint Storyboarding:Visual Studio 2012 RC带给开发者的秘密杀器
- ux设计_为企业UX设计更好的数据表
- 16.04编译android 7.0,ubuntu16.04 编译Android5.1报错
- 浏览器崩溃_字节跳动程序员28岁身价上亿,财务自由宣布退休;微软最新系统再迎“喜报”:更多用户的浏览器开始崩溃...
- 操作系统之进程管理:19、死锁的处理策略:避免死锁(银行家算法)
- 故宫也在拼多多卖货!故宫文具将入驻拼多多开设旗舰店!
- 编程通用知识 系统编程
- 超全!基于Java的机器学习项目、环境、库...
- openSUSE 11.2 上试动Mono
- wpf之pdf的显示
- linux 系统的磁盘 mbr 转gpt方法
- HTML 表单发送邮件
- Encoder-Decoder
热门文章
- 全球地表温度月值数据集(1980-2022) NOAAGlobalTemp
- 【平台介绍】一站式OCR服务平台Textin的相关内容介绍
- 让卡巴斯基7.0支持Windows2003
- 大数据信息资料采集:影视网站资源数据信息采集爬取
- js slice和splice
- SysUtils.QuotedStr - 加单引号
- Delphi中QuotedStr()
- 用Phaser来制作一个html5游戏——flappy bird (一)
- idea页面只能显示一个项目,idea使用教程——一个窗口中同时打开多个项目
- Idea-如何像eclipse一样一个窗口打开多个项目