1,首先本人使用的是新版即时到帐的接口文档开发。本人没有使用支付宝的sdk包,所有代码都有自己参考Sdk包自己编写。并且wap手机支付异步通知和同步通知(新版称前台回调),都集成在之前开发的电脑扫码支付的同步和异步通知。

2,加密算法使用了RSA2,并使用RSA2进行签名和验证签名,本人使用自定义签名和自定义验签。

3,开发过程中要走了不少弯路,特把自己遇到的坑梳理一下,供自己以后复习和大家参考:

(1)首先使用支付宝提供的生产公钥和私钥的工具,并商家用户创建应用,上传了应用公钥到支付宝,如下图所示:

这里注意的是:(1)选择RSA(SHA256)密钥。(2)这里有个概念没弄明白,应用公钥和支付宝公钥的区别,但是一定要明白签名我们带着自己的应用私钥去签名,当验证签名时,我们使用的是支付宝公钥而非应用公钥,我就在这里吃大亏了。

(2)在签名时参数问题

查看文档,当时没明白,分为公共参数,业务参数之分,起初以为只传递业务参数即可,后来仔细看文档,公共参数也需要传递,并且要把业务参数封装到公共参数 biz_content字段中,并且要转成json字符串格式。

(3)还是签名时,我们要对传递的参数进行encode编码,哥们啊,看清楚啊,是值不是参数,都是血和泪啊,之前就是把这个参数都进行了encode编码。验证签名时要对参数值进行decode解码,才能验证成功。对于sign签名要对参数名按照ASCII码排序,之后进行base64.encodeBase64加密和验证签名时Base64.decodeBase64,支付宝SDK的签名方法中已经做了处理,不做解释。这里只贴出了签名时对参数名排序和对参数值的encode加码和验证签名时对参数名排序和对参数值的decode解码代码。

/*** * 对签名后的请求参数值* (1)对key排序* (2)对value进行encode编码* (3)验证签名时对value进行decode解码* @param params* @param charset* @return* @throws IOException*/public static String buildQuery(Putter p, String charset) throws IOException {Map params = p.getMap();if (params == null || params.isEmpty()) {return null;}StringBuilder query = new StringBuilder();List keys = new ArrayList(params.keySet());Collections.sort(keys);boolean hasParam = false;if(p.get("sign")!=null && !p.get("sign").equals("")){  //签名时使用for (int i = 0; i < keys.size(); i++) {String name = (String) keys.get(i);String value = (String) params.get(name);// 忽略参数名或参数值为空的参数if (areNotEmpty(name, value)) {if (hasParam) {query.append("&");} else {hasParam = true;}query.append(name).append("=").append(URLEncoder.encode(value, charset));}}}else{  //验证签名时使用for (int i = 0; i < keys.size(); i++) {String name = (String) keys.get(i);String value = (String) params.get(name);// 忽略参数名或参数值为空的参数if (areNotEmpty(name, value)) {if (hasParam) {query.append("&");} else {hasParam = true;}query.append(name).append("=").append(URLDecoder.decode(value, charset));}}}return query.toString();}

(4)支付成功后,只要签名和验签没问题,没有什么好说的,可说的就是前台回调(即同步通知),之前总是不能跳转,看文档说是返回的json格式,说是和异步通知验签不同,其实是相同的,表面上的几点不同如下:

(1) 参数名变更了,旧版的交易金额使用total_fee,新版现在使用total_amount

(2)  名称改名,前台回调

(3)  看文档返回的是json格式数据,但是在处理时,还是可以使用如下代码:

      Map<String,String> params = new HashMap<String,String>();Map requestParams = request.getParameterMap();for (Iterator 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);}

获取数据。然后做回调页面处理即可。

支付宝wap支付过程中需要注意的坑相关推荐

  1. php 公众号内h5支付宝支付宝支付宝支付宝支付,微信浏览器中支付宝wap支付和微信JSAPI公众号支付...

    手机浏览器只有支付宝wap支付,微信浏览器中出现支付宝wap支付和微信JSAPI公众号支付,其中支付宝wap在线支付没有在新窗口打开(兼容大部分手机),Thinkphp3.2公众号支付 下载资源 下载 ...

  2. 支付宝WAP支付接口开发

    支付宝WAP支付接口开发 因项目需要,要增加支付宝手机网站支付功能,找了支付宝的样例代码和接口说明,折腾两天搞定,谨以此文作为这两天摸索的总结.由于公司有自己的支付接口,并不直接使用这个接口,所以晚些 ...

  3. 支付宝Wap支付你了解多少?

    上几篇文章详细介绍了支付宝APP支付.微信APP支付 此文章来介绍下支付宝Wap支付(也叫作手机网站支付) 目录 1.创建应用并获取APPID 2.配置应用环境 3.配置沙箱环境 4.服务端实现(Ma ...

  4. 面向移动支付过程中网络安全的研究与分析

    目    录 1.前言......................................................................................... ...

  5. WebView支付宝wap支付转支付宝客户端支付

    android WebView支付宝wap支付转支付宝客户端支付重写WebViewClient的以下方法即可.可参考 支付宝平台文档商户APP的WebView处理alipays协议 public bo ...

  6. 探讨:在Mac新系统下安装新版XAMPP过程中遇到到的坑以及解决办法

    探讨:在Mac新系统下安装新版XAMPP过程中遇到到的坑以及解决办法 简介 XAMPP安装 XAMPP 是个啥? 安装XAMPP 新版问题:IP地址访问不再是localhost 操作问题:apache ...

  7. Centos7+mysql57+python3安装过程中踩过的坑

    Centos7+mysql57+python3安装过程中踩过的坑 说明: 为了练习Django项目,准备在虚拟机中安装Centos7+mysql57+python3.在windows环境下通过Navi ...

  8. 支付宝 Wap 支付的两种实现方式

    点击▲关注 "爪哇妹" 给公众号标星置顶 更多摄影技巧 第一时间直达 简介 适用于商家在移动端网页应用中集成支付宝支付功能.商家在网页中调用支付宝提供的网页支付接口调起支付宝客户端 ...

  9. 支付宝WAP支付总结

    一:支付宝开放文档: 支付宝手机网站支付的开发文档: https://docs.open.alipay.com/203 二:配置应用环境: 开发者调用接口前需要先生成RSA2密钥,RSA2密钥包含应用 ...

最新文章

  1. csvtk:命令行下表格统计分析、数据筛选、替换、整理神器
  2. Rabbit MQ安装配置及常见问题
  3. 电镀用整流电源设计matlab,基于MATLAB的三相整流电路的仿真研究毕业设计论文
  4. 大数据WEB阶段Spring框架(四)Spring-MVC
  5. n型半导体和p型半导体的区别_VNX系列大流量工业型膜堆, 为半导体等行业提供超纯水!...
  6. grafana安装配置 influxdb安装配置
  7. vue实现 可拖拽的div
  8. 计算机辅助制造相关的技术,什么是PCB制造中CAM或计算机辅助制造技术?
  9. excel合并两列内容_EXCEL数据合并、批量添加内容知识,高手嫌弃,新手太需要...
  10. 怎样完成一次比较漂亮的晋升面试演讲
  11. 构建红图注册到蓝图中
  12. 1080Ti+windows7和1080Ti+windows10的区别
  13. 給windowsXP穿上Linux Ubuntu的漂亮馬甲 1
  14. IDM All Products全系列破解UltraEditUltraCompareUEStudioUltraFTPUltraFinder全部最新版产品破解补丁及注册机补丁破解
  15. esim卡与ms卡的区别_什么是eSIM,它与SIM卡有何不同?
  16. 【单目标优化求解】基于matlab黑猩猩算法求解单目标问题【含Matlab源码 1413期】
  17. 创建Oracle数据库和表
  18. CS全球AI排名第25名,世界第一个人工智能大学迎来第一届毕业生
  19. IDEA中Java项目删除Web框架后无法再次添加Web框架解决办法
  20. WPS增加正则处理函数,简直如虎添翼

热门文章

  1. 自定义控件零基础教学(四)—— canvas画布的所有方法
  2. 详解编辑距离算法-Levenshtein Distance
  3. GK2302开卡工具,GK2301LT量产软件,国科微GK2301LT怎么开卡方法,GK2302量产开卡工具教程
  4. 004-protostuff踩坑-java bean新增字段反序列化失败问题
  5. 自学测试半年,终于收到了腾讯的offer,那一刻我哭出了声...
  6. skywalking之elasticsearch cpu高
  7. SpringBoot中事务执行原理分析(一)
  8. 【活动总结】0723-COC深圳社区职言职语第1季活动总结之第1视角
  9. pandas读写文件
  10. 上网行为监控都能审计到哪些内容?