目录:

  1. 文档说明
  2. 接口规范
    2.1 网络通信方式
    2.2 语法
    2.3 接口报文约定
  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)
  4. 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相关文件下载

  1. sdk见附件
文档更新时间: 2022-03-14 09:26   作者:甘世敏