跳转至

Android接入

适用于native调起 app支付、微信支付分授权服务(app)、微信代扣纯签约(app)、支付宝sdk独立签约。

导入聚合支付SDK

  1. 将aar包放在您的应用工程的libs目录下(图片中文件名仅做示例,请以实际SDK文件名为准,SDK将在联调时提供) 工程目录-Android
  2. 在主项目的 build.gradle 中,添加下面的内容,将 libs 目录作为依赖仓库:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    allprojects {
        repositories {
             // 添加下面的内容
             flatDir {
                  dirs 'libs'
             }
            // ... jcenter() 等其他仓库
        }
    }
    
  3. 在您 App Module 的 build.gradle 中,添加下面的内容,将聚合支付 SDK 作为项目依赖:
    1
    2
    3
    4
    5
    6
    7
    dependencies {
        ... ...
        //添加下面的内容
        implementation (name: 'sdppaySdk-20200507', ext: 'aar')
        // ...其他依赖项
        ... ...
    }
    

运行权限

1
2
3
android.permission.INTERNET
android.permission.ACCESS_NETWORK_STATE
android.permission.ACCESS_WIFI_STATE
您需要在 AndroidManifest 里配置以上 3 个权限,聚合 SDK 在运行时需要进行网络连接,并在必要的时候判断网络连接的状态(4G/Wi-Fi)等来进行支付体验的优化。

第三方sdk版本说明

  1. 支付宝 SDK 从 15.5.7 开始,打包方式更换为 AAR,替代之前的 JAR 打包。更换为 AAR 后相关的H5支付页面无需再手动注册,项目中若存在请移除。
    建议使用aar方式
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    <!-- 删除以下内容 -->
    <activity
        android:name="com.alipay.sdk.app.H5PayActivity"
        android:configChanges="orientation|keyboardHidden|navigation|screenSize"
        android:exported="false"
        android:screenOrientation="behind"
        android:windowSoftInputMode="adjustResize|stateHidden" >
    </activity>
     <activity
        android:name="com.alipay.sdk.app.H5AuthActivity"
        android:configChanges="orientation|keyboardHidden|navigation"
        android:exported="false"
        android:screenOrientation="behind"
        android:windowSoftInputMode="adjustResize|stateHidden" >
    </activity>
    <!-- 删除以上内容 -->
    
  2. 微信
    1
    2
    3
    dependencies {
        api 'com.tencent.mm.opensdk:wechat-sdk-android-without-mta:+'
    }
    

清单文件注册相关类

  • 微信支付需要将以下“替换成自己 APK 的包名”换成在微信平台上注册填写的包名
  • WxPayEntryActivity 这个类在 SDK 内部实现,开发者不需要额外实现该类
    1
    2
    3
    4
    <activity-alias
        android:name="替换成自己 APK 的包名.wxapi.WXPayEntryActivity"
        android:exported="true"
        android:targetActivity="com.shengpay.aggregate.app.PaymentActivity" />
    
  • 若接入微信支付分及微信纯签约需要额外添加以下声明
  • 若商户方同时接入微信分享等相关微信业务,则不需要添加以下声明,且需要在商户工程WXEntryActivity中做下述特殊处理,参考 聚合V1.1.4版本中接口调用文档处
    1
    2
    3
    4
    <activity-alias
        android:name="替换成自己 APK 的包名.wxapi.WXEntryActivity"
        android:exported="true"
        android:targetActivity="com.shengpay.aggregate.app.PaymentActivity" />
    

支付接口调用

SDPPayManager 对象为商户提供订单支付功能。获取SDPPayManager支付对象调用支付,代码示例如下:

1
String orderInfo = info; // 订单信息

聚合SDK V1.0.0 (老连尚钱包aar)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
SDPPayManager manager = new SDPPayManager(DemoActivity.this);
manager.initWalletParams(WalletParams);//连尚支付需要初始化
manager.initWxAppid("wxappId");//微信支付需要初始化
manager.pay(SDPPayManager.PLATFORM_SP, orderInfo, new PayResultCallback() {
@Override
public void onPayBack(int code, String msg, Object o) {
    // 支付结果处理
    showAlert(DemoActivity.this, "code:" + "code:" + code + " message:" + msg);
} });
功能说明
具有连尚钱包支付支付宝支付微信支付功能

聚合SDK V1.0.1 (老连尚钱包aar)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
SPTrackOptions options = new SPTrackOptions();
options.setOutTradeNo("outTradeNo");
options.setUhid("uhid");
options.setSdpappId("sdpappid");
options.setImei("imei");
options.setDebug(true); //默认是关闭的,调试时可打开log调试,上线前请务必关闭。

SDPPayManager manager = new SDPPayManager(DemoActivity.this);
manager.initWalletParams(WalletParams);//连尚支付需要初始化
manager.initWxAppid("wxappId");//微信支付需要初始化
manager.pay(SDPPayManager.PLATFORM_SP, orderInfo, new PayResultCallback() {
@Override
public void onPayBack(int code, String msg, Object o) {
  // 支付结果处理
  showAlert(DemoActivity.this, "code:" + "code:" + code + " message:" + msg);
} },options);

功能说明  
1. 具有连尚钱包支付支付宝支付微信支付功能  
2. 具有微信支付分支付宝独立签约等功能  

聚合SDK最新版本 V1.1.4(适配连尚钱包sdk5.0登录改造,请参照以下实现)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
SPTrackOptions options = new SPTrackOptions();
options.setOutTradeNo("outTradeNo");
options.setUhid("uhid");
options.setSdpappId("sdpappid");
options.setImei("imei");
options.setDebug(true); //默认是关闭的,调试时可打开log调试,上线前请务必关闭。

SDPPayManager manager = new SDPPayManager(DemoActivity.this);
manager.initWxAppid("wxappId");//微信支付需要初始化
manager.pay(SDPPayManager.PLATFORM_SP, orderInfo, new PayResultCallback() {
@Override
public void onPayBack(int code, String msg, Object o) {
  // 支付结果处理
  showAlert(DemoActivity.this, "code:" + "code:" + code + " message:" + msg);
} },options);

特别说明
若商户app有接入微信分享等相关业务需求需在WXEntryActivity中做如下处理微信分及微信签约方可收到回调
@Override
    public void onResp(BaseResp arg0) {
        int type = arg0.getType();
        if (type == ConstantsAPI.COMMAND_OPEN_BUSINESS_VIEW || type == ConstantsAPI.COMMAND_OPEN_BUSINESS_WEBVIEW){
            Intent intent = getIntent();
            intent.setClassName(this, "com.shengpay.aggregate.app.PaymentActivity");
            BLUtils.safeStartActivity(this, intent);
            finish();
            return;
        }
        //.......
}
@Override
    public void onReq(BaseReq arg0) {
        int type = arg0.getType();
        if (type == ConstantsAPI.COMMAND_SHOWMESSAGE_FROM_WX ){
             Intent intent = getIntent();
            intent.setClassName(this, "com.shengpay.aggregate.app.PaymentActivity");
            BLUtils.safeStartActivity(this, intent);
            finish();
            return;
        }
        finish();
        //.......
    }

功能说明  
1. 具有连尚钱包支付支付宝支付微信支付功能  
2. 具有微信支付分支付宝独立签约等功能  
3. 具有微信纯签约功能  

聚合SDK版本 V1.1.1~V1.1.3版本

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
聚合SDKV1.1.4之前版本请参考以下实现
SPTrackOptions options = new SPTrackOptions();
options.setOutTradeNo("outTradeNo");
options.setUhid("uhid");
options.setSdpappId("sdpappid");
options.setImei("imei");
options.setDebug(true); //默认是关闭的,调试时可打开log调试,上线前请务必关闭。

SDPPayManager manager = new SDPPayManager(DemoActivity.this);
manager.initWalletParams(uhid,userToken,extras);//需初始化连尚钱包sdk登录信息
manager.initWxAppid("wxappId");//微信支付需要初始化
manager.pay(SDPPayManager.PLATFORM_SP, orderInfo, new PayResultCallback() {
@Override
public void onPayBack(int code, String msg, Object o) {
  // 支付结果处理
  showAlert(DemoActivity.this, "code:" + "code:" + code + " message:" + msg);
} },options);
参数名称 参数说明
String platform 用户所选择支付平台:PLATFORM_ALI,PLATFORM_WX,PLATFORM_SP
String orderInfo app支付请求参数字符串,主要包含商户的订单信息,key=value形式,以&连接。
PayResultCallback callback 支付结果回调
SPTrackOptions options 埋点配置信息

支付结果获取和处理

商户应用客户端通过当前调用支付的SDPPayManager的回调函数获取支付结果。

1
2
3
4
@Override
public void onPayBack(int code, String msg, Object o) {
    // 支付结果处理 showAlert(DemoActivity.this, "code:" + "code:" + code + " message:" + msg);
}
回调中errCode值列表:
1
2
3
4
int ERR_OK = 0; // 通知商户支付成功,不可作为最终的支付凭证,需商户异步查询支付结果
int ERR_WAIT = -1; // 支付中 需商户异步去查询最终的支付结果
int ERR_FAIL = -2; // 支付失败 可能错误:sign签名错误、uhId不匹配、连尚校验失败、其他异常
int ERR_CANCEL = -3; // 用户取消 无需处理,用户不支付

微信支付分接入示例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
//聚合SDK V1.0.1 及以上版本
//业务方服务端返回query信息
String queryInfo = query;
//调用对象实例化
SDPPayManager manager = new SDPPayManager(MainActivity.this);
//微信api初始化
manager.initWxAppid(APP_ID);
//调起微信分服务方法
manager.payWXScore(queryInfo, new PayResultCallback() {
    @Override
    public void onPayBack(int code, String msg, Object obj) {
        showAlert(MainActivity.this, "code:" + code + "    message:" + msg+ "    ex:" + msg);
        // obj 中有扩展字段(微信服务返回) extMsg+businessType
    }
});
返回码 -99 微信版本不支持

微信纯签约服务接入示例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
//聚合SDK V1.0.2 或者 聚合SDK V1.1.1 及以上版本
//业务方服务端返回query信息
String queryInfo = query;
//调用对象实例化
SDPPayManager manager = new SDPPayManager(MainActivity.this);
//微信api初始化
manager.initWxAppid(APP_ID);
//调起微信分服务方法
manager.wxAuthContract(queryInfo, new PayResultCallback() {
    @Override
    public void onPayBack(int code, String msg, Object obj) {
        showAlert(MainActivity.this, "code:" + code + "    message:" + msg+ "    ex:" + msg);
        // obj 中有扩展字段(微信服务返回) extMsg+businessType
    }
});
返回码 -99 微信版本不支持

支付宝sdk独立签约接入示例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
//调用对象实例化
 SDPPayManager manager = new SDPPayManager(MainActivity.this);
 // 传递给支付宝应用的业务参数(业务方服务端返回)
 Map<String, String> bizParams = new HashMap<>();
 bizParams.put("sign_params", "biz_content=%7B%22access_params%22%3A%7B%22channel%22%3A%22ALIPAYAPP%22%7D%2C%22external_agreement_no%22%3A%22shiyun20191231_15%22%2C%22external_logon_id%22%3A%22%E5%A4%96%E9%83%A8%E7%99%BB%E9%99%86%E5%A5%BD%22%2C%22personal_product_code%22%3A%22GENERAL_WITHHOLDING_P%22%2C%22sign_scene%22%3A%22INDUSTRY%7CMULTI_MEDIA%22%7D&sign=HrpbNe2rIXkA1ZOjG65J1M2jVNPrBr7ka7APCB9bo2KABMdu9OqR4vx%2FaTvvJl9RSpuOLYoVYN%2BBQjczXiPJw4s7vpQS6TvaIFnbOQsH4K8YAEu3r9gxGm0OyuXYKanzZUSRujsGQYrhAwUT3k%2Bkd2eM6ta5hUymyuQJYA093PFwIIv5BMDz334z%2B%2BMz2OrnW5b78d556wYxYlrELw15RhLtvR1oHeSMo4WKK3suPEVVWF2YB%2Be6WQE8cGOQ7NiWtTytiqePeBkZNXuJJQjqoQ6WltTXDaeICDJESst0FKM6j0AtOctzIKb9o8uLwpF70dkYzyFe6ATqsdkb%2Foajzg%3D%3D×tamp=2020-01-13+10%3A33%3A07&sign_type=RSA2&charset=UTF-8&app_id=2017090501336035&method=alipay.user.agreement.page.sign&version=1.0");
//独立签约方法,useBrowserLanding 是否在用户未安装支付宝的情况下,展示一个 H5 页面引导用户安装支付宝
 manager.authContract(bizParams, false, new PayResultCallback() {
     @Override
     public void onPayBack(int code, String msg, Object obj) {
         showAlert(MainActivity.this, String.format("业务成功,结果码: %s\n结果信息: %s\n结果数据: %s", code, msg, obj));
     }
 });
1
2
3
4
5
//返回码
OpenAuthTask.OK = 9000 //调用成功 
OpenAuthTask.Duplex = 5000 //3秒内快速发起了多次调用而失败。 
OpenAuthTask.NOT_INSTALLED = 4001 //用户未安装支付宝 App。 
OpenAuthTask.SYS_ERR = 4000 //其它错误,如参数传递错误。
Back to top