初始学习Native支付SDK

88 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第19天,点击查看活动详情

每日英语:

Definitions belong to the definers,not the defined.

翻译:定义属于下定义者,而不是被定义的人。 ——托妮·莫里森

初步学习Native支付SDK

native支付sdk下载图.jpg

微信官方提供了支付SDK,如上图,我们可以点击下载SDK,再安装到本地并引入依赖。创建自己的实现类WeixinPayConfig继承WXPayconfig抽象类时会提示must either be declared abstract or implement abstract method ‘getAppID()’ in 'WXPayConfig问题。

官方的wxpay-sdk源码中WXPayconfig抽象类的抽象方法没有指定public修饰符,则使用的是默认的修饰符default,default修饰符在其他包内是没有访问权限的,所以我们无法继承WXPayconfig抽象类实现抽象方法。解决方案是通过修改官方wxpay-sdk源码,将抽象方法的修饰符从默认修改为public,然后重新打包到本地或者私服,解决该问题。

我们可以通过以下表来说明访问权限:

修饰符当前类同一包内子孙类(同一包)子孙类(不同包)其他包
publicYYYYY
protectedYYYY/NN
defaultYYYNN
privateYNNNN

修改WXPayConfig,代码如下:

public abstract class WXPayConfig {



    /**
     * 获取 App ID
     *
     * @return App ID
     */
    public abstract String getAppID();


    /**
     * 获取 Mch ID
     *
     * @return Mch ID
     */
    public abstract String getMchID();


    /**
     * 获取 API 密钥
     *
     * @return API密钥
     */
    public abstract String getKey();


    /**
     * 获取商户证书内容
     *
     * @return 商户证书内容
     */
    public abstract InputStream getCertStream();

    /**
     * HTTP(S) 连接超时时间,单位毫秒
     *
     * @return
     */
    public int getHttpConnectTimeoutMs() {
        return 6*1000;
    }

    /**
     * HTTP(S) 读数据超时时间,单位毫秒
     *
     * @return
     */
    public int getHttpReadTimeoutMs() {
        return 8*1000;
    }

    /**
     * 获取WXPayDomain, 用于多域名容灾自动切换
     * @return
     */
    public abstract IWXPayDomain getWXPayDomain();

    /**
     * 是否自动上报。
     * 若要关闭自动上报,子类中实现该函数返回 false 即可。
     *
     * @return
     */
    public boolean shouldAutoReport() {
        return true;
    }

    /**
     * 进行健康上报的线程的数量
     *
     * @return
     */
    public int getReportWorkerNum() {
        return 6;
    }


    /**
     * 健康上报缓存消息的最大数量。会有线程去独立上报
     * 粗略计算:加入一条消息200B,10000消息占用空间 2000 KB,约为2MB,可以接受
     *
     * @return
     */
    public int getReportQueueMaxSize() {
        return 10000;
    }

    /**
     * 批量上报,一次最多上报多个数据
     *
     * @return
     */
    public int getReportBatchSize() {
        return 10;
    }

}

打包并安装mvn clean install,在mall-pay-service中引入坐标:

<dependency>
    <groupId>com.github.wxpay</groupId>
    <artifactId>wxpay-sdk</artifactId>
    <version>3.0.9</version>
</dependency>

关于微信支付的使用,微信官方提供的包中已经附带了使用说明,在参考资料中有微信支付 Java SDK使用说明.md文档,可以按照该文档学习SDK的使用。

微信支付SDK提供了对应的方法:

方法名说明
microPay刷卡支付
unifiedOrder统一下单
orderQuery查询订单
reverse撤销订单
closeOrder关闭订单
refund申请退款
refundQuery查询退款
downloadBill下载对账单
report交易保障
shortUrl转换短链接
authCodeToOpenid授权码查询openid

我们将提前准备好(出于安全考虑,请自行申请证书)的微信支付\证书和秘钥中的证书以及秘钥配置导入到mall-pay-service工程中来,如下图:

1606521363290.png

注意:如果是php开发,采用pem证书,如果是java开发采用p12证书。

做退款的时候要用到证书,我们需要使用WXCertUtil.exe导出证书。导出证书的说明网址:kf.qq.com/faq/161222N…

总结

本篇简单介绍了一下使用Native支付SDK时,需要注意的细节,个人使用时,需要一些微小的调整。