H5调起原生支付宝支付
闵超 2019-08-20 23:12:54 H5
# H5调起原生支付宝支付
# H5前端代码
//signStr 支付宝签名字符串
if (Until.isAndroid()) {
if (!!window.xxApp) {
//安卓传参不能是object,顺序约定好不能传错 by minchao
window.xxApp.xxAliPay(signStr);
} else {
Toast("请在XX-APP中打开");
}
}
if (Until.isiOS()) {
if (typeof xxAliPay === "function") {
let obj= {
signStr:signStr
};
xxAliPay(obj);
} else {
Toast("请在XX-APP中打开");
}
}
# 原生端
# 安卓端代码
webView.addJavascriptInterface(new JsInterface(), "xxApp");
public class JsInterface {
@JavascriptInterface
public void xxAliPay(String s) {
if (Helpers.isEmpty(s)) {
showSafeToast("获取支付信息异常");
} else {
Runnable payRunnable = new Runnable() {
@Override
public void run() {
PayTask alipay = new PayTask(WebViewNoHeadActivity.this);
Map<String, String> result = alipay.payV2(s, true);
Message msg = new Message();
msg.what = SDK_PAY_FLAG;
msg.obj = result;
mHandler.sendMessage(msg);
}
};
// 必须异步调用
Thread payThread = new Thread(payRunnable);
payThread.start();
}
}
}
# iOS端代码
//h5交互部分
- (void)javaScriptHandle{
JSContext *context = [self.HtmlWebView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
WEAKSELF
...
context[@"xxAliPay"] = ^(){
dispatch_async(dispatch_get_main_queue(), ^{
NSArray *args = [JSContext currentArguments];
for (JSValue *jsVal in args) {
weakSelf_SC.payPara = jsVal.toObject;
}
[weakSelf_SC aliPay];
});
};
...
}
注:原生端的具体代码的方法,咱也没全懂,咱也没敢问啊!总之先记着,将来迟早会用到的