Android接入说明
Android商户APP端前期准备
1.获取到统一SDK aar包.并放入android项目libs文件夹内(拷贝或者覆盖包时,请clean工程和重新build)
2.项目gradle配置SDK aar包,配置如下:
APP Gradle增加如下配置:
//向上兼容android系统
compileSdkVersion 26
defaultConfig {
}
repositories {
flatDir {
dirs 'libs'
}
}
//支付SDK
dependencies {
compile 'com.android.support:appcompat-v7:26.0.0'
compile(name: 'open-sdk-release-1.0.2', ext: 'aar') //支付AAR名称
}
3.AndroidMainfest.xml注册如下Activity:
支付结果回调:在AndroidMainfest.xml中com.xxx.PayResultActivity为接收支付回调的Activity,添加如下配置:
<!-- 支付结果页面回调配置-->
<activity android:name="com.xxx.PayResultActivity">
<intent-filter>
<action android:name="wifi.intent.action.SDK_RESULT" />
<category android:name="android.intent.category.DEFAULT" />
<!-- 不同的商户调起传不同配置,格式:allinone://open/payResult-->
<data
android:host="open"
android:path="/payResult"
android:scheme="allinone" />
</intent-filter>
</activity>
快速集成
第一步:在SDK调用之前初始化SDK,建议将此代码放在Application中进行初始化。
接入统一SDK的商户需要初始化参数:WalletParms
字段名 | 变量 | 必填 | 类型 | 示例值 | 描述 |
---|---|---|---|---|---|
uhid | 用户唯一标识 | 是 | String | ||
dhid | 否 | String | |||
sessionId | 会话ID | 是 | String | ||
telNo | 手机号码 | 是 | String | 用户手机号码 | |
userToken | 用户token | 是 | String | ||
longi | 经度 | 否 | String | 用户经度 | |
lati | 维度 | 否 | String | 用户维度 | |
mapSP | 地图 | 否 | String | b 百度 t 腾讯 a 高德 g google l 老虎 | |
wifiPubChannel | 发布渠道 | 否 | String | ||
wifiVersion | 版本号 | 否 | String | ||
appId | appid | 是 | String | ||
lxDex | 开发环境 | 是 | String | ||
unionid | unionId | 否 | String | 商户透传过来 | 保留字段,不传的话默认为"" |
platformName | 商户名称 | 是 | String | WIFI或者LIANXIN或者OPENSDK | 一般为商户接入的大写字母例如:(WIFI/LIANXIN) |
environmentBranch | 环境 | 是 | String | 0:生产环境 1:测试环境 2:验证环境 | |
deviceId | 设备ID号 | 是 | String | 通过手机API获取 | |
openId | 开放ID | 否 | String | 商户透传过来 | 保留字段,不传的话默认为"" |
merchantId | 商户号 | 是 | String | 商户初始化透传 |
初始化字段:
platformName、environmentBranch、appId
示例代码:
WalletParams params = new WalletParams();
params.platformName = "OPENSDK";//接入平台:枚举值:WIFI 或LIANXIN 或OPENSDK,第三方请填OPENSDK
params.environmentBranch = 2;//服务器环境,0生成环境 1验证环境 2测试环境
params.appId="merchant01";//必填
params.merchantId="mer01";//必填 商户号
//其余选填
params.openId = "wifiopenId";//openId 选填
params.unionid = "wifiunionId";//unionid 选填
//.....其他要求必填字段,详情请参照WalletParms参数
WalletApi.getInstance().init(this, params);
第二步:发起支付,参数获取请参考API列表
PreOrderRespone字段说明(商户预收单数据返回)
字段名 | 变量 | 必填 | 类型 | 示例值 | 描述 |
---|---|---|---|---|---|
appId |
appId | 是 | String | ||
ext |
扩展信息 | 否 | String | 扩展信息 | |
isRedpacket |
是否是发红包 | 是 | String | "true" or "false" | "true"发红包"false"支付 |
mchId |
商户id | 是 | String | ||
mPackage |
需要接收支付回调APP应用包名 | 是 | String | ||
nonceStr |
随机字符串 | 是 | String | ||
payResult |
快应用支付结果页URL | 否 | String | 快引用回调url | |
prepayId |
预收单id | 是 | String | ||
scheme |
支付回调结果页面scheme | 是 | String | ||
sign |
验签 | 是 | String | 封装方法参考"唤起收银台参数封装代码示例" | |
signType |
签名方法 | 是 | String | RSA | RSA |
timestamp |
时间戳 | 是 | String | 10位时间戳 | 10位时间戳 |
tradeType |
交易类型 | 是 | String | APP |
唤起收银台参数封装代码示例
/**
* mRespone 商户预收单返回参数。定义为PreOrderRespone
* 注意:发起支付前请确保初始化了sdk,初始化请往上翻
*/
PayTool.getInstance().startPay(this, mRespone);
以下功能选接:
启动账单页面
WalletApi.getInstance().init(this, params);
Intent intent = new Intent(Constants.UNIFIED_BILL_ACTION);
intent.setPackage(this.getPackageName());//第三方应用包名,下同
startActivity(intent);
启动零钱页面
WalletApi.getInstance().init(this, params);
Intent intent = new Intent(Constants.UNIFIED_REMAIN_ACTION);
intent.setPackage(this.getPackageName());
startActivity(intent);
启动首页
WalletApi.getInstance().init(this, params);
Intent intent = new Intent(Constants.UNIFIED_HOME_ACTION);
intent.setPackage(this.getPackageName());
startActivity(intent);
清除登录信息
WalletApi.delThirdToken(this);
清除栈
WalletApi.finishAllActivity();
在支付结果Activity的oncreate()和onNewIntent()中获取支付结果
private void getPayResult() {
if (getIntent() != null && getIntent().getExtras() != null) {
String what = (String) getIntent().getExtras().get("what");
int retcode = getIntent().getExtras().get("retcode");
String remsg = (String) getIntent().getExtras().get("retmsg");
String data = (String) getIntent().getExtras().get("data");
if (StringUtils.isEmpty(what)) return;
Toast.makeText(this, "what:" + what +"retcode:" + retcode + "remsg:" + remsg +"data:" + data, Toast.LENGTH_LONG).show();
}
}
代码混淆
##### openSDK支付,混淆start,建议放置到APP的混淆文件中,以防出现位置的错误######
-keepclassmembers class com.wifipay.wallet.home.net.dto.SPJSBridge {
public *;
}
#不混淆org.apache.http.legacy.jar
-dontwarn android.net.compatibility.**
-dontwarn android.net.http.**
-dontwarn com.android.internal.http.multipart.**
-dontwarn org.apache.commons.**
-dontwarn org.apache.http.**
-keep class android.net.compatibility.**{*;}
-keep class android.net.http.**{*;}
-keep class com.android.internal.http.multipart.**{*;}
-keep class org.apache.commons.**{*;}
-keep class org.apache.http.**{*;}
#all 快捷方式
-keep public class com.wifipay.wallet.home.shortcut.ShortcutEntrance{*;}
-dontwarn com.wifipay.wallet.home.shortcut.ShortcutEntrance.**
#end alipay
#-keep class com.sdpopen.wallet.**{*;}
#-keep class com.sdpopen.wallet.analysis_tool.**{*;}
-keep class com.sdpopen.wallet.bank.manager.model.**{*;}
#-keep class com.sdpopen.wallet.bankmanager.**{*;}
#-keep class com.sdpopen.wallet.common.**{*;}
-keep class com.sdpopen.wallet.common.dns.WifiPayHttpDNSManager{*;}
-keep class com.sdpopen.wallet.common.walletsdk_common.eventbus.**{*;}
#-keep class com.sdpopen.wallet.common.walletsdk_common.eventbus.ThreadMode{*;}
#-keep class com.sdpopen.wallet.common.walletsdk_common.eventbus.Subscribe{*;}
-keep class com.sdpopen.wallet.common.walletsdk_common.common.**{*;}
-keep class com.sdpopen.wallet.common.walletsdk_common.utils.**{*;}
-keep class com.sdpopen.wallet.common.walletsdk_common.bean.**{*;}
-keep class com.sdpopen.wallet.common.walletsdk_common.callback.**{*;}
-keep class com.sdpopen.wallet.common.walletsdk_common.login.**{*;}
-keep class com.sdpopen.wallet.common.walletsdk_common.**
-keep class com.sdpopen.wallet.compliance.**{*;}
#-keep class com.sdpopen.wallet.component_charge_transfer_withdraw.**{*;}
-keep class com.sdpopen.wallet.pay.wallet.**{*;}
#-keep class com.sdpopen.wallet.wallet_home.**{*;}
#-keep class com.sdpopen.wallet.walletsdk_component.bill.**{*;}
-keep class com.shengpay.crypto.**{*;}
-keep class com.shengpay.json.**{*;}
-keep class com.shengpay.json.internal.**{*;}
-keep class com.shengpay.json.reflect.**{*;}
-keep class com.shengpay.json.stream.**{*;}
-keep class com.wifipay.common.security.**{*;}
-keep class com.shengpay.tool.**{*;}
-keep class com.sdpopen.wallet.BuildConfig{*;}