APP支付

Harmony OS接入要点

1.创建CMBApi的context

需要是UIAbilityContext

2.CMBRequest的schema(比之前android多的支付参数)

app支付时,使用之前android上和招行约定的schema,透传android的schema,用以校验商户是否合法。不一致会影响返回商户。

3.sendRequestWithCallback

1.注意必传参数,如参数存在问题会通过callback的error回调参数异常。如果未传callback,或者是null | undefined,会抛出异常。

2.优先打开招行app支付,如未安装招行app,且h5支付参数有效,会打开h5支付。

普通商户

测试环境: 
h5Url: http://netpay.netpay.bas.cmburl.cn:801/netpayment/BaseHttp.dll?H5PayJsonSDK 
appUrl: cmbmobilebank://CMBLS/FunctionJump?action=gofuncid&funcid=200013&serverid=CMBEUserPay&requesttype=post&cmb_app_trans_parms_start=here 
生产环境 
h5Url: https://netpay.cmbchina.com/netpayment/BaseHttp.dll?H5PayJsonSDK 
appUrl: cmbmobilebank://CMBLS/FunctionJump?action=gofuncid&funcid=200013&serverid=CMBEUserPay&requesttype=post&cmb_app_trans_parms_start=here

12306

//获取url和之前android一致。
//在webview.onLoadIntercept拦截存在PrePayWap.do的url发送请求
h5Url:和android一致
appUrl: 需要转换h5url。转换方法如下:

private getAppUrl(url: string): string {
    try {
      let textEncoder: util.TextEncoder = new util.TextEncoder('utf-8')
      let finalUrl = encodeURIComponent (new util.Base64Helper().encodeToStringSync(textEncoder.encodeInto(url)));
      return "cmbmobilebank://CMBLS/functionjump?id=1200&action=gofuncid&funcid=200011&serverid=CMBEUserPay&requesttype=post&cmb_app_trans_parms_start=here&cmbpbsdk_payParam=" + finalUrl;
    } catch (e) {
      return ""
    }
  }

4.handleWant时机

1.需要在唤起支付的ability的生命周期处理(如是单ability应用,在entryability处理即可)。

2.商户从自身隐私安全性出发,可以将仅招行app唤起的want交给招行支付sdk处理。可以校验want的源bundlename 即(ohos.aafwk.param.callerBundleName字段)是否为”com.cmbchina.harmony“

onCreate()时机

如不想在应用重启时处理(即应用不在后台已被用户杀掉进程,被招行app支付完成后唤起),可以不用在oncreate()处理,如期望在该业务场景处理支付结果,

需要重新构建callback和重新创建CMBApi对象。

onNewWant()时机

1.不用传callback,会使用之前发送请求传的callback

2.传了新的callback,会替换原有的callback


5.销毁CMBApi

防止内存泄漏,销毁创建的对象和callback

CMBAPIFactory.destroy()