H5接入说明

wifi浏览器H5支付页面接入(不是钥匙浏览器忽略)

前端js调用钥匙浏览器4.0的通用js Api,并发起如下代码调起支付

wifikey.startComponent({
                  action: "opensdk.intent.action.SEND_PAY_REQ_H5",                       
                  className: "class_name1",
                 //ext: "test1",
                 type: 0,
                 startactivityforresult: false,
                 callback: "paycb"
});

js代码示例:WebView浏览器H5支付页面接入

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
    <title>weifengzz</title>
    <script type="text/javascript">
        //ext数据是发送给钱包sdk的数据,可在html5页面调用接口获得,也可以是native传递给H5页面
        function callPay(var ext) {
            window.payApi.pay(ext);
        }
    </script>
</head>
<body>
<input type="button" name="" value="支付" onclick="javascript:callPay("{"appid":"1212"...}")"/>
</body>
</html>

webview页面代码示例

public class MainActivity extends AppCompatActivity {
    private WebView webView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        webView = (WebView) findViewById(R.id.wv);
        setWebView();
    }
    private void setWebView(){
        //允许JavaScript执行
        webView.getSettings().setJavaScriptEnabled(true);
        //向js传递对象
        webView.addJavascriptInterface(new callPay(),"payApi");
        //webView.loadUrl("file:///android_asset/index.html");
        //访问网页
        webView.loadUrl(url);
    }
     public final class callPay{
        @JavascriptInterface
        public void show(String ext) {
            //唤起支付Action
            Intent it = new Intent("opensdk.intent.action.SEND_PAY_REQ_H5");
            //ext:订单相关数据,ext具体数据请查看参数释义
            it.putString(ext);
            startActivity(it);
        }
    }
}

参数释义

参数名 说明
action 用于拉起支付流程的action,直接固化为“opensdk.intent.action.SEND_PAY_REQ_H5”
classname 不用填;
ext 发起的订单详细参数,以json串格式组织,ext释义见
type 固化整型0,表示激活客户端一个页面
startactivityforresult 固化为布尔型false
callback 支付结果回传给html页面,js被native调用的方法名,约定为“paycb”

ext字段是如下格式的json串

{
    "appId":"djgeiq978y933",
    "isRedpacket":"false",
    "mPackage":"com.test.example",
    "mchId":"93745648",
    "nonceStr":"UO132102976893460480",
    "prepayId":"WP0227110301132102976901849088",
    "scheme":"wifi://open/payResult",
    "sign":"EE9mq+n+3n+p8HvB5hV1SpUCl0GADI1jUTMfLr/rXTg/chigMU1O29yruqt966e3a4UAP02/MqZZL7WnVlJzx9vzRpz5uH/fMaiNUaxv5G9m0SdUCmAEh7I73XB04dlOX5Dx1z7jbdEaBICH5lsyLoMcSNU6jOXvEzKAKUnVYkXIAEeEd7Nw32v4lSKLLIOuZOIXDEPD1FxzSdENCVokVZW8Xe4FvrgSClSbiikuqebc1h8afURdk26AZZEklnMNMJftcM7Sbhs95EXIZKxfaKjqCl7TCxYO8EXpmr9BPhk5sD7fvYnpVLEjkp1DTF5L7JXE66PQR8vBd3izE2lsLQ==",
    "signType":"RSA",
    "timestamp":"1551236585",
    "tradeType":"APP"
}

ext json字段说明

字段名 变量 必填 类型 示例值 描述
appId appId String djgeiq978y933 应用ID
mchId 商户id String 703424 商户ID
nonceStr 随机字符串 String pWUVWVYWNQhnTXpQzhIzMGCwqBkZclzg 随机生成的字符
prepayId 预收单id String 预收单ID
sign 验签 String private String getSign(CashierRequest request) { StringBuilder sb = new StringBuilder(); silverReq = new SilverReq(); sb.append("appId=").append(request.getAppId()) .append("&mchId=").append(request.getMchId()) .append("&nonceStr=").append(request.getNonceStr()) .append("&prepayId=").append(request.getPrepayId()) .append("&signType=").append(request.getSignType()) //时间戳:当前时间的十位数字,精确到秒 .append("&timestamp=").append(request.getTimestamp()); return SignUtils.sign(sb.toString(), privateKey); }
signType 签名方法 String RSA 加密方式
tradeType 交易类型 String APP 交易类型
scheme 支付回调scheme String AndroidMainfest.xml配置的支付结果回调页面Data (例子:allinone://open/payResult 连信中: lx://open/payResult
mPackage 需要接收支付回调页的APP 包名 String 例如:接收支付结果页的包名为(com.app.package) 连信中: com.zenmen.palmchat
isRedpacket 是否是发红包 String "true"发红包 "false"支付
timestamp 时间戳 String 10位时间戳
ext 扩展字段
mext 扩展字段

通知H5支付结果(钥匙浏览器)

//Message 
Message.what = 128801;
Bundle bundle = new Bundle() 
//data 
//:{"errMsg":"","errCode":"0","ext":""}
bundle.putString("data", mData);
bundle.putString("callback", "paycb"); 
Message.obj = bundle ; 
WkApplication.getObsever().dispatch(Message);

通知H5支付结果(WebView浏览器)

//msg:支付信息

//code:支付返回码

payCallback(msg,code);

支付返回码

支付回调页面或者支付码
 if (getIntent() != null && getIntent().getExtras() != null) {
//返回码        
int retcode = getIntent().getIntExtra("retcode", -10);
//返回信息
String remsg = (String) getIntent().getExtras().get("retmsg");
//返回的业务数据(不一定有数据,请自行判断空指针)
String data = (String) getIntent().getExtras().get("data");
 }
返回码 返回信息 备注
0 商户支付成功 不可作为最终的支付凭证,需商户异步查询支付结果
-1 支付中 需商户异步去查询最终的支付结果
-2 支付失败 可能错误:sign签名错误,uhid不匹配,连尚校验失败,其他异常
-3 用户取消 无需处理,用户不支付
-4 支付不支持 暂时没有用到,无需处理
-5 支付结果未知 商户需要主动调用订单查询接口,查询支付状态
-6 登陆失败 支付时登陆状态异常
-7 查询用户信息失败 查询用户实名和银行卡信息失败
-8 查询收银台接口失败 查询收银台接口发生错误或者失败
-9 查询零钱或者绑卡信息失败 查询零钱或者绑卡信息失败