目录:

  1. 文档说明
  2. sdk集成步骤说明
    2.1 导入相关文件到项目中
    2.2 修改manifest
    2.3 添加activity
  3. 接口和字段说明
    3.1 报文格式
    3.2 请求有效性验证算法
    3.3 初始化参数
    3.4 请求支付接口
  4. Android相关文件下载

1. 文档说明

本文档主要说明支付SDK集成到android app的主要流程及相关接口解释。

2. sdk集成步骤说明

2.1 导入相关文件到项目中

导入hpaysdk-1.0.jar到APP项目中

微信和支付宝支付只需要导入这个hpaysdk-1.0.jar包就可以啦,后面data.bin是银联卡支付用的

将data.bin添加到assets文件夹下面,导入相关的so库文件。

2.2 修改manifest

  1. 在商户应用工程AndroidManifest.xml里添加声明:
    <uses-library android:name="org.simalliance.openmobileapi" android:required="false"/>
    <activity
     android:name="com.unionpay.uppay.PayActivity"
     android:configChanges="orientation|keyboardHidden|keyboard"
     android:screenOrientation="portrait">
    </activity>
    <activity
     android:name="com.unionpay.UPPayWapActivity"
     android:configChanges="orientation|keyboardHidden|fontScale"
     android:screenOrientation="portrait"
     android:windowSoftInputMode="adjustResize" >
    </activity>
    <activity
             android:name="com.alipay.sdk.app.H5PayActivity"
             android:configChanges="orientation|keyboardHidden|navigation"
             android:exported="false"
             android:screenOrientation="behind" >
    </activity>
    <activity
             android:name="com.alipay.sdk.auth.AuthActivity"
             android:configChanges="orientation|keyboardHidden|navigation"
             android:exported="false"
             android:screenOrientation="behind" >
    </activity>
    <activity
            android:name=".wxapi.WXPayEntryActivity"
            android:exported="true"
            android:launchMode="singleTop"/>
  2. 添加权限声明
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
    <uses-permission android:name="org.simalliance.openmobileapi.SMARTCARD" />
    <uses-permission android:name="android.permission.NFC" />
    <uses-feature android:name="android.hardware.nfc.hce"/>

    2.3 添加activity

    在包名目录下新建wxapi文件夹,在wxapi文件夹下新建activity:WXPayEntryActivity,并实现接口IWXAPIEventHandler

注:由于微信唤起支付后,跳回商户app,不会有回调数据,因此需要实现该接口来获取本次支付的状态

3. 接口和字段说明

3.1 报文格式

<Data>
    <字段1>234324</字段1>
    <字段2></字段2>
     ..........
<Data>

3.2 请求有效性验证算法

支付系统接口服务和商户系统约定统一的请求指令验证算法。

  • 算法原理:将数据域通过Des加密后作为data参数,并将原文通过RSA私钥签名得到结果作为signature参数
  • 算法规则:先用密钥将数据解密得到原文,再用RSA公钥匙对原文进行验签。

3.3 初始化参数

参数 名称 类型 长度 必填 说明 示例
url 接口地址 String 30 请求后台服务地址 http://onlinetest.bsoftpay.com/gatewayOnline/gateway/portal/frontReq
appid 开发者id String 30 开发者标识 2018231831821

创建HPayApi对象:

   HPayApi hPayApi = HPayAPIFactory.createHPayApi(appid,url);

注:接口地址建议维护在服务端,支付时,由服务端传递过来

3.4 请求支付接口

注:安全性考虑,参数的加签操作最好由服务端来完成

  • 请求参数:<Data>
参数 名称 类型 长度 必填 说明 示例
order_no 业务单号 String 30 商户业务系统的唯一订单号 BX20190722902141
Name 支付者姓名 String 30 付款者姓名 张三
Mobile 手机号码 String 15 用户手机号 13211112222
Amt 支付金额 Price 16.2 以元为单位 0.01
TransdateTime 请求支付时间 String 16 yyyy-MM-dd hh:mm:ss 2019-07-29 12:23:12
paytype 支付渠道 String 2 1=健康钱包;2=支付宝;3=微信;5=银联云闪付 2
MerchantNo 收款商户号 String 30 创业聚合支付系统为医院分配的平台商户号 809900000001
MerchName 收款账户名 String 30 商户名称账户名称 中山杭创测试商户
OrderSubject 商品标题 String 150 如:门诊、住院预交、住院结算、自助缴费等 门诊
OrderDetail 商品描述 String 300 如:门诊挂号、门诊结算、住院预交、住院结算、自助挂号、自助结算、自助住院预交等 门诊挂号
PayTimeOut 订单超时时间 String 3 单位是: m (分钟) 如果不填,默认是 6分钟,如果填,必须大于5分钟 6
Password 交易密码 String 2 当paytype = 1时,必填。设计简单对称加密。网接收后,解密并转成核心系统密文 5
HealthCardId 健康e卡号 String 30 商户内部区分订单字段 001
Opt 操作员 String 30 商户内部区分订单字段 001
remark 备注 String 200 备注
his_charge_no his收费单号 String 300 如果totalFee没有值,那么HIS在窗口通过feeNo进行退款时,只控制每笔feeNo只允许退款一次,而且不管这次金额是否大于或者小于这笔feeNo的原支付金额;当totalFee有值时,HIS在窗口通过feeNo进行退款时,会控制每笔feeNo退款的金额是否大于原支付金额,同时也允许每笔feeNo多次退款,而且累计金额不能大于原支付金额 [{"feeNo":"wxdcs001","totalFee":200},{"feeNo":"wxdcs002","totalFee":100}]
extendData 扩展参数 String 200 json {}格式扩展参数
goodsTag 支付优惠场景 String 128 涉及到2022-04-01日后的微信返佣 REGISTRATION_FEE 门诊挂号
MEDICINE_AND_TEST 门诊缴费
HOSPITALIZATION 住院
ONLINE_CONSULTATION 在线问诊
NUCLEIC_ACID_TEST 核酸检测
BODY_TEST 体检
SCAN_TO_ORDER 医院餐饮
COMMERCIAL_OTHERS 其他商业场景
  1. 调起支付交易接口:
    hPayApi.doPay(context, sign, data, new HPayResultListener() {});
  2. 参数说明:
    context:上下文
    sign:签名(上述报文由服务端组装XML报文,并由RSA签名算法签名而成)
    data:参数(上述报文由服务端组装XML报文,并由DES机密算法加密而成)
    HPayResultListener:结果回调
    注:HPayResultListener只能获取支付宝的回调信息,微信的回调信息需要通过前面配置的activity来主动获取

服务端XML报文格式:

<Data>
    <字段1>234324</字段1>
    <字段2></字段2>
    ..........
<Data>
  1. 回调结果编码
序号 编码 说明
1 1001 成功
2 1002 失败
3 1003 验签失败

4. Android相关文件下载

文档更新时间: 2022-03-14 09:26   作者:甘世敏