商户支付接入流程:

支付是否成功可以通过回调通知中的orderStatus的返回状态判断:
通过H5预下单接口获取h5Url后可对参数做进一步处理:
不同的参数拼接处理,支付时h5Url加载效果会有所区别,具体可参见浏览器环境加载h5Url。
商户客户端获取h5Url后通过应用webView组件加载该URL来拉起华为支付收银台完成支付。
// API 9以下的代码示例
webView.setWebAgent(new WebAgent() {
@Override
public boolean isNeedLoadUrl(WebView webView, ResourceRequest request) {
if (request == null || request.getRequestUrl() == null) {
LogC.i(TAG,"WebAgent isNeedLoadUrl:request is null.", false);
return false;
}
String url = request.getRequestUrl().toString();
if (url.startsWith("hms:")) {
Intent deepLinkIntent = new Intent();
Uri deeplink = Uri.parse(url);
try {
Operation operation = new Intent.OperationBuilder()
.withUri(deeplink)
.withDeviceId("")
.withFlags(Intent.FLAG_NOT_OHOS_COMPONENT)
.build();
deepLinkIntent.setOperation(operation);
startAbility(deepLinkIntent);
return false;
} catch (Exception e) {
return false;
}
}
webView.load(url);
return false;
}
});
// API 9及以上的代码示例
Web({
src: '',
controller: this.webviewController
}).onInterceptRequest((event) => {
// 拦截页面请求
if (!event.request.getRequestUrl().startsWith("hms")) {
return null;
}
payService.hwPayService.pay(getContext(this) as common.UIAbilityContext, event.request.getRequestUrl());
})
public async pay(context: common.UIAbilityContext, uri: string): Promise<void> {
if (uri && context) {
let want:Want =
{
action: "ohos.want.action.viewData",
flags: 0x10000000,
uri: uri // hmsdeeplink链接
};
await context.startAbility(want).then((data) => {
Logger.info(HWPayServiceImpl.TAG, "aggr start pay");
}).catch(e => {
Logger.error(HWPayServiceImpl.TAG, "aggr start pay error: " + e.message);
});
return;
}
throw new Error('context or uri CANNOT be undefined or null');
}public boolean shouldOverrideUrlLoading(WebView view, String url) {
Log.d(TAG, "WebView shouldOverrideUrlLoading" + url);
try {
if (url.startsWith("hms:")) {
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(intent);
return true;
}
} catch (Exception e) {
return true;
}
view.loadUrl(url);
return true;
}根据h5Url处理中通过不同参数拼接处理指定支付环境后,浏览器环境h5Url具体加载效果如下:
| 指定微信支付 | 指定华为支付(用户需提前登录华为账号并验证支付密码) | 未指定支付方式 | |
|---|---|---|---|
|
|
|
|
|
| 直接拉起华为支付微信小程序支付。 | 用户手机上存在华为钱包,则直接拉起华为钱包支付。 | 用户手机上不存在华为钱包,则基于H5收银台完成支付 | 如果同时支持华为支付和微信间联支付,未指定支付方式时则显示H5聚合收银台,让用户选择对应方式支付。 |
| 微信扫码支付 | 华为钱包扫码支付 |
|---|---|
|
|
|
|
|
结果信息为:result={resultCode:xxx; resultDesc:xxx, 其他业务参数信息}。
结果含义如下:
| resultCode | resultDesc | 说明 |
|---|---|---|
| 000000 | success | SUCCESS(成功) |
| -1 | common error | FAIL(通用错误) |
| 30000 | user cancel payment | CANCEL(用户取消支付) |