目录:
- 文档说明
- 接口规范
2.1 网络通信方式
2.2 语法
2.3 接口报文约定 - SDK接口定义说明
3.1 获取HPaySDK对象(微信SDK1.8.6.1前版本)
3.1-1 获取HPaySDK对象(微信SDK1.8.6.1后版本)
3.2 支付接口~ 3.3 获取开通支付渠道
3.4 前台同步返回结果处理
3.5 返回码(retCode) - IOS相关文件下载
1. 文档说明
本文档着重说明iOS版接口接入互联网前置网关系统的技术性要求及相关接口解释。
2. 接口规范
2.1 网络通信方式
使用http协议,服务器点对点post方式进行数据通信。
2.2 语法
消息体采用XML格式描述,消息体的语法规则完全遵循JSON语法规则,并严格区分大小写。
2.3 接口报文约定
如图所示,引入libHPaySDK.a及其依赖包:
在工程info.plist设置中添加一个URL Types回调协议(“wx8af7b52abed1f836”),如图所示:
在工程对应的plist文件中添加NSAppTransportSecurity(Dictionary) 并同时设置里面NSAllowsArbitraryLoads 属性值为 YES, 添加LSApplicationQueriesSchemes(Array)并加入uppaysdk、uppaywallet、uppayx1、uppayx2、uppayx3五个item,如图所示:
3. SDK接口定义说明
3.1 获取HPaySDK对象(微信SDK1.8.6.1前版本)
- 发起方:APP
- 方法说明:
+(HPaySDK *)registerSDKPay:(NSString *)merchantNo url:(NSString *)url
- 参数说明:
参数 | 名称 | 类型 | 长度 | 必填 | 说明 | 示例 |
---|---|---|---|---|---|---|
url | 接口地址 | String | 30 | 是 | 请求后台服务地址(该信息一般由服务端维护) | http://onlinetest.bsoftpay.com/gatewayOnline/gateway/portal/frontReq |
merchantNo | 开发者id |
String | 30 | 是 | 聚合支付平台为每个开发者分配的开发者账号(该信息一般由服务端维护) | 12345 |
3.1-1 获取HPaySDK对象(微信SDK1.8.6.1后版本)
- 发起方:APP
- 说明:由于苹果iOS 13系统版本安全升级,微信SDK在1.8.6.1版本进行了适配,支持通过Universal Links方式跳转完成应用安全校验,提升使用流程安全性。
- 方法说明:
+(HPaySDK *)registerSDKPay:(NSString *)merchantNo url:(NSString *)url universalLink:(NSString *)universalLink;
- 参数说明:
参数 | 名称 | 类型 | 长度 | 必填 | 说明 | 示例 |
---|---|---|---|---|---|---|
url | 接口地址 | String | 30 | 是 | 请求后台服务地址(该信息一般由服务端维护) | http://onlinetest.bsoftpay.com/gatewayOnline/gateway/portal/frontReq |
merchantNo | 开发者id |
String | 30 | 是 | 聚合支付平台为每个开发者分配的开发者账号(该信息一般由服务端维护) | 12345 |
universalLink | 苹果Universal Links |
String | 是 | 与微信开放平台维护的Universal Links对应 | https://myphotoapp.example.com/albums/ |
3.2 支付接口
- 发起方:APP
- 所属对象: HPaySDK
- 方法说明:
-(void)doPay:(NSString *)orderInfo sign:(NSString *)sign appSchema:(NSString *)appSchema viewController:(UIViewController *)viewController callback:(void(^)(NSDictionary *dict))callback finishHandler:(void(^)(NSString *code, NSString *errMsg))finishHandler;
- 请求参数说明:
参数 | 名称 | 类型 | 长度 | 必填 | 说明 | 示例 |
---|---|---|---|---|---|---|
orderInfo | 订单信息 | String | 300 | 是 | 由服务器端组装XML报文,并加密,组装报文详见下表 | |
sign | 签名串 | String | 30 | 是 | 由APP服务端组装的XML报文由RSA签名算法生成 | |
PayType | 支付渠道 | String | 2 | 是 | 2支付宝 3微信 | 2 |
appSchema | URLtype | String | 16 | 是 | 由服务器端组装XML报文,并加密,组装报文详见下表 | |
viewController | 视图控制器 | String | 16 | 是 | 由服务器端组装XML报文,并加密,组装报文详见下表 | |
callback | 回调函数 | String | 否 | 在没有安装支付宝钱包的情况下,通过该方法同理前台同步返回结果 | ||
finishHandler | 回调函数 | String | 是 | 如果code 为1001,表示处理成功,即将跳转支付或微信,如果code不等于1001,说明处理失败,需要显示错误消息 | 1001 |
- orderInfo对象字段说明:
参数 | 名称 | 类型 | 长度 | 必填 | 说明 | 示例 |
---|---|---|---|---|---|---|
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 其他商业场景 |
3.3 获取开通支付渠道
- 发起方:APP
- 注意:新版本SDK(2.0)不提供此方法,可通过服务端接口查询
- 所属对象: HPaySDK
- 方法说明:
-(void)getOpenChannel:(NSString *)orderInfo sign:(NSString *)sign completeHandler:(void (^)(NSArray *array))completeHandler failHandler:(void(^)(NSString *code, NSString *errMsg))failHandler;
- 参数说明:
参数 | 名称 | 类型 | 长度 | 必填 | 说明 | 示例 |
---|---|---|---|---|---|---|
orderInfo | 订单信息 | String | 300 | 是 | 由服务器端组装XML报文,并加密 | |
sign | 签名 | String | 300 | 是 | 由服务端返回 | |
completeHandler | 成功回调函数 | String | 300 | 是 | 成功时调用该函数,APP可在该方法里面显示界面 | |
failHandler | 失败回调函数 | String | 300 | 是 | 失败时回调函数,APP可在该方法实现错误信息的提示框告诉用户 |
- orderInfo 由下列字段构成:
参数 | 名称 | 类型 | 长度 | 必填 | 说明 | 示例 |
---|---|---|---|---|---|---|
Mobile | 手机号 | String | 20 | 是 | 13212341234 | |
Amt | 金额 | Price | 10.2 | 是 | 本次支付/充值金额,用于控制健康钱包选项是否可选 | 0.01 |
MerchantNo | 收款商户号 | String | 15 | 是 | 聚合支付平台分配的商户号 | 809900000001 |
OptType | 操作类型 | String | 2 | 是 | 1 充值 2 支付 | 1 |
HealthCardId | 健康卡号 | String | 30 | 否 | 虚拟卡号 | 001 |
- NSArray 类型为ChannelResult,字段说明:
参数 | 名称 | 类型 | 长度 | 必输 | 说明 | 示例 |
---|---|---|---|---|---|---|
ChannelId | 渠道编号 | String | 10 | 是 | ||
ChannelName | 渠道名称 | String | 30 | 是 | ||
Isuse | 是否可用 | String | 1 | 是 | 1=可用 0=不可用 (有时不可用时可能在支付渠道列表中仍然显示,但为灰色,用户不可选择) | |
Errmsg | 不可用原因 | String | 100 | 否 | 错误原因,如:账户余额不足 | 账户余额不足 |
3.4 前台同步返回结果处理
- 发起方:APP
- 所属对象:SDKPay
- 方法说明:
-(bool)processOrder:(NSURL *)url callback:(void(^)(NSDictionary *))callback;
resultDict 包含两个参数:
RetCode SUCCESS – 支付成功 FAIL – 支付失败
ErrMsg 错误消息描述
Callback 回调函数
该方法应该在AppDelegate.m 文件中
-(BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options 方法中调用
微信SDK1.8.6.1后版本需增加以下处理:
处理微信通过Universal Link启动App时传递的数据
该方法应该在AppDelegate.m文件中
application:continueUserActivity:restorationHandler: 方法中调用
/// @param universalLink 微信启动第三方应用时系统API传递过来的userActivity
/// @param callback resultDict 包含两个参数: RetCode SUCCESS – 支付成功 FAIL – 支付失败 ErrMsg 错误消息描述 (暂时不用传)
/// @return 结果
- (BOOL)handleOpenUniversalLink:(NSUserActivity *)universalLink
callback:(void(^)(NSDictionary *resultDict))callback;
3.5 返回码(retCode)
序号 | 编码 | 说明 |
---|---|---|
1 | 0000 | 成功 |
2 | 9999 | 失败 |
4. iOS相关文件下载
- sdk见附件
文档更新时间: 2022-03-14 09:26 作者:甘世敏