钱包提供的Huawei Pay线上支付有三种对接方式,分别是:
1)APP支付:商户通过在移动端应用APP集成SDK接口形式接入;
2)手机网页支付(WAP支付):手机WAP支付产品是提供给商户的移动终端客户端或网页用来支付的产品,采用手机网页(包括WAP、WEB手机网页网)方式实现无卡支付的产品;
3)H5支付:商户H5接口通过JS形式接入。
主要提供接口包含查询Huawei Pay状态和调起支付两个接口。
Huawei Pay线上支付是手机端的在线支付方式,可以根据需要采用对应的支付方式接入,之后根据目录选择需要的接入方式。
商户使用Huawei Pay线上支付可以和银联对接生成订单,商户把订单信息传给华为钱包,由钱包调起银联插件完成支付,SDK接口和JS接口会直接返回结果给调用方,而WAP调用方式是银联服务器将支付结果通知第三方服务器,第三方WAP页面到第三方服务器查询支付结果。
查询钱包状态,返回0表示支持Huawei Pay线上支付
原型 | Int getStatus(String event , IHwResultCallBack callback) |
功能 | 用于查询是否支持Huawei Pay线上支付 |
返回值 | 0 为成功,其他值为失败(用于判断是否正确执行了该操作) |
参考调用 | HwOpenSdkTask.getStatus(String event, IHwResultCallBack callback) |
拉起Huawei Pay线上支付
原型 | startHuawei Pay(Map <String,Object>params, IHwResultCallBack callback) |
功能 | 用于拉起Huawei Pay线上支付 |
返回值 | 0 为成功,其他值为失败 |
参考调用 | HwOpenSdkTask. startHuawei Pay (Map <String,Object>params,IHwResultCallBack callback) |
函数getStatus入参
名称 | 类型 | 描述 | 可选 |
event | String | “ONLINEPAY” | M |
callback | IHwResultCallBack | Callback中提供onResult回调方法,里面有错误码和错误码描述等信息 | M |
函数startHuawei Pay入参
名称 | 类型 | 描述 | 可选 |
params | Map <String,Object> | 钱包服务器定义的payInfo,根据文档中的参数通过key,value的形式传入map中 | M |
callback | IHwResultCallBack | Callback中提供onResult回调方法,里面有错误码和错误码描述等信息 | M |
Map <String,Object>params对象说明(入参需要使用AES方式加密)
名称 | 类型 | 描述 | 可选 |
orderInfo | String | 银联订单号 | M |
seType | String | 银联生产环境server mode(“04”) | M |
mode | String | 银联支付方式 (“00”) | M |
isStartUnionPay | String | 是否使用StartUnionPay接口拉起Huawei Pay,用来区分华为IAP收银台调用 (“true”) | M |
int resultCode说明
错误码 | 含义 | 说明 | getStatus | startHuawei Pay |
0 | 成功 | 获取状态成功或者支付成功 | 使用 | 使用 |
2 | 不支持Huawei Pay | 管理台机型未配置 | 使用 | 不使用 |
银联插件未安装 | 使用 | 不使用 | ||
3 | 条件不满足 | 具体错误见下表中errorCode | 使用errorCode(10001~10004) | 使用errorCode (10004,10006) |
4 | 支付不成功 | 具体错误见下表中errorCode(10007~10008) | 不使用 | 使用 |
5 | 查询支付结果失败 | 具体错误透传。Bundle中通过result_server_code(int)获取接口错误码,result_server_desc(String) 获取接口错误描述 | 不使用 | 使用 |
999 | 其他未知错误 | 使用 | 使用 |
Bundle data说明:
Bundle 获取错误信息的key:resultStr 。取出来的是一个json具体如:{"errors":
[
{"errorDesc":"not set password","errorCode":"10002"},
{"errorDesc":"no available card","errorCode":"10003"}
]
}下表是对errorCode的表述:
错误码(int) | 含义 | 说明 |
10001 | 用户未登录 | RESULT_ERROR_CODE_NOT_LOGIN |
10002 | 未设置支付密码 | RESULT_ERROR_CODE_NO_PAYPASS |
10003 | 无可用银行卡 | RESULT_ERROR_CODE_NO_CARD |
10004 | 钱包未安装或者版本不正确 | RESULT_ERROR_CODE_BIND_SERVICE_FAIL |
10006 | payInfo参数为空 | RESULT_ERROR_CODE_PARAMS_NULL |
10007 | 支付取消 | RESULT_ERROR_CODE_PAY_CANCEL |
10008 | 支付失败 | RESULT_ERROR_CODE_PAY_FAIL |
resultCode除了返回0是支付成功,其他的返回均表示失败,支付不成功和查询支付失败都会返回具体的原因,从bundle中的errorDesc和errorCode中获取。
请将下面的jar复制并放入自己的工程中,需要注意Sdk对外的接口都是异步,回调都是通过CallBack来实现,jar包见本文结尾附件。
getStatus调用代码如下:
HwOpenSdkTask task = new HwOpenSdkTask(this);
task.getStatus(“ONLINEPAY”, new IHwResultCallBack()
{
@Override
public void onResult(int resultCode, Bundle data)
{
Log.e(TAG, "resultCode:" + resultCode);
}
});
startHuawei Pay调用代码如下:
HwOpenSdkTask task = new HwOpenSdkTask(this);
task.startHuawei Pay(payInfo, new IHwResultCallBack()
{
@Override
public void onResult(int resultCode, Bundle data)
{
Log.e(TAG, "resultCode:" + resultCode);
}
});
第三方Wap页面通过Schema调用钱包APP,将订单信息传给钱包APP,携带订单号、合作伙伴ID、签名信息。
Schema定义如下:
financeclient://com.huawei.wallet/thirdpayservice?action="thirdpayservice"¶ms={"PartnerID":"xxxx";"TN":"xxxx";"SignData":"xxxx"}
名称 | 类型 | 描述 | 可选 |
PartnerID | String | 合作伙伴ID | M |
TN | String | 订单号 | M |
SignData | String | 签名信息 | M |
第三方的传入参数的规则为:
签名算法:SHA256WithRSA
SignData签名值生成方法:params内容里除了SignData外其他字段,每一个Key值按ASCII码的增序排序,若遇到相同首字母,则看第二个字母,以此类推。排序完成之后,再把所有数组值以“&”字符连接起来,如: PartnerID=123&TN=234,使用商户RSA私钥将转换后的明文生成签名信息后,将byte[]签名结果按base64编码后设置为SignData的值。
schema中的params值:json串再按照Uri.encode进行编码后赋值为params值。
第三方WAP通过钱包APP验证服务器的响应信息合法后,调用银联控件进行支付,银联服务器将支付结果通知第三方服务器,第三方WAP页面到第三方服务器查询支付结果。
注意:
1)第三方WAP页面发送请求到钱包APP后,钱包APP不会返回结果给第三方WAP页面,如果钱包APP在发送请求给银联之前有异常,比如未打开NFC等,钱包直接给出对应的提示;
2)成功支付的前提条件:钱包账户登录成功、打开NFC开关(仅支持Huawei Pay的手机需要,不支持Huawei Pay手机不需要)、已设置钱包支付密码、有可用银行卡、已安装银联插件等。
查询钱包状态,返回true表示支持Huawei Pay线上支付:
原型 | isNfcEnable() |
功能 | 用于查询是否支持Huawei Pay支付 |
返回值 | true为支持,false为不支持 |
参考调用 | boolean isSupport = hiWalletIsNfcEnableAPI. isNfcEnable(); |
拉起Huawei Pay线上支付:
原型 | startPay(String tn, String url) |
功能 | 用于拉起Huawei Pay线上支付 |
返回值 | 无 |
参考调用 | hiWalletCheckStatusPayAPI.startPay(String tn, String url) |
函数isNfcEnable没有入参,直接调用会返回结果,true表示支持,false表示不支持。
函数startPay入参说明如下:
名称 | 类型 | 描述 | 可选 |
tn | String | 银联订单号 | M |
url | String | 成功后跳转的url | M |
isNfcEnable调用代码如下:
hiWalletIsNfcEnableAPI. isNfcEnable();
startPay调用代码如下:
hiWalletCheckStatusPayAPI.startPay(String tn, String url);
功能概述 | 接口原型 | 功能描述 |
获取状态 | public void getStatus(final String event, final IHwResultCallBack iHwResultCallBack) | 获取Huawei Pay支付状态 |
开启支付 | public void startHuawei Pay(final Map<String, Object> params, final IHwResultCallBack iHwResultCallBack) | 启动Huawei Pay线上支付 |
通过getStatus可以获取Huawei Pay支付状态,通过startHuawei Pay可以启动Huawei Pay线上支付。这两个接口可以帮助第三方通过API的方式接入钱包线上支付。
原型 | Int getStatus(String event , IHwResultCallBack callback) | ||
功能 | 用于查询是否支持Huawei Pay支付 | ||
参数 | 参数类型、名称 | 描述 | 可选 |
String event | ONLINEPAY代表获取Huawei Pay支付状态 | M | |
IHwResultCallBack callback | Callback中提供onResult回调方法,里面有错误码和错误码描述等信息 | M | |
返回值 | 0 为成功,其他值为失败(用于判断是否正确执行了该操作) | ||
参考调用 | HwOpenSdkTask.getStatus(String event, IHwResultCallBack callback) | ||
IHwResultCallBack中回调结果resultCode:
错误码 | 含义 | 说明 |
0 | 成功 | 获取状态成功或者支付成功 |
2 | 不支持Huawei Pay | 管理台机型未配置或者未安装钱包app等 |
3 | 条件不满足 | 具体错误下面的错误码参考,使用errorCode(10001~10004) |
999 | 其他未知错误 |
原型 | startHuawei Pay(Map <String,Object>params, IHwResultCallBack callback) | ||
功能 | 用于拉起Huawei Pay线上支付 | ||
参数 | 参数类型、名称 | 描述 | 可选 |
Map <String,Object>params | 钱包服务器定义的payInfo,根据文档中的参数通过key,value 的形式传入map中 | M | |
IHwResultCallBack callback | Callback中提供onResult回调方法,里面有错误码和错误码描述等信息 | M | |
返回值 | 0 为成功,其他值为失败 | ||
参考调用 | HwOpenSdkTask. startHuawei Pay (Map <String,Object>params, IHwResultCallBack callback) | ||
IHwResultCallBack中回调结果resultCode:
错误码 | 含义 | 说明 |
0 | 成功 | 获取状态成功或者支付成功 |
3 | 条件不满足 | 具体错误见下表中errorCode(10004,10006) |
4 | 支付不成功 | 具体错误见下表中errorCode(10007~10008) |
5 | 获取订单失败 | 具体错误透传。Bundle中通过result_server_code(int)获取接口错误码, result_server_desc(String) 获取接口错误描述 |
6 | 查询支付结果失败 | 具体错误透传。Bundle中通过result_server_code(int)获取接口错误码, result_server_desc(String) 获取接口错误描述 |
999 | 其他未知错误 |
Bundle data说明:
Bundle 获取错误信息的key:resultStr 。取出来的是一个json具体如:{"errors":
[
{"errorDesc":"not set password","errorCode":"10002"},
{"errorDesc":"no available card","errorCode":"10003"}
]
}下表是对errorCode的表述,具体的errorDesc会根据钱包云测返回的进行详细描述,到时请参考具体原因,如下含义是大致的问题原因:
错误码(int) | 含义 | 说明 |
10001 | 用户未登录 | RESULT_ERROR_CODE_NOT_LOGIN |
10002 | 没有设置支付密码 | RESULT_ERROR_CODE_NO_PAYPASS |
10003 | 没有可用银行卡 | RESULT_ERROR_CODE_NO_CARD |
10004 | 钱包未安装或者版本不正确 | RESULT_ERROR_CODE_BIND_SERVICE_FAIL |
10006 | payInfo参数为空 | RESULT_ERROR_CODE_PARAMS_NULL |
10007 | 支付取消 | RESULT_ERROR_CODE_PAY_CANCEL |
10008 | 支付失败 | RESULT_ERROR_CODE_PAY_FAIL |
20001 | 华为云测对商户验签失败 | ERRORDESC_OPEN_CREATE_PAY_REQUEST_FAIL |
20002 | 华为端测验签失败 | ERRORCODE_OPEN_CREATE_PAY_CHECK_FAIL |
20003 | 没有可用支付方式 | ERRORCODE_OPEN_HAS_NO_PAY_METHOE |
20004 | 支付方式被主动取消 | ERRORCODE_OPEN_PAY_CANCEL_BY_USER |
点击下载:HuaweiPayTest.zip
Huawei Pay logo(含展示要求)
点击下载:Huawei Pay logo.zip