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

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.             + "&notify_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
            + "&notify_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 < values.length; 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"))转换后支付宝回调正常!!!

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值