在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. 上传图片时出现Request 对象 错误 'ASP 0104 80004005'
  2. C# 最快的逐一打印斐波那契结果数列的算法
  3. WebService大讲堂之Axis2(7):将Spring的装配JavaBean发布成WebService
  4. Fragment实现的底部导航
  5. ML之xgboost:利用xgboost算法对Boston(波士顿房价)数据集【特征列分段→独热编码】进行回归预测(房价预测)+预测新数据得分
  6. BCrypt加密怎么存入数据库_第6天 密码加密与微服务鉴权JWT(下)
  7. 【每日一题】7月15日题目精讲—生日快乐
  8. Oracle入门(六)之用户操作
  9. ActionScript 3.0 组件!
  10. 公需科目必须学吗_专业技术人员一般公需科目学习的通知
  11. 当我不再依赖你的时候说说_不要依赖任何人说说 不要指望别人的经典话
  12. solaris10下允许root通过telnet远程登录
  13. AI算法工程师手册!
  14. threadlocal原理_Java并发编程——揭开ThreadLocal的面纱
  15. Excel·VBA考勤打卡记录统计出勤小时
  16. 传智播客风清扬视频------异常简述
  17. JAVA的Properties集合
  18. Citrix ADC 13.0 下载 百度网盘 按您的方式进行应用交付
  19. VS Code配置C/C++环境
  20. SQL Server Table Spool优化

热门文章

  1. CT、MRI、PET、PET-CT、PET-MRI的区别
  2. 美国密歇根州立大学ACTION Lab招收CV/ML方向全奖博士生
  3. 1.2 详解AQS-acquire方法
  4. 【408篇】C语言笔记-第十二章(单链表的删除考研真题实战)
  5. 宁盾新一代身份管理AM7联合第三方ZTNA,助力零信任办公敏捷落地
  6. mp4视频压缩怎么压缩到最小
  7. 模式识别和机器学习、数据挖掘的区别与联系
  8. 408计算机考研笔记!超级详细!!!
  9. [附源码]Python计算机毕业设计二手图书回收销售网站
  10. Attendance