支付宝wap支付过程中需要注意的坑
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支付过程中需要注意的坑相关推荐
- php 公众号内h5支付宝支付宝支付宝支付宝支付,微信浏览器中支付宝wap支付和微信JSAPI公众号支付...
手机浏览器只有支付宝wap支付,微信浏览器中出现支付宝wap支付和微信JSAPI公众号支付,其中支付宝wap在线支付没有在新窗口打开(兼容大部分手机),Thinkphp3.2公众号支付 下载资源 下载 ...
- 支付宝WAP支付接口开发
支付宝WAP支付接口开发 因项目需要,要增加支付宝手机网站支付功能,找了支付宝的样例代码和接口说明,折腾两天搞定,谨以此文作为这两天摸索的总结.由于公司有自己的支付接口,并不直接使用这个接口,所以晚些 ...
- 支付宝Wap支付你了解多少?
上几篇文章详细介绍了支付宝APP支付.微信APP支付 此文章来介绍下支付宝Wap支付(也叫作手机网站支付) 目录 1.创建应用并获取APPID 2.配置应用环境 3.配置沙箱环境 4.服务端实现(Ma ...
- 面向移动支付过程中网络安全的研究与分析
目 录 1.前言......................................................................................... ...
- WebView支付宝wap支付转支付宝客户端支付
android WebView支付宝wap支付转支付宝客户端支付重写WebViewClient的以下方法即可.可参考 支付宝平台文档商户APP的WebView处理alipays协议 public bo ...
- 探讨:在Mac新系统下安装新版XAMPP过程中遇到到的坑以及解决办法
探讨:在Mac新系统下安装新版XAMPP过程中遇到到的坑以及解决办法 简介 XAMPP安装 XAMPP 是个啥? 安装XAMPP 新版问题:IP地址访问不再是localhost 操作问题:apache ...
- Centos7+mysql57+python3安装过程中踩过的坑
Centos7+mysql57+python3安装过程中踩过的坑 说明: 为了练习Django项目,准备在虚拟机中安装Centos7+mysql57+python3.在windows环境下通过Navi ...
- 支付宝 Wap 支付的两种实现方式
点击▲关注 "爪哇妹" 给公众号标星置顶 更多摄影技巧 第一时间直达 简介 适用于商家在移动端网页应用中集成支付宝支付功能.商家在网页中调用支付宝提供的网页支付接口调起支付宝客户端 ...
- 支付宝WAP支付总结
一:支付宝开放文档: 支付宝手机网站支付的开发文档: https://docs.open.alipay.com/203 二:配置应用环境: 开发者调用接口前需要先生成RSA2密钥,RSA2密钥包含应用 ...
最新文章
- csvtk:命令行下表格统计分析、数据筛选、替换、整理神器
- Rabbit MQ安装配置及常见问题
- 电镀用整流电源设计matlab,基于MATLAB的三相整流电路的仿真研究毕业设计论文
- 大数据WEB阶段Spring框架(四)Spring-MVC
- n型半导体和p型半导体的区别_VNX系列大流量工业型膜堆, 为半导体等行业提供超纯水!...
- grafana安装配置 influxdb安装配置
- vue实现 可拖拽的div
- 计算机辅助制造相关的技术,什么是PCB制造中CAM或计算机辅助制造技术?
- excel合并两列内容_EXCEL数据合并、批量添加内容知识,高手嫌弃,新手太需要...
- 怎样完成一次比较漂亮的晋升面试演讲
- 构建红图注册到蓝图中
- 1080Ti+windows7和1080Ti+windows10的区别
- 給windowsXP穿上Linux Ubuntu的漂亮馬甲 1
- IDM All Products全系列破解UltraEditUltraCompareUEStudioUltraFTPUltraFinder全部最新版产品破解补丁及注册机补丁破解
- esim卡与ms卡的区别_什么是eSIM,它与SIM卡有何不同?
- 【单目标优化求解】基于matlab黑猩猩算法求解单目标问题【含Matlab源码 1413期】
- 创建Oracle数据库和表
- CS全球AI排名第25名,世界第一个人工智能大学迎来第一届毕业生
- IDEA中Java项目删除Web框架后无法再次添加Web框架解决办法
- WPS增加正则处理函数,简直如虎添翼
热门文章
- 自定义控件零基础教学(四)—— canvas画布的所有方法
- 详解编辑距离算法-Levenshtein Distance
- GK2302开卡工具,GK2301LT量产软件,国科微GK2301LT怎么开卡方法,GK2302量产开卡工具教程
- 004-protostuff踩坑-java bean新增字段反序列化失败问题
- 自学测试半年,终于收到了腾讯的offer,那一刻我哭出了声...
- skywalking之elasticsearch cpu高
- SpringBoot中事务执行原理分析(一)
- 【活动总结】0723-COC深圳社区职言职语第1季活动总结之第1视角
- pandas读写文件
- 上网行为监控都能审计到哪些内容?