前言
支付宝提现
一、所需SDK
<dependency>
<groupId>com.alipay.sdk</groupId>
<artifactId>alipay-easysdk</artifactId>
<version>2.2.0</version>
</dependency>
<dependency>
<groupId>com.alipay.sdk</groupId>
<artifactId>alipay-sdk-java</artifactId>
<version>3.0.0</version>
</dependency>
二、启动类加载config
1.
代码如下(示例):
import com.alipay.easysdk.factory.Factory;
import com.alipay.easysdk.kernel.Config;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
/**
* @description
*/
@Component
@Slf4j
public class AlipayInitializer implements ApplicationRunner {
@Autowired
AlipayConfig config;
@Override
public void run(ApplicationArguments args) {
Factory.setOptions(config.parseToConfig());
log.info("alipay配置加载成功");
}
}
@Data
@ConfigurationProperties(prefix = "alipay")
@Component
class AlipayConfig{
private String protocol;
private String gatewayHost;
private String signType;
private String appId;
private String merchantPrivateKey;
private String alipayPublicKey;
private String merchantCertPath;
private String alipayCertPath;
private String alipayRootCertPath;
public Config parseToConfig(){
Config config = new Config();
config.protocol=protocol;
config.gatewayHost=gatewayHost;
config.signType=signType;
config.appId=appId;
config.merchantPrivateKey=merchantPrivateKey;
config.alipayPublicKey=alipayPublicKey;
//设置应用公钥证书路径
config.merchantCertPath=merchantCertPath;
//设置支付宝公钥证书路径
config.alipayCertPath=alipayCertPath;
//设置支付宝根证书路径
config.alipayRootCertPath=alipayRootCertPath;
return config;
}
}
2.执行util
代码如下(示例):
import cn.hutool.core.lang.generator.SnowflakeGenerator;
import cn.hutool.core.util.StrUtil;
import com.alipay.easysdk.factory.Factory;
import com.alipay.easysdk.util.generic.models.AlipayOpenApiGenericResponse;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.Map;
import java.util.SortedMap;
import java.util.TreeMap;
/**
*/
public class PayUtil {
public static boolean alipayWithdraw(String account,String name,BigDecimal money) throws Exception {
// String[] split = id.split(",");
Map<String,Object> bizMap = new HashMap<>();
bizMap.put("out_biz_no",new SnowflakeGenerator().next().toString());
bizMap.put("trans_amount",money.toString());
bizMap.put("product_code","TRANS_ACCOUNT_NO_PWD");
bizMap.put("biz_scene","DIRECT_TRANSFER");
Map<String,String> payee_info = new HashMap<>();
payee_info.put("identity",account);
payee_info.put("identity_type","ALIPAY_LOGON_ID");
try {
payee_info.put("name",name);
} catch (Exception e) {
throw new Exception("支付宝信息不符合要求,提交申请失败");
}
bizMap.put("payee_info",payee_info);
AlipayOpenApiGenericResponse response = Factory.Util.Generic().execute("alipay.fund.trans.uni.transfer", new HashMap<>(), bizMap);
if (StrUtil.isNotBlank(response.subCode)){
throw new Exception("支付宝账户异常:"+response.getSubMsg());
}
return true;
}
}
3.yml配置 证书
alipay:
protocol: https
gateway-host: openapi.alipay.com
sign-type: RSA2
app-id: xxx
merchant-private-key: xxx
alipay-public-key: xxx
merchant-cert-path: xxx
alipay-cert-path: xxx
alipayRoot-cert-path: xxx
总结
支付宝支付 首先调用生成二维码 扫码支付成功后回调