package com.pay.utils;
import java.util.HashMap;
import java.util.UUID;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.alipay.api.AlipayApiException;
import com.alipay.api.CertAlipayRequest;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.request.AlipayFundTransUniTransferRequest;
import com.alipay.api.response.AlipayFundTransUniTransferResponse;
import com.bendian.pay.config.Configs;
public class TransferUtil2 {
/**
* 引入日志,注意都是"org.slf4j"包下
*/
private final static Logger logger = LoggerFactory.getLogger(TransferUtil2.class);
/**
* 带公钥证书验证(方式)
* @param oid 业务单号,唯一
* @param amount 金额
* @param identity 支付宝账号(手机号或者邮箱)
* @param name 姓名
* @param businessType 业务类型
* @return 返回处理结果
* @throws Exception
*/
@SuppressWarnings("rawtypes")
public static HashMaptransferWithCert(String oid, int amount,String identity,String name,String businessType) throws Exception{
//订单号
//String uUid = getUUid();
//返回信息
boolean result = false;
HashMap, String> map = new HashMap<>();
//构造client
CertAlipayRequest certAlipayRequest = new CertAlipayRequest();
certAlipayRequest.setServerUrl(Configs.gatewayUrl);
certAlipayRequest.setAppId(Configs.app_id);
certAlipayRequest.setPrivateKey(Configs.merchant_private_key);
certAlipayRequest.setFormat(Configs.format);
certAlipayRequest.setCharset(Configs.charset);
certAlipayRequest.setSignType(Configs.sign_type);
certAlipayRequest.setCertPath(Configs.path + Configs.app_cert_path);
certAlipayRequest.setAlipayPublicCertPath(Configs.path+ Configs.alipay_cert_path);
certAlipayRequest.setRootCertPath(Configs.path+Configs.alipay_root_cert_path);
try {
DefaultAlipayClient alipayClient = new DefaultAlipayClient(certAlipayRequest);
//发送API请求
AlipayFundTransUniTransferRequest request = new AlipayFundTransUniTransferRequest();
request.setBizContent("{" + "\"out_biz_no\":\""+ oid+ "\"," + "\"trans_amount\":\""+ amount +"\"," + "\"product_code\":\"TRANS_ACCOUNT_NO_PWD\"," + "\"biz_scene\":\"DIRECT_TRANSFER\"," + "\"order_title\":\"" + businessType + "\"," +
"\"payee_info\":{"
+ "\"identity\":\"" + identity +"\","
+ "\"identity_type\":\"ALIPAY_LOGON_ID\","
+ "\"name\":\"" + name + "\""
+ "},"
+ "\"remark\":\"共享收益\"" + "}");
AlipayFundTransUniTransferResponse response =alipayClient.certificateExecute(request);
result = response.isSuccess();
String code = response.getCode();
String msg = response.getSubMsg();
map.put("code", code);
map.put("msg", msg);
if(response.isSuccess()){
logger.info("调用成功!"+ " 业务类型:"+ businessType + ",支付信息:"+ oid +","+ amount+","+identity+","+name);
} else {
logger.error("调用失败!错误信息提示:"+ msg + "; 业务类型:"+ businessType + ",支付信息:"+ oid +","+ amount+","+identity+","+name);
}
return map;
} catch (AlipayApiException e) {
logger.error("未知异常,调用失败!" + " 业务类型:"+ businessType + ",支付信息:"+ oid +","+ amount+","+identity+","+name);
e.printStackTrace();
map.put("code", "5000");
map.put("msg", "调用失败,未知异常!(自定义)");
}
return map;
}
/**
* 获取不重复的订单id
*
* @return
*/
publicString getUUid(){
//生成唯一id
String id= UUID.randomUUID().toString();
//替换uuid中的"-"
id=id.replace("-", "");
System.out.println("订单id :" + id);
return id;
}
}
【支付宝单笔转账到账户(支付宝账号or银行账号)实现】注意事项:
1.证书路径,必须填写绝对路径;必须签约单笔转账支付;
2.订单号必须唯一;
3.测试环境请放在main 方法中进行;
4.设置白名单,固定ip才能调用转账接口;
5.官方接口参考文档:https://docs.open.alipay.com/api_28/alipay.fund.trans.uni.transfer/
API错误提示:https://docs.open.alipay.com/common/105806
推荐阅读
- Integer常量池结合源码解析
- Java基础|Java 打印空心等腰三角形(方法2)
- gradle 每次运行都会下载依赖的解决办法
- 使用vector代替数组
- 如何获取ResultSet的行数和列数
- Java 时间戳格式化
- Java基础|Android开发——JVM、Dalvik以及ART的区别
- XML|XML报文转Map
- Java 8 时间,字符串和Long时间戳互转
- JAVA基础|JAVA基础(TreeMap键是Student值是String案例)