主要知识点:会使用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;}

支付接口开发总结,支付宝接口、通联接口相关推荐

  1. 容联云通讯php短信接口,开发中使用 【容联 云通信】获取短信验证码的 Javascript 接口...

    开发中使用 [容联 云通信]获取短信验证码的 Javascript 接口 在平台应用列表添加应用. 在测试号码中绑定测试手机号码,只有这个号码能接收验证短信. 在项目中绑定配置:将控制台首页的开发者主 ...

  2. java微信web支付开发_微信支付java开发详细第三方支付功能开发之支付宝web端支...

    这段时间把支付基本搞完了,因为做的过程中遇到许多问题,特地记录下来,同时方便其他java coder,废话少说,下面开始. 整体思路:在后台,根据参数创建支付宝客户端AlipayClient,发送参数 ...

  3. 餐饮支付受理为什么一定要找通联收银宝?

    餐饮行业作为现在国民经济的大产业之一,其背后的支付难题一直备受关注,而在众多的第三方支付机构中,为什么越来越多的人选择通联支付的餐饮解决方案,选择通联收银宝.其背后主要是因为通联收银宝相比其他的方式, ...

  4. 支付宝接口 java_JAVA调用支付宝的直充接口

    [java]代码库JAVA调用支付宝的直充接口原理和银联接口一样,当商家和支付宝签好协议后就可以问支付宝的人要相关的代码了. 我本地用的是支付宝UTF-8编码的代码,先把util里的东西达成一个ali ...

  5. php微信支付测试开发(流程已通)

    必要条件: appid //公众号后台开发者中心获得(和邮件内的一样)   mchid//邮件内获得  key//商户后台自己设置  appsecret //公众号开发者中心获得 两个证书文件,邮件内 ...

  6. php 动态彩码辨色 接口的调用_好用的云函数!后端低代码接口开发,零基础编写API接口...

    前言 在开发项目过程中,经常需要用到API接口,实现对数据库的CURD等操作. 不管你是专业的PHP开发工程师,还是客户端开发工程师,或者是不懂编程但懂得数据库SQL查询,又或者是完全不太懂技术的人, ...

  7. api 接口开发理论 在php中调用接口以及编写接口

    如: http://localhost/openUser.php?act=get_user_list&type=json 在这里openUser.php相当于一个接口,其中get_user_l ...

  8. java系统接口开发_模拟用户管理系统java接口开发与测试实战

    一.接口开发 1.引入依赖 1 2 org.springframework.boot 3 spring-boot-starter-parent 4 1.5.3.RELEASE 5 6 7 org.sp ...

  9. 【掌握接口开发技巧 打造可靠的API接口】按关键字搜索商品

    作为一名程序员,在开发过程中经常需要开发API接口来实现数据的传输和交互等功能.本文将介绍程序员如何开发API接口,并提供一些实用的技巧. 第一步: 设计接口文档 在开发API之前,我们需要先设计接口 ...

最新文章

  1. 用ext_skel,实现一个PHP扩展,添加到PHP并调用
  2. 全面优化—配置高性能lnmp架构
  3. 【嵌入式开发】用 VLC 显示 树莓派摄像头 H264 裸流
  4. php+yii手册下载,yii中文手册-yii框架中文手册教程下载pdf格式免费版-东坡下载
  5. C语言在VS2017环境下写俄罗斯方块的感悟
  6. python 安装PIL包的方法以及简单介绍
  7. python word转txt_Python办公自动化| word 表格转excel
  8. PowerPoint Storyboarding:Visual Studio 2012 RC带给开发者的秘密杀器
  9. ux设计_为企业UX设计更好的数据表
  10. 16.04编译android 7.0,ubuntu16.04 编译Android5.1报错
  11. 浏览器崩溃_字节跳动程序员28岁身价上亿,财务自由宣布退休;微软最新系统再迎“喜报”:更多用户的浏览器开始崩溃...
  12. 操作系统之进程管理:19、死锁的处理策略:避免死锁(银行家算法)
  13. 故宫也在拼多多卖货!故宫文具将入驻拼多多开设旗舰店!
  14. 编程通用知识 系统编程
  15. 超全!基于Java的机器学习项目、环境、库...
  16. openSUSE 11.2 上试动Mono
  17. wpf之pdf的显示
  18. linux 系统的磁盘 mbr 转gpt方法
  19. HTML 表单发送邮件
  20. Encoder-Decoder

热门文章

  1. 全球地表温度月值数据集(1980-2022) NOAAGlobalTemp
  2. 【平台介绍】一站式OCR服务平台Textin的相关内容介绍
  3. 让卡巴斯基7.0支持Windows2003
  4. 大数据信息资料采集:影视网站资源数据信息采集爬取
  5. js slice和splice
  6. SysUtils.QuotedStr - 加单引号
  7. Delphi中QuotedStr()
  8. 用Phaser来制作一个html5游戏——flappy bird (一)
  9. idea页面只能显示一个项目,idea使用教程——一个窗口中同时打开多个项目
  10. Idea-如何像eclipse一样一个窗口打开多个项目