支付宝支付新版 SDK 上线,让支付触手可及


前言

撸主最早接触支付是在11年左右,那会支付宝还可以申请个人支付接口,接入Discuz是爽的不行。后来又接触了企业支付,中间陆陆续续踩坑无数,为了不让以后的开发者小伙伴们踩坑,撸主在17年左右把踩坑项目开源了,一直也在断断续续的更新,期间也帮助了不少做支付的小伙伴。

新的开始

回头来看,代码是写的真烂,但是凑合能用,也实在是没有重写的动力。机缘巧合,结识了一位做支付的朋友,让我拾起了重写的动力。最近把支付宝和微信支付的部分逻辑进行了重写,引入了新的配置方式和新的SDK。没错,最近支付宝支付又升级了!

配置

坐标 pom.xml 引入新版支付宝 SDK:

 <dependency>
     <groupId>com.alipay.sdk</groupId>
     <artifactId>alipay-easysdk</artifactId>
     <version>2.1.0</version>
 </dependency>

配置文件 application-dev.properties 引入支付宝参数:

cp.ali.pay.protocol = http
cp.ali.pay.gatewayHost = openapi.alipaydev.com
cp.ali.pay.signType = RSA2
cp.ali.pay.appId = 2016101300680499
cp.ali.pay.merchantPrivateKey =  ******
cp.ali.pay.aliPayPublicKey =  ******
cp.ali.pay.notifyUrl = ""
cp.ali.pay.encryptKey = ""

定义实体类,获取配置参数:

@Data
@ConfigurationProperties(prefix = "cp.ali.pay")
public class CpAliPayProperties {

    private String protocol;
    private String gatewayHost;
    private String signType;
    private String appId;
    private String merchantPrivateKey;
    private String aliPayPublicKey;
    private String notifyUrl;
    private String encryptKey;
}

定义支付宝参数工具类,并初始化 Factory:

/**
 * 初始化支付
 * 爪哇笔记 https://blog.52itstyle.vip
 * @author 小柒2012
 */
@Component
@Configuration
@EnableConfigurationProperties({CpAliPayProperties.class})
public class CpPayUtils {

    private CpAliPayProperties aliPay;

    public CpPayUtils(CpAliPayProperties aliPay) {
        this.aliPay = aliPay;
        Config config = new Config();
        config.protocol = aliPay.getProtocol();
        config.gatewayHost = aliPay.getGatewayHost();
        config.signType = aliPay.getSignType();
        config.appId = aliPay.getAppId();
        /**
         * 为避免私钥随源码泄露,推荐从文件中读取私钥字符串而不是写入源码中
         */
        config.merchantPrivateKey = aliPay.getMerchantPrivateKey();
        config.alipayPublicKey = aliPay.getAliPayPublicKey();
        config.notifyUrl = aliPay.getNotifyUrl();
        config.encryptKey = aliPay.getEncryptKey();
        Factory.setOptions(config);
    }

    public CpAliPayProperties getConfig(){
        return aliPay;
    }
}

发起API调,以创建当面付收款二维码为例:

 AlipayTradePrecreateResponse response = Payment.FaceToFace()
             .preCreate("Apple iPhone13 128G", "202012108856987", "6999.00");
 // 处理响应或异常
 if (ResponseChecker.success(response)) {
         System.out.println("调用成功");
 } else {
         System.err.println("调用失败,原因:" + response.msg + "," + response.subMsg);
 }

设置独立的异步通知地址:

Factory.Payment.FaceToFace()
    // 此处设置的异步通知地址的优先级高于全局Config中配置的异步通知地址
    .asyncNotify("https://blog.52itstyle.vip/callback")
    .preCreate("Apple iPhone13 256G", "202012108856987", "6999.00");

小结

新版 SDK 对开放能力的 API 进行了更加贴近高频场景的精心设计与裁剪,简化了服务端调用方式,支持灵活的动态扩展方式,同样可以满足低频参数、低频 API 的使用需求。让开发者享受极简编程体验,快速访问支付宝开放平台开放的各项核心能力。

源码

支付服务:支付宝,微信,银联详细代码案例

https://gitee.com/52itstyle/spring-boot-pay

爪哇笔记

作者: 小柒

出处: https://blog.52itstyle.vip

分享是快乐的,也见证了个人成长历程,文章大多都是工作经验总结以及平时学习积累,基于自身认知不足之处在所难免,也请大家指正,共同进步。

本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出, 如有问题, 可邮件(345849402@qq.com)咨询。