热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

支付宝中mysign与sign不一致问题(可能是乱码)

Java代码Stringpartner;partner合作伙伴id(必须填写)
Java代码
  1.   
  2. String partner = ""//partner合作伙伴id(必须填写)   
  3.     String privateKey = ""//partner 的对应交易安全校验码(必须填写)   
  4. //如果您服务器不支持https交互,可以使用http的验证查询地址   
  5.     //String alipayNotifyURL = "https://www.alipay.com/cooperate/gateway.do?service=notify_verify"   
  6.     String alipayNotifyURL = "http://notify.alipay.com/trade/notify_query.do?"  
  7.             + "partner="  
  8.             + partner   
  9.             + "¬ify_id="  
  10.             + request.getParameter("notify_id");   
  11. //    String sign = request.getParameter("sign");   
  12.     //获取支付宝ATN返回结果,true是正确的订单信息,false 是无效的   
  13.     String responseTxt = CheckURL.check(alipayNotifyURL);   
  14.   
  15.     Map params = new HashMap();   
  16.     //获得POST 过来参数设置到新的params中   
  17.     Map requestParams = request.getParameterMap();   
  18.     for (Iterator iter = requestParams.keySet().iterator(); iter   
  19.             .hasNext();) {   
  20.         String name = (String) iter.next();   
  21.         String[] values = (String[]) requestParams.get(name);   
  22.         String valueStr = "";   
  23.         for (int i = 0; i < values.length; i++) {   
  24.             valueStr = (i == values.length - 1) ? valueStr + values[i]   
  25.                     : valueStr + values[i] + ",";   
  26.         }   
  27.         try {   
  28.             params.put(name, new String (valueStr.getBytes("ISO-8859-1"),"UTF-8"));   
  29.         } catch (UnsupportedEncodingException e) {   
  30.             e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.   
  31.         }   
  32.     }   
  33.   
  34.     String mysign = SignatureHelper_return.sign(params, privateKey);   
  35.     String orderNO=params.get("out_trade_no").toString();   
  36.     double post=Double.parseDouble(params.get("logistics_fee").toString());   
  37.     double price=Double.parseDouble(params.get("price").toString());   
  38.     //打印,收到消息比对sign的计算结果和传递来的sign是否匹配   
  39.   
  40.     if (mysign.equals(request.getParameter("sign")) && responseTxt.equals("true")) {   
  41.   
  42. System.out.println("sucess");   
  43.   
  44. }else{   
  45. System.out.println("fail");   
  46. }  
String partner = ""; //partner合作伙伴id(必须填写)
String privateKey = ""; //partner 的对应交易安全校验码(必须填写)
//如果您服务器不支持https交互,可以使用http的验证查询地址
//String alipayNotifyURL = "https://www.alipay.com/cooperate/gateway.do?service=notify_verify"
String alipayNotifyURL = "http://notify.alipay.com/trade/notify_query.do?"
+ "partner="
+ partner
+ "¬ify_id="
+ request.getParameter("notify_id");
// String sign = request.getParameter("sign");
//获取支付宝ATN返回结果,true是正确的订单信息,false 是无效的
String respOnseTxt= CheckURL.check(alipayNotifyURL);

Map params = new HashMap();
//获得POST 过来参数设置到新的params中
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 valueStr = (i == values.length - 1) ? valueStr + values[i]
: valueStr + values[i] + ",";
}
try {
params.put(name, new String (valueStr.getBytes("ISO-8859-1"),"UTF-8"));
} catch (UnsupportedEncodingException e) {
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
}
}

String mysign = SignatureHelper_return.sign(params, privateKey);
String orderNO=params.get("out_trade_no").toString();
double post=Double.parseDouble(params.get("logistics_fee").toString());
double price=Double.parseDouble(params.get("price").toString());
//打印,收到消息比对sign的计算结果和传递来的sign是否匹配

if (mysign.equals(request.getParameter("sign")) && responseTxt.equals("true")) {

System.out.println("sucess");

}else{
System.out.println("fail");
}




最近公司项目再集成支付宝,按照给的例子,终于调通了,可以支付了,不过支付宝网站再回调的时候,验证mysign和sign总是返回false,再网上苦苦的寻找,最好确定有两个原因,一个是参数不对,第二个就是编码不对!!

但是按照支付宝给的例子,也是不行,最好确定可能是编码的问题,再支付宝支付的时候用户必须填写地址邮编信息,再测试中打印出所有参数,发现填写的中文都出现乱码,说明是编码出现了问题,所以在SignatureHelper_return.sign(params, privateKey)前对参数都进行了转码params.put(name, new String (valueStr.getBytes("ISO-8859-1"),"UTF-8"))转换后支付宝回调正常!!!


推荐阅读
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • 解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法
    本文介绍了解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法,包括检查location配置是否正确、pass_proxy是否需要加“/”等。同时,还介绍了修改nginx的error.log日志级别为debug,以便查看详细日志信息。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • springmvc学习笔记(十):控制器业务方法中通过注解实现封装Javabean接收表单提交的数据
    本文介绍了在springmvc学习笔记系列的第十篇中,控制器的业务方法中如何通过注解实现封装Javabean来接收表单提交的数据。同时还讨论了当有多个注册表单且字段完全相同时,如何将其交给同一个控制器处理。 ... [详细]
  • 开发笔记:Java是如何读取和写入浏览器Cookies的
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Java是如何读取和写入浏览器Cookies的相关的知识,希望对你有一定的参考价值。首先我 ... [详细]
  • 本文介绍了django中视图函数的使用方法,包括如何接收Web请求并返回Web响应,以及如何处理GET请求和POST请求。同时还介绍了urls.py和views.py文件的配置方式。 ... [详细]
  • Spring常用注解(绝对经典),全靠这份Java知识点PDF大全
    本文介绍了Spring常用注解和注入bean的注解,包括@Bean、@Autowired、@Inject等,同时提供了一个Java知识点PDF大全的资源链接。其中详细介绍了ColorFactoryBean的使用,以及@Autowired和@Inject的区别和用法。此外,还提到了@Required属性的配置和使用。 ... [详细]
  • 本文讨论了在VMWARE5.1的虚拟服务器Windows Server 2008R2上安装oracle 10g客户端时出现的问题,并提供了解决方法。错误日志显示了异常访问违例,通过分析日志中的问题帧,找到了解决问题的线索。文章详细介绍了解决方法,帮助读者顺利安装oracle 10g客户端。 ... [详细]
  • 我有3个来自RESEARCHS的映射值,指定要使用参考数据集填充的行中的范围。该研究 ... [详细]
  • 转载自:http:www.blogjava.netCarpenterLeearchive20160427430268.html总体介绍之所以把HashSet和HashMa ... [详细]
  • 缓存这个东西就是为了提高运行速度的,由于缓存是在寸土寸金的内存里面,不是在硬盘里面,所以容量是很有限的。LRU这个算法就是把最近一次使用时间离现在时间最远的数据删除掉。先说说List:每 ... [详细]
  • 本篇文章给大家分享的是有关Java中怎么对HashMap按键值排序,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话 ... [详细]
author-avatar
ID张蕾
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有