java 调用支付宝返回qrcode出错,用的是沙箱

如此美丽的你 2019-12-02 11:17:31

public class AlipayServiceImpl implements AlipayService {
@Override
public String aliPay(HttpServletResponse response, HttpServletRequest request) throws IOException {
response.setContentType("text/html;charset=utf-8");

// PrintWriter out = response.getWriter();
//获得初始化的AlipayClient
AlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.gatewayUrl, AlipayConfig.app_id, AlipayConfig.merchant_private_key, "json", AlipayConfig.charset, AlipayConfig.alipay_public_key, AlipayConfig.sign_type);
//设置请求参数
AlipayTradePrecreateRequest aliPayRequest = new AlipayTradePrecreateRequest();
//aliPayRequest.setReturnUrl(AlipayConfig.return_url);
//aliPayRequest.setNotifyUrl(AlipayConfig.notify_url);

//商户订单号,后台可以写一个工具类生成一个订单号,必填
String order_number = new String("1234");
//付款金额,从前台获取,必填
String total_amount = new String("201314");
//订单名称,必填
String subject = new String("祖万敏小可爱");
aliPayRequest.setBizContent("{\"out_trade_no\":\"" + order_number + "\","
+ "\"total_amount\":\"" + total_amount + "\","
+ "\"subject\":\"" + subject + "\","
+ "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}");
//请求
String result = null;
try {
AlipayTradePrecreateResponse aliPayResponse = alipayClient.execute(aliPayRequest);
result=aliPayResponse.getQrCode();
return result;
} catch (AlipayApiException e) {
e.printStackTrace();
}
return null;
}
}







出现上面错误
...全文
821 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
qybao 2019-12-03
  • 打赏
  • 举报
回复
引用 11 楼 如此美丽的你 的回复:
昨天的问题解决了 ,现在的问题是我用手机扫码后,能收到异步通知,收不到同步通知是怎么回事呢


收到异步消息,说明本来就是异步通信啊。
收不到同步消息,你是指手机显示一个qr后,还会继续主动向服务器发送请求,等待服务器的响应吗?
还是说显示qr后,别的客户端扫描你的qr后主动向服务器端发送请求,而本来显示qr的客户端本身就只是在等待异步消息?
你先把你的应用场景描述一下吧
如此美丽的你 2019-12-03
  • 打赏
  • 举报
回复
引用 9 楼 qybao 的回复:
查看了一下api文档
https://openhome.alipay.com/platform/demoManage.htm#/alipay.trade.precreate
我觉得在线测试可能不完善,因为公共信息的部分没法设定,你点发送请求后看右边的请求信息,显然公共信息的部分没有,所以出错,也就是参数不对


昨天的问题解决了 ,现在的问题是我用手机扫码后,能收到异步通知,收不到同步通知是怎么回事呢
qybao 2019-12-02
  • 打赏
  • 举报
回复
你调用的是哪个api,就查看哪个api的文档,看看哪些参数是必须的
沙箱环境和真实环境只是url不同,但是api是相同
从你的错误提示来看,是你的api参数有误,可能某个必须项目没设,是null了,所以你要参考api文档
我记得alipay的api有个partner参数的,和wechat的mch_id有点像,用于区别客户的
如此美丽的你 2019-12-02
  • 打赏
  • 举报
回复

{"alipay_trade_precreate_response":{"code":"40004","msg":"Business Failed","sub_code":"ACQ.INVALID_PARAMETER","sub_msg":"参数无效"},"sign":"BCIDFnjMwBOTEDU21kj+0/gaTmjh8xXXZedxZpA45B5snPggieHR9RLg/lDwYsnVO6f5rW+KTezCD2WGrekXU9mTZYq52qlBwq4aM5K8EnOG/5sN+55eiWuVzDWpSiiSHO9k57oiP9wPnJTVdhfY0bdjhPLcCjWfbAOcJmc6tm32TTcZjsNXv2JcZMSqyW0hjdWCFK3IH2ufUXPww7TkU/znCZYZ7VKqQHEto5e58anUgOVj2iDNfr3RtyGwUN5V31AjPOxm9LcJBwvY98LhutlLcfGg1tT66nGlR+T9X3kZ/m76MnTlM8IctoIW4J79Iro/pEMvdtanw9ciokTMEA=="}

如此美丽的你 2019-12-02
  • 打赏
  • 举报
回复

下面的不用设置吧
如此美丽的你 2019-12-02
  • 打赏
  • 举报
回复
引用 1 楼 人生呐 的回复:
只搞过支付宝官方的api,没搞过沙箱,这报错是说你参数有问题啊,你仔细对照一下,还有40004应该api也有对应的错误代码方案吧,或者你把沙箱api地址发出来,我看一下



public class AlipayConfig {
// 应用ID,您的APPID,收款账号既是您的APPID对应支付宝账号
public static String app_id = "2016101100662637";

// 商户私钥,您的PKCS8格式RSA2私钥
public static String merchant_private_key = "MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQCjZjdBPIRnly1sjemz01jNMJvpWkDtIXjlnYClLA4XB4idI79C/Ke9hV6fmyH3js+5soTdZGvqb0qiwQKY1mh0E/woiL9r4Gyl3WMm837H5IzReLQPnLoCbczJu8HJdRiupE6GQuzRjHTfB5xeWVazIZ3lRfq6H0AhSI6G3JOEYMIGX7OBxbfQGJTT2kRK7soCB/Hm7SdCMZgZtSyND2CnOEepwoQprySA8wnmrF4DpkCvfU7a6LIFi8X0nuT72M8s168mEfykJ6yJx5Tlq12m4aaUSpc6/qbyqXaNj6IwdDKauEsjjV3h/SaNYmw6w3GNPQLHfiYjxOuNF7kAlmslAgMBAAECggEBAIUi6QyvmZaqWGml6/EI2Mc/vxnQ3ywX5OD6h3KNxeE/0zFuig2zvZ0viVz00yVZ6Kl+6sFVbJS1H5QjPdF4id1i10fTvFzSnNQ84eg/6GJJN/AJsHU0F1+ZRY5t/MUAMx9BY3YEG9/V2PhMxD0gAAOu9W91qIh0pBU6gF8kZNIrkCk4XHCI3hDw22wjLMpRyvzDlrl6ikVOXNDLkuNuS++gO+SgcE45fafRKzlAAZIHsAmh1JeWQOnqm6LuMFlwfleFEpzuwNiQtCLkoYEywwkJJxYxFCfrDzSAyW1zppmsM2NczKGSuC0ZbJdLMTdijFfPUsxYedXoi5P5BxiugrUCgYEA6lfDt/QJ4Vn2vQTqrmno3BFjEJPGzkRUnlllNPSMDjAcTd5ZRteroVWzfPNaPih6LjpMkx+SMZhmU1xMLEHUYIEvRwsImy4bhZuLlm44EYjrqsM/NVsTDKmGxA2T327WOrE963MKGQGHK6Dr+77/AU0DNLeBCoWohC0eRzB36TcCgYEAsoAFxo4u03nEON1oCZnxba0Sw2oC9q4J1pJF1X7NJQlqK3eFuy5xR1KffWfvpRufbWZ35BsNg5DP1jfz+XkClm7GjlzLpyk1t+RDhNJudX7wlIMAJK7O/ayZRR8YJ+yyoXPb1nsMHOs69iZt2wKlRfrHtRFPgM9A3/3tanXQjIMCgYEApWjrkkWkT7eDrOnyiMfjAKsZJNNaSa/7loX9JQLUdRNKd0BR/eovkEKA3dqbwTIrA8RM1rA7LdynpYGJltekg7XL3DaSjY5fCNDBF56W3vGpfzAvxoaRjKeAo5P944FFn8oJrc7Wus3UTlxZFao8LvvgHm7Em9u6FgoOzCsPCMMCgYB9nAV0cf2Vp2xjr7pUd1YjndVEWkd3m4Ukz44A7NgjpfpmWBdtXwMr84J0Vz2WbFfGPoNDq53Y5YC7+GfhODyP66gh6j8NhLxeiWzR/NrqJ8fYWk8xgSn77Qd2UqlG/xO89bDPv4sIlqfJK8XGhpgTJKSAUIwn0rCObzww3HNDTQKBgQCeVs4dYo1NaFdLSsux7KE45+5Vbm4XHqchfwhJLKReNP1PCiKe7gh8o+Qwsh+XV9ItnfmsJoz9IE+5eKmd4b7ildpuxsQLOIe9wEB1dOFmanoijYNlGPYLEs9dRjFGUnvuXKwor2IQ9yRRfpNBbNXwWyU3lQuUFdpzjALV6sTSCg==";
// 支付宝公钥,查看地址:https://openhome.alipay.com/platform/keyManage.htm 对应APPID下的支付宝公钥。
public static String alipay_public_key = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAk/57diDaAJXobcflvBP4SVsg89fG4+FVm6sELt866hQXlMoG8KAeyIgr06A1mIOVVw2Cg7Q6kCZJD0CZh3uRVPKZQlw98eaSE2rG7V4qqVbh9oxSKlgv/53+BirHEbVZ+GLnSDYsRxmQ376fuUyQ1GU7AfMvWgtBWjCklUqgDK3ypMMBEJC238/2AMjnTgwXCK3uIll9ZZfkF3gDA0I9GR3mHxmfQRme/vRKrvxwnxR8ST6uukcw8DNJNhQlRlUM8qxGV0X8XrBIvCvsCz0Um5p6C4MaV2aTnxU4n0RbeXsxfhmbsxC/tukpL460zqgaBnBMuhtTZN0qA5XFJKkEkQIDAQAB";
// 服务器异步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问
public static String notify_url = "http://www.baidu.com";

// 页面跳转同步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问
public static String return_url = "http://www.baidu.com";

// 签名方式
public static String sign_type = "RSA2";

// 字符编码格式
public static String charset = "utf-8";

// 支付宝网关
public static String gatewayUrl = "https://openapi.alipaydev.com/gateway.do";

// 支付宝网关
public static String log_path = "C:\\";
}



感觉参数都没问题,我用另一种重定向到支付页面的方式都没问题,这里是前后分离,我想把qrcode传给前端,结果就报错了
  • 打赏
  • 举报
回复
只搞过支付宝官方的api,没搞过沙箱,这报错是说你参数有问题啊,你仔细对照一下,还有40004应该api也有对应的错误代码方案吧,或者你把沙箱api地址发出来,我看一下
清泉流响、 2019-12-02
  • 打赏
  • 举报
回复
product_code换成:FACE_TO_FACE_PAYMENT,结贴给分吧
qybao 2019-12-02
  • 打赏
  • 举报
回复
查看了一下api文档
https://openhome.alipay.com/platform/demoManage.htm#/alipay.trade.precreate
我觉得在线测试可能不完善,因为公共信息的部分没法设定,你点发送请求后看右边的请求信息,显然公共信息的部分没有,所以出错,也就是参数不对
如此美丽的你 2019-12-02
  • 打赏
  • 举报
回复
引用 7 楼 qybao 的回复:
你在官网上测试的是沙箱环境?
我记得沙箱环境需要下载一个沙箱客户端的,而且我记得不管什么环境都应该有个partner参数的
你这是扫码支付还是什么支付?


扫码
qybao 2019-12-02
  • 打赏
  • 举报
回复
你在官网上测试的是沙箱环境?
我记得沙箱环境需要下载一个沙箱客户端的,而且我记得不管什么环境都应该有个partner参数的
你这是扫码支付还是什么支付?
如此美丽的你 2019-12-02
  • 打赏
  • 举报
回复
引用 5 楼 qybao 的回复:
你调用的是哪个api,就查看哪个api的文档,看看哪些参数是必须的
沙箱环境和真实环境只是url不同,但是api是相同
从你的错误提示来看,是你的api参数有误,可能某个必须项目没设,是null了,所以你要参考api文档
我记得alipay的api有个partner参数的,和wechat的mch_id有点像,用于区别客户的




怎么在官方文档上测试还是返回相同的错误?我去

81,094

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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