付呗商户开放平台,旨在提供一站式移动支付解决方案。 开放平台SDK的目的在于为商户提供更为方便快捷的方式接入付呗开放平台。
注意:目前SDK仅支持付呗开放平台1.0,但验签逻辑和2.0完全一致的。仅需要加入2.0的请求返回实体,调整下接口地址即可。 后续会增加2.0接口的支持
点击付呗商户开放平台文档访问
SDK Beta版本之后,可以根据项目结构和打包方式,选择合适的引入方式。 alpha阶段Maven和Gradle方式需要自行使用命令编译源码,并通过本地Maven仓库的形式导入。 后续Beta和Release阶段,会上传至付呗私有NexusOSS中。
1、配置settings.xml文件 在maven目录conf/settings.xml中,加入付呗SDK私有仓库地址
<mirrors>
<mirror>
<id>51fubei</id>
<mirrorOf>*</mirrorOf>
<url>https://nexus-server.51fubei.com/nexus/content/groups/open-public/</url>
</mirror>
<!-- 以下为国内Repo镜像源,可按需进行配置 -->
<mirror>
<id>huaweicloud</id>
<mirrorOf>*</mirrorOf>
<url>https://mirrors.huaweicloud.com/repository/maven/</url>
</mirror>
<mirror>
<id>aliyun</id>
<mirrorOf>*</mirrorOf>
<url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
</mirror>
</mirrors>
<repository>
<id>51fubei</id>
<url>https://nexus-server.51fubei.com/nexus/content/groups/public/</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</repository>
2、 在项目pom.xml中引入
<dependency>
<groupId>com.fshows.fubei</groupId>
<artifactId>openapi-java-sdk</artifactId>
<version>1.0.2-SNAPSHOT</version>
</dependency>
1、在项目build.gradle中增加maven仓库配置
repositories {
maven { url "https://nexus-server.51fubei.com/nexus/content/groups/open-public" }
// 可选配置,增加国内源用于下载依赖
maven { url "https://mirrors.huaweicloud.com/repository/maven/" }
}
2、在项目dependencies中引入依赖
dependencies {
implementation 'com.fshows.fubei:openapi-java-sdk:1.0.2-SNAPSHOT'
}
1、下载项目
git clone https://gitee.com/fubei-open/java-sdk.git
2、切换指定版本的分支
cd java-sdk
git checkout v${版本号}
3、编译项目并导出到本地Maven仓库中(推荐)
./gradlew clean publishToMavenLocal
或者使用Gradle缩写方式导出
./gradlew clean pTML
生成完毕后,可按照Maven引入或者Gradle引入的方式导入到项目中
4、jar包形式导入(不推荐)
推荐使用Maven或者Gradle的方式进行引入
./gradlew clean assemble
编译完成后,openapi/build/libs中会生成指定的jar包和源码包,将其复制到对应项目的libs包中,并需保证以下jar包存在
- google-guava | 26.0-jre
- alibaba-fastjson | 1.2.31
- annimon-stream | 1.2.1
- squareup okhttp | 3.14.2
- squareup retrofit | 2.6.0
如果需要跑UnitTest,必须引入以下类库
- commons-codec | 1.10
在调用SDK之前,使用AppConfig设置appID,AppSecret。
AppConfig::setAppId和AppConfig::setAppSecret
调用Api接口之前,需要全局设置开放平台的AppID、AppSecret,Spring项目可在@Configuration或者@PostConstruct中设置,Android项目可在Application.onCreate中设置。
AppConfig appConfig = AppConfig.getInstance();
appConfig.setAppId("20180916120218114790");
appConfig.setAppSecret("e4927152b7c18b0ddcc2648bdeabb452");
使用AppConfig::setEnv方法设置环境
AppConfig appConfig = AppConfig.getInstance();
appConfig.setEnv(OpenApiConstants.ENV_RELEASE);
接口的定义按照功能进行分配,接口定义在biz.merchant.api中, legacy下定义的是传统方式调用的接口,接口返回统一为Call,可通过Call对象使用同步或者异步的方式进行调用。
同步方式调用: 具体可见Retrofit文档
call.execute()
异步方式调用: 可在enqueue指定Excutor线程池
call.enqueue()
以”订单查询“接口为例,文档地址如下:
接口定义的格式如下:
/**
* 1、接口类型以interface方式进行定义
*/
public interface MyApi {
@POST(OpenApiConstants.GATEWAY)
@FubeiOpenApi(method = "openapi.payment.order.query", verison="1.0", format="json", signMethod="md5")
Call<PaymentQueryOrderModel> orderQuery(@Body ParamPaymentOrderQuery param);
}
说明:
标注:@POST | 该标注为Retrofit标注,参数为文档中标注的”gateway“
标注:@FubeiOpenApi | 付呗开放平台标注
接口名称
,必填接口版本
,默认"1.0",选填接口格式
,默认"json",选填签名算法
,默认"md5",选填接口方法:
Call<返回实体对象> 自定义函数名(@Body 参数实体 对象);
接口动态代理类的定义与实现在SDK foundation.apiproxy包中,由于使用了Retrofit作为网络框架,AbsApiProxy主要负责的工作是Retrofit对象的生成,可以理解是一个Api抽象动态代理工厂。该类提供了一个initRetrofit的抽象方法,通过这个方法,子类可以进行一些网络方便参数(如连接超时、接收超时、上传超时)的设置。
商户的OpenApi的动态代理:MerchantApiProxy
该类的作为付呗开放平台的接口的动态工厂,主要工作为:okHttp配置、baseUrl配置等,调用方法为:
// 生成API动态代理
MyApi api = MerchantApiProxy.getInstance().create(MyApi.class);
ParamPaymentOrderQuery param = new ParamPaymentOrderQuery();
// param参数设置
// param.merchant_order_sn = "xxxxxx"
PaymentQueryOrderModel resultModel = api.orderQuery(param).execute().body();
自定义OkHttp配置可参考MerchantApiProxy的代码并重写initRetrofit方法或重写getOkHttpClient()方法。 参考代码如下:
@Override
protected void initRetrofit(Retrofit.Builder builder) {
// 设置BaseUrl和转换工厂
builder.baseUrl(getBaseUrl()).addConverterFactory(new LifecircleConverterFactory());
// 设置http client
builder.client(getOkHttpClient());
}
/**
* 初始化okHttp
* @return okHttpClient
*/
@SuppressWarnings("WeakerAccess")
protected OkHttpClient getOkHttpClient() {
OkHttpClient.Builder builder = new OkHttpClient.Builder();
builder.connectTimeout(15, TimeUnit.SECONDS);
builder.readTimeout(30, TimeUnit.SECONDS);
builder.writeTimeout(30, TimeUnit.SECONDS);
// 设置日志打印的拦截器
HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor(new HttpLoggingInterceptor.Logger() {
@Override
public void log(String resultMessage) {
System.out.println("\t\t" + resultMessage);
}
});
loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
builder.addInterceptor(loggingInterceptor);
return builder.build();
}
业务异常统一定义为SdkBizException,按照Retrofit的逻辑继承自IOException,当业务代码返回不为200(即成功状态)时,会抛出此异常,此时业务逻辑中需要截取此异常,获得对应的错误信息。部分400异常会包含三方错误代码subCode和特殊返回,此时需要通过获得Map的方式进行获取
调用示例位于项目openapi/src/test/java/com/fshows/fubei/OpenApiUnitTest.java中,其中列举了几个接口的调用方式,可使用JUnit方式直接执行查看结果
如发现任何错误,可联系相关技术人员进行反馈。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。