yankYuki
yankYuki
采纳率40%
2018-04-12 04:00

支付宝java服务端 测试报错 大神来救

40

根本不理解支付宝提供的demo 从网上使用别人的源码

String orderStr="";
try {
Map orderMap = new LinkedHashMap(); // 订单实体
Map bizModel = new LinkedHashMap(); // 公共实体
/****** 2.商品参数封装开始 *****/ // 手机端用
// 商户订单号,商户网站订单系统中唯一订单号,必填
orderMap.put("out_trade_no", "100000");
// 订单名称,必填
orderMap.put("subject", "***支付");
// 付款金额,必填
orderMap.put("total_amount", String.valueOf(10000));
// 销售产品码 必填
orderMap.put("product_code", "QUICK_WAP_PAY");
/****** --------------- 3.公共参数封装 开始 ------------------------ *****/ // 支付宝用
// 1.商户appid
bizModel.put("app_id", AlipayConfig.APPID);
// 2.请求网关地址
bizModel.put("method", AlipayConfig.URL);
// 3.请求格式
bizModel.put("format", AlipayConfig.FORMAT);
// 4.回调地址
bizModel.put("return_url", AlipayConfig.notify_url);
// 5.私钥
bizModel.put("private_key", AlipayConfig.private_key);
// 6.商家id
bizModel.put("seller_id", AlipayConfig.partner);
// 7.加密格式
bizModel.put("sign_type", AlipayConfig.sign_type + "");
/****** --------------- 3.公共参数封装 结束 ------------------------ *****/
// 实例化客户端
AlipayClient client = new DefaultAlipayClient(AlipayConfig.URL, AlipayConfig.APPID,
AlipayConfig.private_key, AlipayConfig.FORMAT, AlipayConfig.input_charset,
AlipayConfig.ali_public_key, AlipayConfig.sign_type);
// 实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.app.pay
AlipayTradeAppPayRequest ali_request = new AlipayTradeAppPayRequest();
// SDK已经封装掉了公共参数,这里只需要传入业务参数。以下方法为sdk的model入参方式(model和biz_content同时存在的情况下取biz_content)。
AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();
// model.setPassbackParams(URLEncoder.encode((String)orderMap.get("body").toString()));;
// //描述信息 添加附加数据
// model.setBody(orderMap.get("body")); //商品信息
model.setSubject(orderMap.get("subject")); // 商品名称
model.setOutTradeNo(orderMap.get("out_trade_no")); // 商户订单号(自动生成)
model.setTotalAmount(orderMap.get("total_amount")); // 支付金额
model.setProductCode(orderMap.get("product_code")); // 销售产品码
model.setSellerId(AlipayConfig.partner); // 商家id
ali_request.setBizModel(model);
ali_request.setNotifyUrl(AlipayConfig.notify_url); // 回调地址
AlipayTradeAppPayResponse responses = client.sdkExecute(ali_request);
orderStr = responses.getBody();
System.err.println(orderStr); // 就是orderString 可以直接给客户端请求,无需再做处理
} catch (Exception e) {
e.printStackTrace();
}

     return orderStr;

            AlipayConfig是配置文件 包含密钥之类的 报错为

            com.alipay.api.AlipayApiException: RSAcontent = alipay_sdk=alipay-sdk-java-dynamicVersionNo&app_id=2018030202299464&biz_content={"out_trade_no":"100000","product_code":"QUICK_WAP_PAY","seller_id":"2088031415344595","subject":"***支付","total_amount":"10000"}&charset=utf-8&format=json&method=alipay.trade.app.pay&sign_type=RSA2&timestamp=2018-04-12 11:55:38&version=1.0; charset = utf-8
at com.alipay.api.internal.util.AlipaySignature.rsa256Sign(AlipaySignature.java:141)
at com.alipay.api.internal.util.AlipaySignature.rsaSign(AlipaySignature.java:102)
at com.alipay.api.DefaultAlipayClient.getRequestHolderWithSign(DefaultAlipayClient.java:323)
at com.alipay.api.DefaultAlipayClient.sdkExecute(DefaultAlipayClient.java:163)
at com.yinuoapp.controller.Alipay00200009Controller.alipay(Alipay00200009Controller.java:83)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:222)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:110)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:814)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:737)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:959)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:893)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:969)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:860)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:624)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:845)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at com.yinuo.server.Filters.doFilter(Filters.java:50)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:121)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:218)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:958)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:452)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1087)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:637)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:745)

Caused by: java.security.spec.InvalidKeySpecException: java.security.InvalidKeyException: IOException : DER input, Integer tag error
at sun.security.rsa.RSAKeyFactory.engineGeneratePrivate(RSAKeyFactory.java:217)
at java.security.KeyFactory.generatePrivate(KeyFactory.java:372)
at com.alipay.api.internal.util.AlipaySignature.getPrivateKeyFromPKCS8(AlipaySignature.java:202)
at com.alipay.api.internal.util.AlipaySignature.rsa256Sign(AlipaySignature.java:123)
... 48 more
Caused by: java.security.InvalidKeyException: IOException : DER input, Integer tag error
at sun.security.pkcs.PKCS8Key.decode(PKCS8Key.java:351)
at sun.security.pkcs.PKCS8Key.decode(PKCS8Key.java:356)
at sun.security.rsa.RSAPrivateCrtKeyImpl.(RSAPrivateCrtKeyImpl.java:91)
at sun.security.rsa.RSAPrivateCrtKeyImpl.newKey(RSAPrivateCrtKeyImpl.java:75)
at sun.security.rsa.RSAKeyFactory.generatePrivate(RSAKeyFactory.java:316)
at sun.security.rsa.RSAKeyFactory.engineGeneratePrivate(RSAKeyFactory.java:213)
... 51 more
根本不懂 求大神救我

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

10条回答

  • Zetrov 「已注销」 3年前

    你debug一下,应该是实例化客户端的时候给你报的这个错。日志你的参数里用的是RSA2加密方式,但是你给的密钥是RSA,所以验证通不过。

    建议用官网推荐的方式生成密钥,官方建议用RSA2,可以参照这个教程--支付宝密钥生成
    这里生成的是应用公钥和应用私钥

    然后在支付宝后台,应用程序的接口加签方式里配置生成的应用公钥,这里支付宝会给你一个支付宝公钥。
    在你实例化客户端的时候,两个密钥参数分别是应用私钥和支付宝公钥,不要配错了。

    点赞 2 评论 复制链接分享
  • zhjia520 木已成林 3年前

    so,支付宝后台支付配置好了吗?需要你手动生成对称加密的密钥,支付宝官方也提供生成的工具,然后你需要把公钥给到支付宝,私钥自己留着,如果公钥和私钥不匹配,就会解密出错啦,支付宝接口是我遇到过的最简单的支付接口,多看看官方文档,多理解。

    点赞 评论 复制链接分享
  • sinat_32575213 颠覆白的黑 3年前

    https://download.csdn.net/download/sinat_32575213/10310700
    我这里写了个简单的demo,是没有问题的,你需要配置自己的账号信息即可测试,你可以下载看看
    有问题咱们再交流_

    点赞 评论 复制链接分享
  • cysdmn365 cysdmn365 3年前

    直接登录支付宝企业帐号,里面有DEMO和详细说明。下载下来把企业的支付宝信息替换上就能测试

    点赞 评论 复制链接分享
  • u011606457 _1_1_7_ 3年前

    支付宝支付时出现der input, integer tag error错误,这个错误出现的原因一般情况是应用公钥(pacs8格式)与支付宝网站上上传的公钥不相符。下面具体说明一下支付宝如何来生成应用公钥。(请注意区分本文的私钥和公钥)

    1、首先要下载支付的生成工具,这个工具目前在支付宝官网有2个,有一个使用不能生成2048长度的,请使用如下地址的生成器支付宝私钥生成器,具体如何生成支付宝官方文档中有介绍,工具要选择PKCS8(java使用)和2048长度,然后生成了一个商户私钥和一个商户公钥。商户私钥是我们程序中需要使用的,商户公钥需要上传支付宝应用信息中。

    2、将商户公钥(2048长度)上传支付宝应用信息中,参考地址https://openhome.alipay.com/platform/keyManage.htm# ,然后 点击查看应用公钥,点击修改,将我们生成好的商户公钥上传上去。注意,下面有一个 验证公钥正确性 按钮,点击后,可以将我们生成的私钥(PKCS8格式)拷贝进去进行校验。

    3、将商户私钥放到代码中,支付宝支付时候需要使用。相关支付代码,请参考(第三方支付--支付宝)

    参考原文: https://blog.csdn.net/liuchang__/article/details/72878191

    点赞 评论 复制链接分享
  • d007letian 007Detective 3年前

    RSA密钥的问题,密钥格式生成的时候选择PKCS#8,你可以用这个网站来生成http://web.chacuo.net/netrsakeypair

    点赞 评论 复制链接分享
  • z979451341 键盘舞者113 3年前

    加密解密的密钥有问题。。。

    点赞 评论 复制链接分享
  • qq_31542463 唇色沉沦 3年前

    你的RSA密钥是怎么生成的?这是解密失败造成的呀 ,肯定是的 看看解密

    点赞 评论 复制链接分享
  • Zetrov 「已注销」 3年前

    签名错了,你的RSA密钥是怎么生成的?

    点赞 评论 复制链接分享
  • qq_40613129 qq_40613129 2年前

    大哥,你是F12看的吧,

    点赞 评论 复制链接分享

相关推荐