赞
踩
调试错误,请回到请求来源地,重新发起请求。
错误代码 invalid-signature 错误原因: 验签出错
我这里的错误的确就是表单里面的value应该是出现了不应该出现的换行符,
然后产生这个换行符的步骤是在 hutool那个JSONObject那里
将这个参数设置回0,就是格式化后的json字符串就不会存在换行符,
然后输出的value验签参数就不会换行了,也就不存在特殊符号了
然后继续用手机模拟支付就可以了
- try {
- /**
- * 第一步 获得初始化的AlipayClient
- */
- AlipayClient alipayClient = new DefaultAlipayClient(alipayProperties.getGatewayUrl(), alipayProperties.getAppId(), alipayProperties.getMerchantPrivateKey(), "json", alipayProperties.getCharset(), alipayProperties.getAlipayPublicKey(), alipayProperties.getSignType());
- /**
- * 第二步,开始构建 请求参数对象 AlipayTradePrecreateRequest
- * 详细的 请求参数请参考支付宝页面
- * https://opendocs.alipay.com/open/02ivbs?scene=21
- */
-
- AlipayTradeWapPayRequest request = new AlipayTradeWapPayRequest();
-
- request.setNotifyUrl("");
- request.setReturnUrl("");
-
- JSONObject jsonObject = new JSONObject();
-
- String outTradeNo = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmssSS"))+UUID.randomUUID().toString().replaceAll("-","");
- //订单号 商户订单号。由商家自定义,64个字符以内,仅支持字母、数字、下划线且需保证在商户端不重复。
- jsonObject.set("out_trade_no",outTradeNo );
- //订单总金额,单位为元,精确到小数点后两位,取值范围为 [0.01,100000000]。金额不能为0。
- jsonObject.set("total_amount","0.01");
- //商品名
- jsonObject.set("subject", "叩丁狼H5手机支付测试");
- //销售产品码,商家和支付宝签约的产品码。手机网站支付为:QUICK_WAP_WAY
- jsonObject.set("product_code", "QUICK_WAP_PAY");
- /**
- * 这里格式化返回的json字符串注意 identFactor参数一定是0,不然
- * 到时候格式化到html就会出现 \n等特殊符号,导致验签失败
- */
- request.setBizContent(jsonObject.toJSONString(0));
- log.info("支付宝H5请求参数:[{}]", request);
-
- AlipayTradeWapPayResponse response = alipayClient.pageExecute(request);
- log.info("支付宝H5返回结果:[{}]", response);
- if (response.isSuccess()) {
- log.info("支付宝H5支付调用成功!返回信息:[{}]", response.getBody());
- } else {
- log.info("支付宝H5支付调用失败!错误信息:[{} {}]", response.getMsg(), response.getSubCode());
- }
- return Result.ok(response);
- } catch (AlipayApiException e) {
- log.error("支付宝APP支付异常信息,参数:{}", e.getErrMsg(), e);
- return null;
zhangky
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。