集成h5支付也很久了,记录一下,其实h5支付的话没有什么比较难受的操作,我觉得 原生 小程序 h5 这三种支付h5是最简单的,好了直接上干货吧,我们调起微信支付之前肯定是拿到一个商品的ServiceId或者其他的信息去请求接口,用来获取激活调起微信支付的参数,送h5也是一样的只不过h5调起这个接口返回的是一个链接,我们用这个链接用webView就可以打开微信h5支付,ok,下面是代码,你的任务就是跟着我一步步的来就可以了:

在接入H5微信支付时,如果是APP里调起H5支付,需要在webview中手动设置referer,如果不设置的话就会出现以下问题,如下

所以一定要设置,至于你说这个授权地址是什么的话,其实刚开始的时候我也纠结过这个问题,后来想了一下这个域名咱们前端最好不要写死,至于为什么,因为如果你所在的公司产品很多,微信支付很多的话,当你这个正在使用的微信支付被封号的话,可以后台直接切换这个授权的域名,就算你们产品少我也是建议直接从后台获取:

  • Map extraHeaders = new HashMap();
    extraHeaders.put("Referer", "商户申请H5时提交的授权域名");//例如 http://www.baidu.com
    webView.loadUrl(targetUrl, extraHeaders);//targetUrl为微信下单地址

接下来我就不多说了直接上代码了:

webview:这个是WebView布局你可以写在PayActivity里面gone掉,效果就是调起微信支付的时候不会跳转到另一个Activity不会展示过程,只会在完成之后直接调起:

weChatInfo.getReferer() : 就是商户申请h5时提交的授权域名
weChatInfo.getWebUrl()  : 这个是用来调起h5支付的URL
webView.getSettings().setJavaScriptEnabled(true);//支持JS
webView.getSettings().setDomStorageEnabled(true);//解决显示不全的问题if (TextUtils.isEmpty(weChatInfo.getReferer())) {ToastUtil.showLongToast(PayActivity.this, "网络不给力~");} else if (TextUtils.isEmpty(weChatInfo.getWebUrl())) {ToastUtil.showLongToast(PayActivity.this, "网络不给力~");}initdata(weChatInfo.getReferer(), weChatInfo.getWebUrl());
  • 然后是initdata方法
//调起微信h5支付private void initdata(final String referer, String weburl) {Map<String, String> extraHeaders = new HashMap<>();extraHeaders.put("Referer", referer);webView.loadUrl(weburl, extraHeaders);webView.setWebViewClient(new WebViewClient() {@Overridepublic boolean shouldOverrideUrlLoading(WebView view, String url) {
//                return super.shouldOverrideUrlLoading(view, url);if (url == null) return false;try {//弹窗initdialog();alertDialog.show();WindowManager m = PayActivity.this.getWindowManager();Display d = m.getDefaultDisplay();  //为获取屏幕宽、高android.view.WindowManager.LayoutParams p = alertDialog.getWindow().getAttributes();  //获取对话框当前的参数值//p.height = (int) (d.getHeight() * 0.3);   //高度设置为屏幕的0.3p.width = (int) (d.getWidth() * 0.75);    //宽度设置为屏幕的0.5alertDialog.getWindow().setAttributes(p);     //设置生效if (url.startsWith("weixin://wap/pay?")) {Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));startActivity(intent);return true;} else if (url.startsWith("https://wx.tenpay.com")) {Map<String, String> extraHeaders = new HashMap<>();extraHeaders.put("Referer", referer);view.loadUrl(url, extraHeaders);return true;}} catch (Exception e) {//防止crash (如果手机上没有安装处理某个scheme开头的url的APP, 会导致crash)return true;//没有安装该app时,返回true,表示拦截自定义链接,但不跳转,避免弹出上面的错误页面}// 在APP内部打开链接,不要调用系统浏览器view.loadUrl(url);return true;}@Overridepublic void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {handler.proceed();}});}
  • initdialog
//微信h5支付弹窗private void initdialog() {AlertDialog.Builder dialog = new AlertDialog.Builder(PayActivity.this, R.style.AlertDialog);View inflate = LayoutInflater.from(PayActivity.this).inflate(R.layout.dialog_wechat_h5_pay, null);tv_wechat_success = (TextView) inflate.findViewById(R.id.tv_wechat_success);tv_wechat_failure = (TextView) inflate.findViewById(R.id.tv_wechat_failure);tv_wechat_success.setOnClickListener(this);tv_wechat_failure.setOnClickListener(this);dialog.setView(inflate);alertDialog = dialog.create();alertDialog.setCancelable(true);alertDialog.setCanceledOnTouchOutside(false);}
  • 全局的变量
    @BindView(R.id.wv_pay_h5)WebView webView;    AlertDialog alertDialog;private TextView tv_wechat_success;private TextView tv_wechat_failure;
  • dialog_wechat_h5_pay.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="300dp"android:orientation="vertical"android:gravity="center_horizontal"android:background="@drawable/round_white"android:layout_height="wrap_content"><TextViewandroid:gravity="center"android:padding="15dp"android:textSize="15dp"android:text="请确认微信支付是否成功"android:layout_width="match_parent"android:layout_height="wrap_content" /><Viewandroid:background="#3333"android:layout_width="match_parent"android:layout_height="1dp"/><TextViewandroid:gravity="center"android:id="@+id/tv_wechat_success"android:textColor="#FC576C"android:padding="15dp"android:textSize="15dp"android:text="已完成支付"android:layout_width="match_parent"android:layout_height="wrap_content" /><Viewandroid:background="#3333"android:layout_width="match_parent"android:layout_height="1dp"/><TextViewandroid:gravity="center"android:id="@+id/tv_wechat_failure"android:textColor="#8333"android:textSize="15dp"android:text="支付遇到问题,重新支付"android:padding="15dp"android:layout_width="match_parent"android:layout_height="wrap_content" /></LinearLayout>

效果就是这个样子,具体自己请求的时候查看

  • activity_pay.xml (webView)
    <WebViewandroid:visibility="gone"android:id="@+id/wv_pay_h5"android:layout_width="wrap_content"android:layout_height="wrap_content"/>
  • AlertDialog.Builder dialog = new AlertDialog.Builder(PayActivity.this, R.style.AlertDialog);
    --> R.style.AlertDialog

在 res --> values --> styles.xml

<style name="AlertDialog" parent="Base.Theme.AppCompat.Light.Dialog"><!-- 这里设置背景为透明,为了隐藏边框 --><item name="android:windowBackground">@android:color/transparent</item><item name="android:windowNoTitle">true</item><!-- 这里是修改顶部标题背景颜色,具体颜色自己定,可以是图片 --><item name="android:topDark">#fff</item><!-- 这里是修改内容区域背景颜色 --><item name="android:centerDark">#fff</item><item name="android:windowIsTranslucent">true</item><!--<item name="android:windowAnimationStyle">@+android:style/Animation.Translucent</item>--></style>

到这里h5支付就算是集成完成了,需要的小伙伴可以去集成一下,应该没有什么缺少的文件了,如果有欢迎大家在下面留言然后我再补全,希望可以帮到你,避免踩坑,谢谢

Android 集成微信h5支付相关推荐

  1. Android使用微信H5支付

    有一种奇特的需求叫做,在app上使用h5支付.这个实际上是有优势的,比如有多个app要做微信支付,只要h5做一套就可以全部通用.网上搜了一圈,讲的有很多,但是都不太细致,有些坑没有说.下面是我的实现: ...

  2. Android 应用内微信 H5 支付

    一般情况下,要实现应用内支付接入 App 支付 SDK 即可满足业务需求,不过考虑到对于一些类似游戏中心的场景,更多是需要支持 H5 支付.相对微信来说,支付宝的对接简单完善很多,所以本篇文章主要说说 ...

  3. php根据浏览器调用支付_Android通过外部浏览器调用微信H5支付,Android+PHP详解

    看了好多关于讲解微信H5支付开发的文章,大多数都是通过微信内部浏览器来调用支付接口(其实就是公众号支付),可能是因为H5支付接口刚开放不久吧. 微信官方体验链接:http://wxpay.wxutil ...

  4. Android 微信h5支付

    一.需求背景 H5现在承载着很多的需求活动,要想在h5界面中做支付可以使用js调用原生的支付也可以使用Android webview做支付.微信H5支付官网 二.接入微信H5支付流程 1.用户在商户侧 ...

  5. Android集成微信支付

    Android集成微信支付 项目中集成第三方支付的功能,基本是我们app中经常用到的功能.今天先给大家讲一下微信支付的集成过程,重点只说一下代码部分.首先,你要到微信开发者平台注册账号,并创建你的应用 ...

  6. Android 集成微信支付和支付宝支付工具类

    Android 集成微信支付和支付宝支付工具类 1.前言 去年年底接了一个商城app 外包项目,里面尼涉及到 微信和支付宝支付,这里我整理出几个工具类,下面就和大家分享一下,废话不多说,下面我一步一步 ...

  7. Android中使用微信H5支付时支付结果刷新问题

    目录 前言: 1.查找资料: 2.解决问题的思路: a.核心逻辑就是截取回调地址,截图如下: b.设置isWxPay为true c.用户支付取消.失败.成功返回App时刷新界面: 3.通过以上几步解决 ...

  8. php微信h5支付demo,微信h5支付 demo-HTML5微信支付DEMO下载 最新版--pc6下载站

    在微信支付已经霸占了大部分人生活习惯的年代,一个不支持微信支付的商家都不好意思开店了,程序猿们可以下载查看HTML5微信支付DEMO来帮助您熟悉微信支付的代码,马上下载查看微信h5支付demo的内容吧 ...

  9. uniapp app内使用微信H5支付

    最近app项目中使用到了微信H5支付,新建webview页面直接跳转链接出现以下页面 查看文档后发现可能是缺少referer, orderbuyNow() {wxpay(this.formData). ...

  10. WebView调用微信H5支付

    相关文章:WebView启动支付宝客户端支付失败的解决办法 好长时间没有写博客了,感觉自己颓废了不少,这也取决于移动端逐渐趋于稳定的原因,随着自己公司业务的不断扩大,还是会遇到种种问题,最近手上一个需 ...

最新文章

  1. RT-thread内核之进程间通信
  2. 比Python 3.8快20%,Pyston v2正式发布
  3. 14岁上中科大、23岁博士毕业的袁岚峰,现在因“简单科普”上热搜,本人回应:科普和科研一样重要...
  4. 华北水利水电大学计算机研究生调剂,2018年华北水利水电大学硕士研究生相关专业接受调剂公告...
  5. java数字转大写 其他报异常_【踩坑系列】使用long类型处理金额,科学计数法导致金额转大写异常...
  6. Java URL传参中文乱码问题
  7. 19个必须知道的Visual Studio快捷键
  8. 用Python开始机器学习(4:KNN分类算法)
  9. Qt工作笔记-在ListWidget中多线程检索数据
  10. n维椭球体积公式_加速度计 椭球校准 (最小二乘法 椭球拟合)
  11. 会员注册审核状态更新计算
  12. 华三 h3c ACL配置
  13. uploadify上传文件Firefox浏览器上传失败解决方法
  14. IIS写入漏洞利用工具解析
  15. uniapp 修改tabBar图标大小和navigationBar字体大小
  16. 5种2D Attention整理(Non-Local、Criss-Cross、SE、CBAM、Dual-Attention)
  17. Toad oracle
  18. 由浅入深学java pdf_由浅入深学Java:基础、进阶与必做260题 PDF_IT教程网
  19. JVM系列之深入理解JVM(三)
  20. Android开发实现上一页,下一页显示内容

热门文章

  1. 南方CASS11.0.0.8下载安装教程附视频(日更)
  2. 【数学建模】论文模板和latex模板
  3. 通过两点求圆心的公式
  4. Inventor Pro v2008
  5. 库仑计DS2781通信失败
  6. VB连接ACCESS数据库
  7. Android 学习资料收集
  8. VS2010 上手案例---hello word
  9. 华为笔试题——去除重复的数字
  10. 与动易模板制作相关的几篇教程链接