在Android开发中支付很常见,但是要实现原生调起H5支付很少,之前做App支付也踩过不少坑,App调起H5支付同样坑很多,这里说说App调起H5支付的实现方式和问题。

1.App中调起WebView页面的微信和支付宝支付的方法如下:

2.webView.setWebViewClient(new WebViewClient() {
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
}

@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
}

@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
reloadUrl = url;
if (url == null) {
return false;
}
//调起支付宝支付
if (url.startsWith("alipays:") || url.startsWith("alipay")) {
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(intent);
return true;
}
//调起微信支付
if (url.startsWith("weixin://wap/pay?")) {
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setData(Uri.parse(url));
startActivity(intent);
return true;
} else {
Map<String, String> extraHeaders = new HashMap<>();
extraHeaders.put("Referer", "");//在商户平台设置的微信支付Referer参数
view.loadUrl(url, extraHeaders);
}
return true;
}

@Override
public void onReceivedError(WebView view, int errorCode,
String description, String failingUrl) {
super.onReceivedError(view, errorCode, description, failingUrl);
}

@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
super.onReceivedSslError(view, handler, error);
handler.proceed();
}
});

3.如下图所示,url就是一个h5页面,本来H5页面直接调起H5支付没有一点毛病,和App支付调起微信和支付宝客户端一样,但是放到App中,它会先跳转到浏览器打开h5页面,在拉起微信和支付宝客户端,这样体验很不友好,而且h5支付后在返回发现选择支付宝成功支付后在选择微信支付调起的还是支付宝客户端,而且界面白屏,微信客户端拉起失败,界面也不刷新.

4.查找资料后,发现在WebView中可以直接调起h5支付客户端,方法如下:

5.使用以上方法发现微信和支付宝H5支付客户端确实调起来了,但是使用微信支付时又遇到一个问题,提示商家参数格式错误,请联系商家解决,错误信息截图如下:

6.我们发现h5 官方页面,有这样一个说明。

根据官方文档说明在调用H5支付时需要在微信商户平台配置商户提交域名,但是打开商户平台,发现域名是配置了的,而且h5也配置了,h5直接调起支付是没有问题的,查找资料后,找到以下解决办法在App的WebView作如下配置:

Map<String, String> extraHeaders = new HashMap<>();
extraHeaders.put("Referer", "");//在商户平台设置的微信支付Referer参数

7.走到这里你会发现微信和支付宝支付都能成功调起并支付,但是你以为这样就结束了?小伙子你还是太年轻,支付宝支付成功后会有回调界面,微信支付成功后是没有的,需要自己去手动刷新,不知道细心的朋友们也没有发现上面的loadurl,就是我为了在微信支付成功来刷新界面添加的变量.

解决微信支付刷新界面的方法如下:使用webView.reload()方法即可

判断loadurl不为空且loadurl调起的页面包含微信支付,才使用webView.reload()刷新界面.

最后,有的小伙伴可能会问,既然有App支付 ,为啥要在App中使用H5支付,这不是多此一举,浪费资源吗???其实我也不想,本来一天不到就接完App支付,但是换成h5支付后各种坑,当时真的想砸键盘。。。。。因为公司有需求把支付做成SDK提供给第三方客户使用,而微信支付一个App只能绑定一个包名,为了客户不发生冲突,才想到了此方案,虽然一波三折,但终究解决了.以此记录一下,希望能帮助到有类似需求和问题的同学,祝大家工作顺利,升职加薪,生活美满~~

Android支付SDK开发在App中调起H5支付的实现相关推荐

  1. Android开发:app工程集成银联支付功能(客户端)

    Android开发:app工程集成银联支付功能(客户端) email:chentravelling@163.com 上一篇博文完成了服务器端的集成,可参考: Android开发:app工程集成银联支付 ...

  2. 个人开发者如何在App中调起微信支付

    主要内容   关于企业资质开发者申请的微信支付,如何调起微信支付的,官方文档已经很详细,且百度上也有很多相关资料,这里不再介绍.本篇主要讲的是个人资质的支付如何在自己的App中调起微信支付. 演示 实 ...

  3. 大疆DJI Android Mobile SDK 开发问题汇总

    大疆DJI Android Mobile SDK 开发问题汇总 前言 SDK Api ANR(调用DJISDKManager.getInstance() 死锁.无响应) ClassNotFoundEx ...

  4. android开发导航sdk,Android导航SDK开发指南(26页)-原创力文档

    Android 导航SDK 开发指南 一.概述 Android 导航SDK 目前为V1.1 版本,以.jar 形式提供,请广大开发者使用SDK 前务必 在官网申请key,以便全部功能顺利使用. And ...

  5. h5支付不能打开支付宝 ios_iOS 解决微信h5支付,支付宝h5支付无法直接返回APP的问题...

    由于公司的业务需要,为了节省申请开通微信支付的时间和人力,公司决定使用微信h5支付.这样即节省了时间,同时以后所有的APP都能使用h5支付,既方便又快捷. 但是真正做的时候问题来了,当你支付成功之后或 ...

  6. [ecshop 支付接口 开发调试] ecshop 需要做一些支付接口,和接口升级,经常需要支付返回

    [ecshop 支付接口 开发调试] ecshop 需要做一些支付接口,和接口升级,经常需要支付返回 1.经验1 直接建立一个支付页面 /** * ecshop 支付接口开发 测试 * ======= ...

  7. 支付宝sdk 参数 转网页url(h5 支付)

    简介 支付宝sdk 参数 转网页url(h5 支付) 从安卓sdk 提取出参数 转换成url 通过落地页做成可以h5 支付也可以网页唤起h5支付 欢迎大家一起探讨 不足之处指出 注:179844858 ...

  8. Android开发:app工程集成银联支付功能(服务器端)

    一功能描述 二实现过程 1下载银联支付SDK和Demo 1银联商家服务地址httpsopenunionpaycomajwebindex 2下载的文件如下 2集成过程 1先试官方Demo 2集成到自己的 ...

  9. Android入门教程五之使用AndroidStudio+SDK开发安卓APP

    <!-- Android 基础入门教程 end --><div class="col middle-column big-middle-column">&l ...

最新文章

  1. python为什么找不到csv文件_python读写csv文件的方法(还没试,先记录一下)
  2. Adaboost算法原理以及matlab代码实现(超详细)
  3. What can Lines3D Class do?
  4. CF662C Binary Table(FWT_XOR卷积)
  5. 【Leetcode819】最常见的单词
  6. 去哪儿-10-city-ajax
  7. 【Java】Java中的在Linux和Mac以及Windows上使用File.separator的坑
  8. python字典函数_python-字典常用函数
  9. Android开发笔记(三十七)按钮类控件
  10. mybatis使用和分析
  11. 年末回想 ---- 小步快跑
  12. 平面变压器的设计(翻译)(4)
  13. 3DES加密算法原理
  14. 2021年1月6日运行Python脚本的一些说明与教程
  15. 避免使用宏#define定义常量
  16. 使用 HTML CSS 编辑静态网页
  17. 25个关于excel工作表的操作
  18. SmartX联手沃云打造全新超融合公有云背后技术解析
  19. 2021高考辽宁英语成绩查询,2021年辽宁高考英语满分多少分?
  20. Neat Video Pro插件如何在Flame 2020中使用

热门文章

  1. ORM框架介绍——什么是ORM框架?
  2. 电脑右下角扬声器(小喇叭)图标打红叉
  3. BMVC 2022 (东京大学)仅需90K参数!实时完成低光增强, 曝光矫正的超轻量级Transformer网络IAT,已开源...
  4. 设计模式 | 策略模式及典型应用
  5. 服务器硬件维保作用,服务器硬件管理和维护方法
  6. C语言时间函数time_t格式化打印...
  7. 基于javaweb+jsp的服装店门店信息管理系统(JavaWeb JSP MySQL Servlet SSM SpringBoot Layui Ajax)
  8. 酞菁钴COPC,酞菁钴(II),cAS:3317-67-7
  9. SDK应用二:S32DS开发环境使用SDK编辑工程代码实例(S32K142配置时钟,中断,GPIO)
  10. 盘点国内外项目协同管理软件:SaaS和定制化成趋势