持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第19天,点击查看活动详情
每日英语:
Definitions belong to the definers,not the defined.
翻译:定义属于下定义者,而不是被定义的人。 ——托妮·莫里森
初步学习Native支付SDK
微信官方提供了支付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,然后重新打包到本地或者私服,解决该问题。
我们可以通过以下表来说明访问权限:
| 修饰符 | 当前类 | 同一包内 | 子孙类(同一包) | 子孙类(不同包) | 其他包 |
|---|---|---|---|---|---|
public | Y | Y | Y | Y | Y |
protected | Y | Y | Y | Y/N | N |
default | Y | Y | Y | N | N |
private | Y | N | N | N | N |
修改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工程中来,如下图:
注意:如果是php开发,采用pem证书,如果是java开发采用p12证书。
做退款的时候要用到证书,我们需要使用WXCertUtil.exe导出证书。导出证书的说明网址:kf.qq.com/faq/161222N…。
总结
本篇简单介绍了一下使用Native支付SDK时,需要注意的细节,个人使用时,需要一些微小的调整。