Paymax Android SDK 使用文档

一、下载

https://www.paymax.cc 下载Android SDK,下载列表如下包含:

下载列表

注:要求jdk版本最低为1.7

二、快速体验

Paymax SDK 为开发者提供了demo 程序,可以快速体验 Paymax 接入流程。下载 Paymax SDK 之后将整个目录导入到您的 Android Studio 中。

使用 Android Studio 时,请选择 FileOpen...PaymaxDemo

图片名称

三、快速集成

导入 Paymax SDK

Android Studio
  1. 在你的项目里创建 libs 目录:将项目切换到project模式,定位到你的module,右击 NewDirectory→ 输入 libsOK
  2. 将下载的 paymax.jar 复制、粘贴到 libs 目录
  3. 同时将下载的微信 libammsdk.jar 、支付宝 alipaySdk-20160516 官方jar文件复制、粘贴到 libs 目录
  4. 找到module的 build.gradledependencies 填写
  1. compile fileTree(dir: 'libs', include: ['*.jar'])
  1. 如果需要使用拉卡拉支付与人脸识别, 找到releaselibs目录, 将其放置到与您项目并行目录下, 并在您项目的gradle文件进行如下配置

    1. repositories {
    2. flatDir {
    3. dirs '../../libs'
    4. }
    5. }
    6. dependencies {
    7. compile fileTree(dir: 'libs', include: ['*.jar'])
    8. compile(name: 'facesdk-release', ext: 'aar')
    9. compile(name: 'lkl-pay-sdk-release', ext: 'aar')
    10. compile(name: 'camera-release', ext: 'aar')
    11. compile(name: 'idcardcaptorsdk-release', ext: 'aar')
    12. compile(name: 'livenessdetectorsdk-release', ext: 'aar')
    13. compile(name: 'livenessdetectionviewsdk-release', ext: 'aar')
    14. compile files('../../libs/paymax.jar')
    15. }
权限声明
  1. <!-- 微信和支付宝公共权限 -->
  2. <uses-permission android:name="android.permission.INTERNET" />
  3. <!-- 微信所需权限 -->
  4. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
  5. <!-- 支付宝所需权限 -->
  6. <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
  7. <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
  8. <uses-permission android:name="android.permission.READ_PHONE_STATE" />
  9. <!-- 拉卡拉 -->
  10. <uses-permission android:name="android.permission.RECEIVE_USER_PRESENT" />
  11. <uses-permission android:name="android.permission.WAKE_LOCK" />
  12. <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
  13. <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
  14. <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
  15. <uses-permission android:name="android.permission.VIBRATE" />
  16. <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
  17. <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
  18. <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
  19. <uses-permission android:name="android.permission.WRITE_SETTINGS" />
  20. <!--人脸识别-->
  21. <uses-permission android:name="android.permission.CAMERA" />
  22. <uses-feature android:name="android.hardware.camera" />
  23. <uses-feature android:name="android.hardware.camera.autofocus" />
注册 activity
  1. <!--人脸识别-->
  2. <activity
  3. android:name="com.swwx.facesdk.ui.FaceLivenessActivity"
  4. android:screenOrientation="portrait" />
  5. <!-- 注册微信 -->
  6. <activity
  7. android:name="com.swwx.paymax.PaymentActivity"
  8. android:launchMode="singleTop"
  9. android:theme="@android:style/Theme.Translucent.NoTitleBar" />
  10. <activity-alias
  11. android:name=".wxapi.WXPayEntryActivity"
  12. android:exported="true"
  13. android:targetActivity="com.swwx.paymax.PaymentActivity" />
  14. <!-- 注册支付宝 -->
  15. <activity
  16. android:name="com.alipay.sdk.app.H5PayActivity"
  17. android:configChanges="orientation|keyboardHidden|navigation|screenSize"
  18. android:exported="false"
  19. android:screenOrientation="behind"
  20. android:windowSoftInputMode="adjustResize|stateHidden" >
  21. </activity>
  22. <!-- 注册拉卡拉 -->
  23. <activity
  24. android:name="com.lkl.pay.ui.activity.SDK_StartJarActivity"
  25. android:screenOrientation="portrait"
  26. android:theme="@android:style/Theme.Translucent" />
  27. <activity
  28. android:name="com.lkl.pay.ui.activity.SDK_LoginActivity"
  29. android:screenOrientation="portrait" >
  30. </activity>
  31. <activity
  32. android:name="com.lkl.pay.ui.activity.SDK_MsgLoginActivity"
  33. android:screenOrientation="portrait" >
  34. </activity>
  35. <activity
  36. android:name="com.lkl.pay.ui.activity.cardPay.BindCreditCardActivity"
  37. android:screenOrientation="portrait" >
  38. </activity>
  39. <activity
  40. android:name="com.lkl.pay.ui.activity.cardPay.BindDebitCardActivity"
  41. android:screenOrientation="portrait" >
  42. </activity>
  43. <activity
  44. android:name="com.lkl.pay.ui.activity.cardPay.HtmlProtocolActivity"
  45. android:screenOrientation="portrait" >
  46. </activity>
  47. <activity
  48. android:name="com.lkl.pay.ui.activity.cardPay.InputCardNoActivity"
  49. android:screenOrientation="portrait" />
  50. <activity
  51. android:name="com.lkl.pay.ui.activity.cardPay.InputMessageCodeActivity"
  52. android:screenOrientation="portrait" />
  53. <activity
  54. android:name="com.lkl.pay.ui.activity.forget.FindLoginPwdActivity"
  55. android:screenOrientation="portrait" />
  56. <activity
  57. android:name="com.lkl.pay.ui.activity.forget.SetLoginPwdActivity"
  58. android:screenOrientation="portrait" />
  59. <activity
  60. android:name="com.lkl.pay.ui.activity.register.SetPayPwdActivity"
  61. android:screenOrientation="portrait" />
  62. <activity
  63. android:name="com.lkl.pay.ui.activity.payResult.SuccessActivity"
  64. android:screenOrientation="portrait" />
  65. <activity
  66. android:name="com.lkl.pay.ui.activity.payResult.FailureActivity"
  67. android:screenOrientation="portrait" />
  68. <activity
  69. android:name="cn.cloudcore.iprotect.plugin.CKbdActivity"
  70. android:launchMode="singleTask"
  71. android:configChanges="orientation"
  72. android:theme="@android:style/Theme.Translucent"
  73. />

四、人脸识别

说明:为了保证用户资金安全,使用拉卡拉支付必须支持人脸识别

发起支付前,请先通过后台接口判断是否需要调起人脸识别。商户后台通过调用Paymax Server SDK 向paymax服务器发起请求,获得结果码的方式进行判断(已经识别过的用户可不用再次识别验证),详细步骤请参考Demo

如果需要调用,请参考如下内容:

  1. /**
  2. * 调用人脸识别接口
  3. * uId 商户用户号
  4. * authorization 商户号
  5. * realName 姓名
  6. * idCardNo 身份证
  7. * act 上下文
  8. *
  9. */
  10. FaceRecoSDK.startReco(String uId, String authorization, String realName, String idCardNo, Activity act);

根据人脸识别结果进行相应处理,如下为理情况,仅供参考:

  1. /**
  2. * 人脸识别结果处理
  3. * @param msg
  4. */
  5. public void handleMessage(Message msg) {
  6. if (response != null) {
  7. message = response.message;
  8. switch (response.code) {
  9. //人脸识别一致
  10. case "ACCORDANCE":
  11. ok = true;
  12. code = CODE_VERIFY_SUCCESS;
  13. break;
  14. //人脸识别不一致
  15. case "INCONFORMITY":
  16. code = CODE_INCONFORMITY;
  17. break;
  18. //签名验证失败
  19. case "VERIFY_FAILED":
  20. code = CODE_VERIFY_FAILED;
  21. break;
  22. //时间戳过期或者提前
  23. case "REQUEST_TIMESTAMP_EXPIRE":
  24. code = REQUEST_TIMESTAMP_EXPIRE;
  25. break;
  26. //请求参数不合法
  27. case "ILLEGAL_REQUEST_BODY":
  28. code = ILLEGAL_REQUEST_BODY;
  29. break;
  30. //非法参数
  31. case "ILLEGAL_ARGUMENT":
  32. code = ILLEGAL_ARGUMENT;
  33. break;
  34. //请求数据非法
  35. case "ILLEGAL_DATA":
  36. code = ILLEGAL_DATA;
  37. break;
  38. //身份证号码不一致
  39. case "IDCARDNO_ERROR":
  40. code = IDCARDNO_ERROR;
  41. break;
  42. //姓名与身份证号不一致
  43. case "REALNME_IDCARD_NOT_SAME":
  44. code = REALNME_IDCARD_NOT_SAME;
  45. break;
  46. //服务器内部异常
  47. case "SERVER_ERROR":
  48. code = SERVER_ERROR;
  49. break;
  50. }
  51. }

五、获得 Charge

Charge 对象是一个包含支付信息的 JSON 对象,是 Paymax SDK 发起支付的必要参数。该参数需要请求用户服务器获得,服务端生成 charge 的方式参考 [Paymax 官方文档]。SDK 中的 demo 里面提供了如何获取 charge 的实例方法,供用户参考。

六、发起支付

  1. /**
  2. * 发起支付
  3. * @param activity
  4. * @param charge 与服务器交互后的充值要素
  5. * @param callback 充值结果回调接口
  6. */
  7. PaymaxSDK.pay(Activity activity, String charge, PaymaxCallback callback);

七、获取支付状态

PaymaxCallbackonPayFinished() 方法中获得支付结果。支付成功后,用户服务器也会收到Paymax 服务器发送的异步通知。 最终支付成功请根据服务端异步通知为准。

  1. @Override
  2. public void onPayFinished(PayResult result) {
  3. String msg = "Unknow";
  4. switch (result.getCode()) {
  5. case Paymax.CODE_SUCCESS:
  6. //支付成功
  7. msg = "Complete, Success!";
  8. break;
  9. case Paymax.CODE_ERROR_CHARGE_JSON:
  10. //非空格式
  11. msg = "charge string isn't a json string error.";
  12. break;
  13. case Paymax.CODE_FAIL_CANCEL:
  14. //用户取消
  15. msg = "cancel pay.";
  16. break;
  17. case Paymax.CODE_ERROR_CHARGE_PARAMETER:
  18. //字段不全
  19. msg = "some charge paramters error.";
  20. break;
  21. case Paymax.CODE_ERROR_WX_NOT_INSTALL:
  22. //微信未安装
  23. msg = "wx not install.";
  24. break;
  25. case Paymax.CODE_ERROR_WX_NOT_SUPPORT_PAY:
  26. //微信版本不支持
  27. msg = "ex not support pay.";
  28. break;
  29. case Paymax.CODE_ERROR_WX_UNKNOW:
  30. //微信未知错误
  31. msg = "wechat failed.";
  32. break;
  33. case Paymax.CODE_ERROR_ALI_DEAL:
  34. //支付宝正在处理中
  35. msg = "alipay dealing.";
  36. break;
  37. case Paymax.CODE_ERROR_CONNECT:
  38. //支付宝网络连接错误
  39. msg = "alipay network connection failed.";
  40. break;
  41. case PaymaxSDK.CODE_ERROR_CHANNEL:
  42. //渠道错误
  43. msg = "channel error.";
  44. break;
  45. case PaymaxSDK.CODE_ERROR_LAK_USER_NO_NULL:
  46. //拉卡拉商户用户号为空
  47. msg = "lklpay user no is null.";
  48. break;
  49. }

注意事项

Android 不允许在 UI 线程中进行网络请求,所以请求 charge 对象的时候请使用 thread+handler 或者使用 AsyncTask 。example 里面的示例程序使用的就是 AsyncTask 方式请求 charge 对象。

混淆设置

用户进行 apk 混淆打包的时候,为了不影响 Paymax SDK 以及渠道 SDK 的使用,请在 proguard-rules 中添加一下混淆规则。

  1. -dontwarn com.alipay.**
  2. -keep class com.alipay.** {*;}
  3. -dontwarn com.tencent.**
  4. -keep class com.tencent.** {*;}
  5. -dontwarn com.swwx.paymax.**
  6. -keep class com.swwx.paymax.** {*;}
  7. -dontwarn com.lkl.**
  8. -keep class com.lkl.** {*;}

日志开关

SDK 提供了日志功能,默认日志为关闭状态。 开发者可以通过下面设置打开日志开关。通过 PaymaxSDK 来对日志进行筛选。

  1. PayLog.DEBUG = true;