微信小程序webview组件交互,内联h5页面并网页实现微信支付实现解析

作者:编程小石头 时间:2023-07-02 05:30:09 

前言

小程序支持webview以后,我们开发的好多h5页面,就可以直接在小程序里使用了,比如我们开发的微信商城,文章详情页,商品详情页,就可以开发一套,多处使用了。我们今天来讲一讲。在小程序的webview里实现微信支付功能。因为微信不允许在小程序的webview里直接调起微信支付。所以我们这节课就要涉及到小程序和webview的交互了。

老规矩先看效果。

因为这里涉及的东西比较多,录gif太多,没法上传,我就录制了一段视频出来。

https://v.qq.com/x/page/t0913iprnay.html

原理

先说下实现原理吧,实现原理就是我们在webview的h5页面里实现下单功能,然后点击支付按钮,我们点击支付按钮的时候会跳转到小程序页面,把订单号,订单总金额,传递到小程序里,然后小程序里使用订单号和订单金额去调起微信支付,实现付款,付款成功或者失败时都会有回调。我们再把对应的回调传递给webview,刷新webview里的订单和支付状态。

一,定义webview显示h5页面

关于webview的使用,我就不做讲解了,官方文档里写的很清楚,用起来也很简单。

https://developers.weixin.qq.com/miniprogram/dev/component/web-view.html

微信小程序webview组件交互,内联h5页面并网页实现微信支付实现解析

webview很简单,就是用一个webview组件,显示我们的网页。

二,定义h5页面

我这里启动一个本地服务器,用来展示一个简单的h5页面。

微信小程序webview组件交互,内联h5页面并网页实现微信支付实现解析

上图是我在浏览器里显示的效果。

接下来我们在小程序的webview里显示这个页面,也很简单,只需要把我们的src定义为我们的本地网页链接就可以了。

微信小程序webview组件交互,内联h5页面并网页实现微信支付实现解析

这里有一点需要注意

因为我们是本地链接,我们需要到开发者工具里把这一项给勾选。

微信小程序webview组件交互,内联h5页面并网页实现微信支付实现解析

三,来看下h5页面代码


<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>小程序内嵌webview</title>
 <style>
   .btn {
     font-size: 70px;
     color: red;
   }
 </style>
</head>
<body>
<h1>我是webview里的h5页面</h1>
<a id="desc" class="btn" onclick="jumpPay()">点击支付</a>

<script type="text/javascript" src="https://res.wx.qq.com/open/js/jweixin-1.3.2.js"></script>
<script>
 console.log(location.href);
 let payOk = getQueryVariable("payOk");
 console.log("payOk", payOk)
 if(payOk){//支付成功
   document.getElementById('desc').innerText="支持成功"
   document.getElementById('desc').style.color="green"
 }else{
   document.getElementById('desc').innerText="点击支付"
 }
 //获取url里携带的参数
 function getQueryVariable(variable) {
   var query = window.location.search.substring(1);
   var vars = query.split("&");
   for (var i = 0; i < vars.length; i++) {
     var pair = vars[i].split("=");
     if (pair[0] == variable) {
       return pair[1];
     }
   }
   return (false);
 }
 function jumpPay() {
   let orderId = Date.now();//这里用当前时间戳做订单号(后面使用你自己真实的订单号)
   let money = 1;//订单总金额(单位分)
   let payData = {orderId: orderId, money: money};

let payDataStr = JSON.stringify(payData);//因为要吧参数传递给小程序,所以这里需要转为字符串
   const url = `../wePay/wePay?payDataStr=${payDataStr}`;
   wx.miniProgram.navigateTo({
     url: url
   });
   // console.log("点击了去支付", url)
   console.log("点击了去支付")
 }
</script>
</body>
</html>

h5代码这里不做具体讲解,只简单说下。我们就是在点击支付按钮时,用当前时间戳做为订单号(因为订单号要保证唯一),然后传一个订单金额(单位分),这里节约起见,就传1分钱吧,花的是自己的钱,心疼。。。。

关键点说一下

1, 必须引入jweixin,才可以实现h5跳转小程序。

<script type="text/javascript" src="https://res.wx.qq.com/open/js/jweixin-1.3.2.js"></script>

2,跳转到小程序页面的方法


const url = `../wePay/wePay?payDataStr=${payDataStr}`;
wx.miniProgram.navigateTo({
  url: url
});

这里要和你小程序的页面保持一致。payDataStr是我们携带的参数

微信小程序webview组件交互,内联h5页面并网页实现微信支付实现解析

四,小程序支付页

来看下我们的小程序支付页

微信小程序webview组件交互,内联h5页面并网页实现微信支付实现解析

小程序支付页功能很简单,就是来接收我们h5传过订单号和订单金额。然后去调起微信支付,实现支付。支付成功和支付失败都有对应的回调。

微信小程序webview组件交互,内联h5页面并网页实现微信支付实现解析

支付我们这里实用的小程序云开发来实现的支付,核心代码只有10行。由于支付不是本节的重点,所以这里不做具体讲解。感

兴趣的同学可以去看我写的文章和我录的视频

小程序支付文章:https://www.jianshu.com/p/2b391df055a9

小程序支付视频:https://edu.csdn.net/course/play/25701/310742

下面把小程序接收参数和支付的完整代码贴出来给大家


Page({
//h5传过来的参数
onLoad: function(options) {
 console.log("webview传过来的参数", options)
 //字符串转对象
 let payData = JSON.parse(options.payDataStr)
 console.log("orderId", payData.orderId)

let that = this;
 wx.cloud.callFunction({
  name: "pay",
  data: {
   orderId: payData.orderId,
   money: payData.money
  },
  success(res) {
   console.log("获取成功", res)
   that.goPay(res.result);
  },
  fail(err) {
   console.log("获取失败", err)
  }
 })
},

//微信支付
goPay(payData) {
 wx.requestPayment({
  timeStamp: payData.timeStamp,
  nonceStr: payData.nonceStr,
  package: payData.package,
  signType: 'MD5',
  paySign: payData.paySign,
  success(res) {
   console.log("支付成功", res)
   //你可以在这里支付成功以后,再跳会webview页,并把支付成功状态传回去
   wx.navigateTo({
    url: '../webview/webview?payOk=true',
   })
  },
  fail(res) {
   console.log("支付失败", res)
  }
 })
}
})

代码里注释很清楚,这里有一点,就是我们支付成功后,需要告诉h5我们支付成功了,通知h5去刷新订单或者支付状态。

到这里我们就完整的实现了小程序webview展示h5页面,并且做到了h5和小程序的交互,实现了小程序webview的支付功能。
是不是很简单呢。

源码地址

https://github.com/qiushi123/xiaochengxu_demos

微信小程序webview组件交互,内联h5页面并网页实现微信支付实现解析

来源:https://www.jianshu.com/p/d9bdceb2f648

标签:微信,小程序,webview,组件,交互,h5,支付
0
投稿

猜你喜欢

  • Go 防止 goroutine 泄露的方法

    2024-04-26 17:26:28
  • Python数据分析之 Matplotlib 饼图绘制

    2021-03-31 03:45:10
  • Pygame游戏开发之太空射击实战入门篇

    2023-07-17 23:12:42
  • 浅析Go语言编程当中映射和方法的基本使用

    2024-04-28 09:13:16
  • 用户体验的另一种认识

    2007-10-25 12:36:00
  • 2款Python内存检测工具介绍和使用方法

    2022-10-09 06:13:10
  • MySQL5创建存储过程的示例

    2024-01-12 17:45:35
  • SQL中日期与字符串互相转换操作实例

    2024-01-27 15:41:56
  • Pycharm2020.1安装无法启动问题即设置中文插件的方法

    2021-02-03 19:28:29
  • python脚本调用iftop 统计业务应用流量的思路详解

    2022-02-07 02:37:12
  • Python调用高德API实现批量地址转经纬度并写入表格的功能

    2023-12-26 03:22:20
  • Node.js 和 Python之间该选择哪个?

    2021-05-27 21:38:15
  • python用moviepy对视频进行简单的处理

    2023-08-03 07:02:15
  • MySQL主键约束和外键约束详解

    2024-01-18 08:10:41
  • JavaScript模拟实现自由落体效果

    2024-05-02 16:19:47
  • Python如何利用pandas读取csv数据并绘图

    2022-08-26 22:05:25
  • Python制作CSDN免积分下载器

    2021-12-25 03:46:35
  • tensorflow-gpu安装的常见问题及解决方案

    2021-08-18 11:31:18
  • 实例:arguments.callee的应用

    2009-04-20 12:38:00
  • Django restframework 源码分析之认证详解

    2021-08-15 12:03:40
  • asp之家 网络编程 m.aspxhome.com