阿里支付接口 转账 java 代码
阿里支付接口的验证机制和普通接口不同,采用的是证书验证,使用支付宝开放平台助手 ---> 生成**获取csr文件
公司注意些支付对应的支付宝程序所在的公司的名称。
得到生成好的3个文件
放入对应的文件夹
private String APP_ID = ""; //application private key private String APP_PRIVATE_KEY = "";
//charset private String CHARSET = "utf-8"; //sign type private String SIGN_TYPE = "RSA2";
/** * 支付相关接口采用csr方式验证 * * @return */ private AlipayClient getClientInstanceByKey() throws AlipayApiException { AlipayClient aplipayClient = aliMap.get("client"); if (aplipayClient == null) { CertAlipayRequest certAlipayRequest = new CertAlipayRequest(); //设置网关地址 certAlipayRequest.setServerUrl("https://openapi.alipay.com/gateway.do"); //设置应用Id certAlipayRequest.setAppId(APP_ID); //设置应用私钥 certAlipayRequest.setPrivateKey(APP_PRIVATE_KEY); //设置请求格式,固定值json certAlipayRequest.setFormat("json"); //设置字符集 certAlipayRequest.setCharset(CHARSET); //设置签名类型 certAlipayRequest.setSignType(SIGN_TYPE); //设置应用公钥证书路径 certAlipayRequest.setCertPath("/home/crt/appCertPublicKey_xxx.crt"); //设置支付宝公钥证书路径 certAlipayRequest.setAlipayPublicCertPath("/home/crt/alipayCertPublicKey_RSA2.crt"); //设置支付宝根证书路径 certAlipayRequest.setRootCertPath("/home/crt/alipayRootCert.crt"); aplipayClient = new DefaultAlipayClient(certAlipayRequest); aliMap.put("client", aplipayClient); } return aplipayClient; }
/** * 支付宝向用户转账 * * @param bizNo 逻辑单号 * @param amount 转账金额 单位元 * @param account 支付宝账号 * @return */ public RestResult<Integer> alipay2User(String bizNo, String amount, String account) { // 设置请求参数 AlipayFundTransUniTransferRequest alipayRequest = new AlipayFundTransUniTransferRequest(); Map<String, String> map = new HashMap<>(); map.put("out_biz_no", bizNo); map.put("trans_amount", amount); map.put("product_code", "TRANS_ACCOUNT_NO_PWD"); map.put("biz_scene", "DIRECT_TRANSFER"); map.put("order_title", ""); map.put("remark", ""+amount); // 转账账户 Map<String, String> map2 = new HashMap<>(); map2.put("identity", account); map2.put("identity_type", "ALIPAY_USER_ID"); map2.put("name", ""); map.put("payee_info", JSONObject.toJSONString(map2)); // 转成json格式放入 String json = JSONObject.toJSONString(map); alipayRequest.setBizContent(json); AlipayFundTransUniTransferResponse response; try { response = getClientInstanceByKey().certificateExecute(alipayRequest); System.out.println(JSON.toJSONString(response)); if (response.isSuccess()) { return RestResult.wrapSuccessResponse(); } else { log.info("支付失败,bizNo:"+bizNo+",原因:"+response.getBody()); return RestResult.wrapErrorResponse("支付失败"); } } catch (Exception e) { e.printStackTrace(); log.info("支付失败,bizNo:"+bizNo+",异常原因:"+e); return RestResult.wrapErrorResponse("支付失败"); } }
关键就是getClientInstanceByKey().certificateExecute(alipayRequest); ,支付相关接口采用证书验证方式才能通过,支付宝转账的demo有点坑