2 u014154100 u014154100 于 2016.03.23 11:58 提问

关于支付宝接口alipay.trade.precreate的签名,我总是验证错误
 private void pay() throws Exception{
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date date=new Date();
        HttpURLConnection u=(HttpURLConnection) new URL(SettingEntiry.getOpenApiDomain()).openConnection();
        u.setRequestMethod("POST");
        u.setDoInput(true);
        u.setDoOutput(true);

        String sign=URLEncoder.encode(SignUtils.sign(Entity.inputEntity(SettingEntiry.getAPPID(),"ALIPAY.TRADE.PRECREATE","UTF-8","RSA",sdf.format(date),"1.0",BizContentEntiry.intputBizContentEntity("1000000","0.01","这是外卖")).toString2(),SettingEntiry.getPrivateKey()),"utf-8");

        PrintWriter pw=new PrintWriter(u.getOutputStream());
        pw.print(Entity.inputEntity(SettingEntiry.getAPPID(),"ALIPAY.TRADE.PRECREATE","UTF-8","RSA",sign.toUpperCase(),sdf.format(date),"1.0",BizContentEntiry.intputBizContentEntity("1000000","0.01","这是外卖")).toString());
        pw.flush();
        pw.close();

        System.out.println(URLEncoder.encode(SignUtils.sign("timestamp=2016-03-22%2018:05:30&method=alipay.trade.precreate&app_id=2015051100069126&sign_type=RSA&version=1.0&biz_content=%20{%20\"out_trade_no\":\"20150320010101001\",%20\"seller_id\":\"2088102146225135\",%20\"total_amount\":88.88,%20\"discountable_amount\":8.88,%20\"undiscountable_amount\":80,%20\"buyer_logon_id\":\"15901825620\",%20\"subject\":\"Iphone6%2016G\",%20\"body\":\"Iphone6%2016G\",%20\"goods_detail\":[{%20\"goods_id\":\"apple-01\",%20\"alipay_goods_id\":\"20010001\",%20\"goods_name\":\"ipad\",%20\"quantity\":1,%20\"price\":2000,%20\"goods_category\":\"34543238\",%20\"body\":\"特价手机\"%20}],%20\"operator_id\":\"yx_001\",%20\"store_id\":\"NJ_001\",%20\"terminal_id\":\"NJ_T_001\",%20\"extend_params\":{%20\"sys_service_provider_id\":\"2088511833207846\"%20},%20\"timeout_express\":\"90m\",%20\"royalty_info\":{%20\"royalty_type\":\"ROYALTY\",%20\"royalty_detail_infos\":[{%20\"serial_no\":1,%20\"trans_in_type\":\"userId\",%20\"batch_no\":\"123\",%20\"out_relation_id\":\"20131124001\",%20\"trans_out_type\":\"userId\",%20\"trans_out\":\"2088101126765726\",%20\"trans_in\":\"2088101126708402\",%20\"amount\":0.1,%20\"desc\":\"分账测试1\"%20}]%20}%20}",SettingEntiry.getPrivateKey()),"Utf-8"));
        System.out.println(Entity.inputEntity(SettingEntiry.getAPPID(),"ALIPAY.TRADE.PRECREATE","UTF-8","RSA",sign.toUpperCase(),sdf.format(date),"1.0",BizContentEntiry.intputBizContentEntity("1000000","0.01","这是外卖")).toString());
        System.out.println(sign);

        BufferedInputStream bis=new BufferedInputStream(u.getInputStream());
        byte[] b=new byte[32*1024];
        int r=0;
        while((r=bis.read(b))!=-1){
            System.out.println(new String(b,0,r));
        }
        bis.close();
    }

返回的是
{"ALIPAY_TRADE_PRECREATE_response":{"code":"40002","msg":"Invalid Arguments","sub_code":"isv.invalid-signature","sub_msg":"无效签名"},"sign":"pKAZjddvi+mJDIJnopTjVuwG3yoNc8JKW6HvjZ9v5GQ551NAhuIIJjL1cvAm6Llxxbjm9bYRNWRR0LJsXLaxYKzpymJNOZ0WcZtqcHmTaBzdII/G5boGLQaSl347pywft04Vb/0oeKBuEekqzPXQIma+iBXbK9GP0i5qghxTGHg="}

是签名算法的问题吗,我用的是支付宝demo WS_MOBILE_PAY_SDK_BASE里面看到 的签名算法

支付宝demo

我的程序:https://yunpan.cn/cYNsy3DbDib2Q (提取码:ae5b)

3个回答

gggidt
gggidt   2016.05.05 15:59

我的也是这个问题, 你的解决了吗?

gggidt
gggidt   2016.05.06 10:14

楼主,? 这个问题, 你是怎么解决的?

lovezwlhjj
lovezwlhjj 回复senjyuren: 楼主,请教下支付宝生成二维码字符串是哪个接口?入参是什么?我看了支付宝API文档有点蒙
大约 2 年之前 回复
u014154100
u014154100 解决了,把post字段从a-z排序下就行了
大约 2 年之前 回复
oudoud
oudoud   2016.06.22 15:12

支付宝有sdk已经封装好了,为何要自已实现?密钥不对

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
支付宝即时到账接口调用签名验证失败
能成功支付,但是回调验证时一直返回false 其实在alipayapi接口里定义“页面跳转同步通知页面路径”的时候,已经说明“需http://格式的完整路径,不能加?id=123这类自定义参数” 而我使用了伪静态,最终请求类似于:index.php?shopid=2&order_id=26 所以要把 非支付宝需要 的$_GET参数过滤掉 提交订单的时候,会调用alipay_su
支付宝反校验签名isSign一直返回false的解决办法之一
气死我了!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 我又一次跪在支付宝的脚下了!! 问题的原因是:我把上传到支付宝的公钥用来反校验签名了,应该是支付宝本身的公钥来验证而不是你上传的公钥!!!!! 通用的支付宝公钥:登录b.alipay.com,查看支付宝公钥!
支付宝新版支付接口Java后台签名
一、APP支付 支付宝更新了支付接口,同时也给出了服务端SDK供下载使用。该SDK提供了一系列的工具类和部分请求的实现。提供了一个AlipaySignature类来提供统一的签名工具类来帮助用户快速实现签名。在SDK下载的文档最后一个部分,提示用户在签名的时候使用 String AlipaySignature.rsaSign(Map params, String privateKey, Str
支付宝接口手机网站支付验证返回字符串以及签名验证不通过的原因总结
已经不是第一次做支付接口开发了,每次做支付接口开发其实都会遇到一些麻烦。最主要的地方还是在验签(验证签名)部分。 验签的作用是判别支付结果的回调(同步返回,get方式)或者通知(异步post方式)是否真的是由支付宝的服务器发出的。 在这里有2个目的:1是记录一下这个通知的返回内容,2是列举一下目前支付宝接口开发过程中遇到的,可能影响验签通过的原因。 1.同步回调(get方
PHP支付宝接口RSA验证
这两天一直困扰的PHP RSA签名验证问题终于解决了,由于之前RSA接触的不多,再加上官方至今还未有PHP的SDK可供参考,因此走了一些弯路,写在这里和大家分享。     虽然支付宝官方还未提供相关SDK,PHP确实可以实现RSA方式的签名,这点其实很重要,由于不熟悉,在遇到困难的时候,经常会不由自主地想到是否PHP不支持RSA签名,干脆用MD5得了,这样就没有了前进的动力。其实说穿了MD5
支付宝支付回调失败(isSign=false)的解决
最近在项目中做支付宝的APP支付,折腾一大圈,APP上能够正常支付了,然而APP没有收到任何返回信息,在项目后台中查看该用户的订单状态仍然为未支付,于是想到是支付宝方面没有给我服务器返回交易结果信息,去蚂蚁金服-开放平台一看,果然没有设置“授权回调地址”,赶紧设置项目中处理回调的URL。 然而这样做完仍然没有,于是去找到alipay_core.function.php中找到logResult(),
微信公众号支付签名验证错误
微信公从号支付,其坑之多,搜索一下可见一斑。 签名验证错误,除了告诉你签名验证错误之外,没有任何更多提示。 可能的原因:安全域名、目录未正确设置,参与签名的值与调用的值不一致(如timestamp签名时动态取,回显时也动态取)等。 但当你每纠正一步,仍然看到的是签名验证错误时,你会开始怀疑自己,思考生活的意义。 直到最后,终于可以确认或承认,在这些可以说得出的原因里,真的没有错,逐个参数名
支付宝签名验证失败
支付宝签名验证 文档写的不够详细. 把我给坑惨了. APP付款成功回调 同步签名验证 与 开发平台统一的签名验证不一样. 然后验签文档字段,与实际返回的字段不一样.  再加上   文档里面没有特别标注 待验签字符串必须按照什么格式来. 所以一直卡在这里. 今天终于解决了.   说明文档里面这两个都不一致, 顺序也不一致. 也没
支付宝SDK出现的问题---缺少签名参数 无效签名
支付宝SDK出现的问题---缺少签名参数    无效签名 真相永远只有一个------------------填错了密钥(解决2个问题的方案就是这样) 实在不行,换另外的支付宝账号密钥来测试就行了 坑就坑在密钥改了之后你没有更新最新的密钥
支付宝接口集成及错误排除
我集成了支付宝接口,能够支付成功,但是notify_url.php中始终好像没有回调,因此按照官方文档,我做了如下修改 $verify_result = $alipayNotify->verifyNotify(); if($verify_result) { //商户订单号 $order_id = $_POST['out_trade_no']; //支付宝交易号 $trade_no =