java调用支付宝退款接口,返回签名无效

山城忙碌人 2016-12-01 10:07:54
我通过支付宝提供的demo,调用退款接口,返回签名无效。代码如下:

//AlipayConfig.private_key, 这个私钥已经用了几个月了,用在支付功能上面,支付功能签名都是正常的
//zfbGy 支付宝公钥我已经换过几个了,开发平台公钥,合作伙伴公钥,开发者公钥,我全试了,都返回同一个错误
AlipayClient alipayClient = new DefaultAlipayClient(
"https://openapi.alipay.com/gateway.do", "2016081001726566",
AlipayConfig.private_key, "json", "UTF-8", zfbGy);
AlipayTradeRefundRequest request = new AlipayTradeRefundRequest();
request.setBizContent("{" +
" \"out_trade_no\":\"1480398912492\"," +
" \"trade_no\":\"2016113021001004690245950007\"," +
" \"refund_amount\":\"0.01\"," +
" \"refund_reason\":\"ttt1\"," +
" \"out_request_no\":\"HZ01RF001\"," +
" \"operator_id\":\"OP001\"," +
" \"store_id\":\"NJ_S_001\"," +
" \"terminal_id\":\"NJ_T_001\"" +
" }");
AlipayTradeRefundResponse response = alipayClient.execute(request);
log.info("code:" + response.getCode() + ",subCode:"
+ response.getSubCode() + ",msg:" + response.getMsg()
+ ",subMsg:" + response.getSubMsg());

返回值如下:
[sdk.biz.err] - 2016-12-01 09:55:26^_^{"alipay_trade_refund_response":{"code":"40002","msg":"Invalid Arguments","sub_code":"isv.invalid-signature","sub_msg":"鏍骁?},"sign":"aUududgICSy+Wr5NppUHX3FedZeQJCZ+L+xYy7q/TwwXLT5PEkF1PGlbG8hohV0kLZO9iFkWt7mhJeozz5GAp9cqVCnvEdiOT1ausq1EdBXIWF4kPb8C2ssoq6OpgBoHgd+cPbpaekbwbyHxWIHvfZopDUCG+G8aTUxJjLrTVsY="}
isv.invalid-signature (从支付宝文档得知是签名无效)

我就不明白了,支付宝提供的demo,我直接拿过来用, 为什么有这个问题, ?
...全文
699 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
山城忙碌人 2016-12-23
  • 打赏
  • 举报
回复
引用 2 楼 changjun154 的回复:
怎么有乱码?
乱码是linux的输出。
引用 3 楼 cb1156 的回复:
是同一个。可以先将中文提示换成英文或数字试试,可能是编码问题
不是编码问题,是私钥只能针对一台电脑,我开发的私钥, 甲方在他们电脑上传过,所以我这边才出现这个问题。我的解决办法是重新上传了一次密钥。
cb1156 2016-12-14
  • 打赏
  • 举报
回复
是同一个。可以先将中文提示换成英文或数字试试,可能是编码问题
苗哥哥 2016-12-14
  • 打赏
  • 举报
回复
怎么有乱码?
山城忙碌人 2016-12-01
  • 打赏
  • 举报
回复
并且我自己按照支付宝的文档,调用了一次,返回一样的结果:
Map<String, String> list = new HashMap<String, String>();
		list.put("app_id", "2016081001726566");
		list.put("method", "alipay.trade.refund");
		list.put("format", "json");
		list.put("charset", "utf-8");
		list.put("sign_type", "RSA");
		
		list.put("timestamp", Util.getTime(0));//这里得到的时间是:2016-12-01 00:00:00 这种格式
		list.put("version", "1.0"); 
		String biz_content = "{\"out_trade_no\":1480398912492,\"refund_amount\":0.01}"; 
		list.put("biz_content", biz_content); 
		Map<String, String> sPara = AlipayCore.paraFilter(list); 
		String mSign = AlipaySubmit.buildRequestMysign(sPara); 
		log.error("mSign  "+mSign+","+sPara);
		try {
			mSign = URLEncoder.encode(mSign, "UTF-8");
		} catch (UnsupportedEncodingException e1) { 
			e1.printStackTrace();
		} 
		String url = "https://openapi.alipay.com/gateway.do";
                //将签名添加到参数中去
		list.put("sign", mSign);
		NetworkBean networkBean = new NetworkBean();
		networkBean.setUrl(url); 
		Map<String , Object> param = new TreeMap<String, Object>(list);
		networkBean.setParams(param);
                //封装调用接口
		HttpClientManager.getInstance().sendRequest(url,param, networkBean);;
		log.error("zfbResund result:"+networkBean.getResult());
返回结果: 2016-12-01 09:45:53,775 ERROR [com.yufu.web.api.user.UserZf] - zfbResund result:{"alipay_trade_refund_response":{"code":"40002","msg":"Invalid Arguments","sub_code":"isv.invalid-signature","sub_msg":"鏍骁?},"sign":"aUududgICSy+Wr5NppUHX3FedZeQJCZ+L+xYy7q/TwwXLT5PEkF1PGlbG8hohV0kLZO9iFkWt7mhJeozz5GAp9cqVCnvEdiOT1ausq1EdBXIWF4kPb8C2ssoq6OpgBoHgd+cPbpaekbwbyHxWIHvfZopDUCG+G8aTUxJjLrTVsY="} 请问这是什么原因,支付宝退款和支付的私钥难道不是同一个?

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧