首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
工单节点使用指南
• 请用平和的语言准确描述你所遇到的问题
• 厂商的技术支持和你一样也是有喜怒哀乐的普通人类,尊重是相互的
华为云
V2EX  ›  全球工单系统

编写官方微信支付 Java SDK 的同学领下工单!

  •  
  •   Ziav · 108 天前 · 2123 次点击
    这是一个创建于 108 天前的主题,其中的信息可能已经有所发展或是发生改变。

    由于昨天微信被爆官方的 Java SDK 存在支付漏洞,于是今天官方就放出了最新的 SDK。刚好正在接支付这块,立马就 down 了最新的 SDK,maven install,然后项目引入。然后项目就报错了。。。看到里面各种奇葩的写法,让我对鹅厂的 Java 水平表示严重的怀疑。

    首先,更新后多了一个 IWXPayDomain 接口,BUT,里面定义的 abstract 是什么鬼??这特么到是接口还是抽象类???真是我孤陋寡闻了,第一次见到这么神奇的写法。

    package com.github.wxpay.sdk;
    
    /**
     * 域名管理,实现主备域名自动切换
     */
    public abstract interface IWXPayDomain {
        /**
         * 上报域名网络状况
         * @param domain 域名。 比如:api.mch.weixin.qq.com
         * @param elapsedTimeMillis 耗时
         * @param ex 网络请求中出现的异常。
         *           null 表示没有异常
         *           ConnectTimeoutException,表示建立网络连接异常
         *           UnknownHostException, 表示 dns 解析异常
         */
        abstract void report(final String domain, long elapsedTimeMillis, final Exception ex);
    
        /**
         * 获取域名
         * @param config 配置
         * @return 域名
         */
        abstract DomainInfo getDomain(final WXPayConfig config);
    
        static class DomainInfo{
            public String domain;       //域名
            public boolean primaryDomain;     //该域名是否为主域名。例如:api.mch.weixin.qq.com 为主域名
            public DomainInfo(String domain, boolean primaryDomain) {
                this.domain = domain;
                this.primaryDomain = primaryDomain;
            }
    
            @Override
            public String toString() {
                return "DomainInfo{" +
                        "domain='" + domain + '\'' +
                        ", primaryDomain=" + primaryDomain +
                        '}';
            }
        }
    
    }
    

    然后,接下来神奇的地方来了,原来的 WXPayConfig 接口改成了抽象类,然鹅。。。里面抽象方法的访问控制权限是 default ??额。。你让别人怎么在不同的 package 下 Override 这个抽象类???

    public abstract class WXPayConfig {
    
    
    
        /**
         * 获取 App ID
         *
         * @return App ID
         */
        abstract String getAppID();
    
    
        /**
         * 获取 Mch ID
         *
         * @return Mch ID
         */
        abstract String getMchID();
    
    
        /**
         * 获取 API 密钥
         *
         * @return API 密钥
         */
        abstract String getKey();
    
    
        /**
         * 获取商户证书内容
         *
         * @return 商户证书内容
         */
        abstract InputStream getCertStream();
    }
    

    欢迎鉴赏,SDK 下载地址: https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=11_1

    6 回复  |  直到 2018-07-06 09:51:08 +08:00
        1
    ingin   108 天前 via Android   ♥ 1
    心平气和点,你写的东西让他们看,你会被喷死的!
        2
    Ziav   108 天前 via Android
    @ingin 就事论事而已,写的不好被喷很正常
        3
    zpxshl   108 天前 via Android
    abstract interface ...这怎么过 cr 的......
        4
    rubycedar   108 天前 via iPhone
    @zpxshl 反正在编译的时候会简化,怕什么? [手动滑稽
        5
    Mogugugugu   108 天前 via Android
    企鹅家的 JAVA 并不是长项,很有可能是 C++ 或者某些语言的人过来临时凑个数写的。。。
        6
    doudouwu   108 天前
    abstract interface 编译后就是 interface ?
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   3378 人在线   最高记录 3762   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.1 · 15ms · UTC 08:35 · PVG 16:35 · LAX 01:35 · JFK 04:35
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1