目录:
- 文档说明
- sdk集成步骤说明
2.1 导入相关文件到项目中
2.2 修改manifest
2.3 添加activity - 接口和字段说明
3.1 报文格式
3.2 请求有效性验证算法
3.3 初始化参数
3.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
- 在商户应用工程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"/>
- 添加权限声明
<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 请求支付接口
- 功能码:P2003
- 接口请求地址:
- 正式环境:由平台商务对接人员提供
- 测试环境:http://onlinetest.bsoftpay.com/gatewayOnline/gateway/portal/frontReq
- 接口说明:app调用该接口发起预支付,可唤起第三方支付客户端,让用户可以完成支付
注:安全性考虑,参数的加签操作最好由服务端来完成
- 请求参数:
<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 其他商业场景 |
- 调起支付交易接口:
hPayApi.doPay(context, sign, data, new HPayResultListener() {});
- 参数说明:
context:上下文 sign:签名(上述报文由服务端组装XML报文,并由RSA签名算法签名而成) data:参数(上述报文由服务端组装XML报文,并由DES机密算法加密而成) HPayResultListener:结果回调
注:HPayResultListener只能获取支付宝的回调信息,微信的回调信息需要通过前面配置的activity来主动获取
服务端XML报文格式:
<Data>
<字段1>234324</字段1>
<字段2></字段2>
..........
<Data>
- 回调结果编码
序号 | 编码 | 说明 |
---|---|---|
1 | 1001 | 成功 |
2 | 1002 | 失败 |
3 | 1003 | 验签失败 |
4. Android相关文件下载
文档更新时间: 2022-03-14 09:26 作者:甘世敏