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

2023-10-26

前言

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

老规矩先看效果。

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

原理

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

一,定义webview显示h5页面

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

477052a3a94a202eb1d66daf8c1046ad.png

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

二,定义h5页面

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

8fcddec11a78912057b0ba2fcb8532f7.png

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

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

32d538e505781ce44f04910313605c7f.png

这里有一点需要注意

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

01960d9094504272714bf3abc684b1b0.png

三,来看下h5页面代码

小程序内嵌webview

.btn {

font-size: 70px;

color: red;

}

我是webview里的h5页面

点击支付

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("点击了去支付")

}

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

关键点说一下

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

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

const url = `../wePay/wePay?payDataStr=${payDataStr}`;

wx.miniProgram.navigateTo({

url: url

});

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

14871a9debccf91d1e7a2f0f49eb27a9.png

四,小程序支付页

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

d99ecf8f14b96751e746a37a41e7db61.png

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

49ac5a955f2f0bfe3ca93160f197c802.png

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

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

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

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的支付功能。

是不是很简单呢。

源码地址

d7bc6fe80dd41c8cf0e87354dd999017.png

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

小程序实现h5页面的微信支付php,微信小程序webview组件交互,内联h5页面并网页实现微信支付实现解析... 的相关文章

  • 将Go程序打包成Docker镜像

    将Go程序打包成Docker镜像 1 Go程序 hello go 文件的内容 package main import fmt func main fmt Println hello world 2 编写Dockerfile文件 FROM g
  • 练习:可迭代的对象和四个函数—— enumerate()、zip()、map()、filter()

    Python 官网 https www python org 这里 才 python 前沿 可惜是英文原版 所以 我要练习英文阅读 我的CSDN主页 My Python 学习个人备忘录 我的HOT博 自学并不是什么神秘的东西 一个人一辈子自
  • a标签的用法,base标签用法

    在前端开发中 经常会遇到 a标签 超链接 a 标签定义超链接 用于从一张页面链接到另一张页面 a 元素最重要的属性是 href 属性 它指示链接的目标 超链接 a href http www baid com target blank 跳转
  • Unity游戏项目_3D迷宫(游戏源码免费)

    目录 一 效果图 二 讲解 三 资源分享 总结 一 效果图 游戏开始界面 游戏画面 游戏结束界面 二 讲解 主要代码如下 1 链接代码 using System Collections using System Collections Ge
  • 浅拷贝与深拷贝

    目录 什么是拷贝 浅拷贝 前端浅拷贝方法 java后端深拷贝方法 深拷贝 前端深拷贝方法 java后端深拷贝方法 需要注意的事情 什么是拷贝 拷贝是指对对象进行复制的操作 是为了创建一个与原对象具有相同值的新对象 以便在不改变原对象的情况下
  • firewalld防火墙配置

    firewalld是自CentOS 7以来带有一个动态的 可定制而无需重新启动防火墙守护程序或服务 firewall cmd就是iptables nftable的前端 在CentOS 8中 nftables取代iptables成为默认的Li
  • python2安装模块出现Command “python setup.py egg_info“ failed with error code 1 in报错

    root jenkins 8f57b8495 4r8ws opt pip install gitpython 2 1 0 i https mirrors aliyun com pypi simple Collecting gitpython
  • Android开发:setAlpha()方法和常用RGB颜色表----颜色, r g b分量数值(int), 16进制表示 一一对应

    android有时候需要设置r g b分量的int值 如paint setARGB 255 127 255 212 就需要自己计算下分量的各个值 这里提供一个带有r g b分量的int型的颜色表 注意paint setAlpha 及pain
  • C++文件操作

    程序运行时产生的数据都属于临时数据 程序一旦运行结束都会被释放 通过 文件可以将数据持久化 C 中对文件操作需要包含头文件
  • windows服务器安全管理工具——IISCrypto

    查看服务器是否可以升为TLS1 2 网上有手动改注册表的方案 但这种方式万一误操作就不好了 所以还是建议使用软件修改 推荐下面这个软件 官方网站地址 https www nartac com Products IISCrypto 下载地址
  • cocos2dx 2.2.2 android 编译配置(不用cygwin)

    必备安装环境 java jdk安装以及环境变量 python运行环境 cocos2dx 2 2 2版本是通过python脚本创建的 脚本位置 cocos2d x 2 2 2 tools project creator create proj
  • MySQL的C/C++的API接口

    项目操作MySQL用的是现有的接口 是将MySQL语句封装在动态库里的 今天看了看最底层的情况 才发现操作MySQL不是用Qt 而是它自带的C API 之前没直接用过原生API 今天记录一下 代码连接数据库用的函数是MyConnection
  • 基于深度极限学习机的回归预测方法Matlab实现——附代码

    目录 摘要 极限学习机 变分自编码器 深度极限学习机 本文代码分享 摘要 本文使用深度极限学习进行数据回归预测 极限学习机 ELM 是当前一类非常热门的机器学习算法 被用来训练单隐层前馈神经网络 SLFN 本篇博文尽量通俗易懂地对极限学习机
  • VS2015 出现 解决方案加载失败的问题:解决方案

    完美解决 请移步到大神博客 https blog csdn net qq 31806049 article details 79728377
  • CSS实现悬浮按钮

    其实就是一个返回上一页或者返回到顶部的按钮 效果图 方案一 css实现 主要是利用css画三角实现 html代码 div class el backtop div class btn div div css代码 el backtop hov
  • <使用Python自定义生成简易二维码>——《Python项目实战》

    目录 1 问题导引 2 实现步骤 1 查找并安装第三方库qrcode 2 编写代码并嵌入内置信息 3 使用扫码工具读取信息 后记 由于作者水平有限 文章难免存在谬误之处 敬请读者斧正 俚语成篇 恳望指教 By 作者 新晓 故知 我的CSDN
  • xpath,sax,DOM解析xml文件(基础)

    基础 XML解析器有二类 分别是DOM和SAX DOM DOM解析器在解析XML文档时 会把文档中的所有元素 按照其出现的层次关系 解析成一个个Node对象 节点 很方便对文档进行遍历 对文档curd也特别方便 xml文档比较大的时候 do
  • APM:ELK 与 Prometheus

    同为监控应用的两个平台 Prometheus和ELK的对比 ELK和Prometheus的对比 Prometheus ELK 轻量 部署相对简单 较重 组件较多 部署起来较麻烦 使用灵活 需要使用者会灵活运用 上手较为简单 适用于短期使用
  • 宝塔+springboot+war部署无法启动,启动过慢

    第一次使用宝塔 从部署发布用了整整一天 我是用终端的形式自己配的环境跟tomcat 主要记录分享一下部署springboot启动不成功的一种情况 我这个情况是数据库ip问题 情况一 就这么一直卡着 情况二 tomcat logs里面就一直这

随机推荐

  • 【编程之路】面试必刷TOP101:二叉树系列(31-36,Python实现)

    面试必刷TOP101 二叉树系列 31 36 Python实现 31 对称的二叉树 小试牛刀 31 1 递归法 step 1 两种方向的前序遍历 同步过程中的当前两个节点 同为空 属于对称的范畴 step 2 当前两个节点只有一个为空或者节
  • 文件保存到服务器失败,Office 2010在服务器共享文件夹中保存文件失败

    服务器 Windows 2003简体中文标准版 with SP2 客户端 1 Windows XP Pro简体中文 with SP3 Office 2010 简体中文标准版 2 Windows XP Pro简体中文 with SP3 Off
  • ansible 命令只在一台主机上执行

  • Linux系统cannot create temp file for here-document: No space left on device解决方案

    登陆linux系统之后 使用tab自动补全快捷键的时候显示 cannot create temp file for here document No space left on device 原因 磁盘满了 不能创建临时文件 解决方法 逐级
  • 日语五十音图的记忆方法

    i 通汉字以 也念i 所以很好记的 呢 我每次看到它就会想起汉字 依 也就记住了 u 表示你发音时的样子 上嘴唇倾斜 下巴朝上撅 就发出了u 代表一个人 左胳膊好好的 右胳膊给生生截掉一半 他疼啊 在55的哭呢 念u e 通汉字衣 读音稍微
  • 修改覆铜形状

    作者还拥有个人公众号 会写一些感悟文章 知圈 二维码如下 欢迎扫描关注 关注后有作者微信 欢迎添加交流 先选中需要修改的内电层 一般是GND或者Power 然后选择shape里面的选择 如下图 然后选要修改的形状 会在边角出现小方框 拖动就
  • Linux操作系统——文件I/O相关函数

    文章目录 前言 一 文件I O的相关函数 1 open函数 创建或打开文件 2 close函数 关闭被打开的文件 3 read函数 从文件中读取数据存放到缓存区中 4 write函数 将数据写入文件中 5 lseek函数 更改文件读写位置
  • java:错误: 无法从静态上下文中引用非静态 变量 XXX。

    我们平时编译的时候可能会遇到这样的错误 我们写的是这样一个代码 class Person String name public static void show System out println name haha class a pu
  • Hive调用python脚本实现数据清洗、统计过程

    Hive的 TRANSFORM 关键字提供了在SQL中调用自写脚本的功能 本实例通过python脚本对电影数据进行清洗 帮助读者了解hive调用python脚本的整个流程 操作步骤 1 创建基表 CREATE TABLE u data us
  • 异步GET请求方法

    同步请求的用户体验不是很好 因此很多情况下我们会采用异步调用 iOS SDK也提供了异步请求的方法 而异步请求会 使用NSURLConnection委托协议NSURLConnectionDelegate 在请求的不同阶段 会回调委托 对象的
  • CVE-2021-35464: ForgeRock AM远程代码执行漏洞通告

    报告编号 B6 2021 063002 报告来源 360CERT 报告作者 360CERT 更新日期 2021 06 30 0x01 漏洞简述 2021年06月30日 360CERT监测发现portswigger发布了ForgeRock A
  • python中一些写法实例和小练习

    1 用户输入一个数字 并计算这个数字的平方根 关键 使用指数运算符 来计算该数的平方根 该程序只适用于正数 负数和复数可以使用以下的方式 说明 在使用print函数输出时 也可以对字符串内容进行格式化处理 上面print函数中的字符串 1
  • 深度卷积神经网络在目标检测中的进展

    作者 travelsea 链接 https zhuanlan zhihu com p 22045213 来源 知乎 近些年来 深度卷积神经网络 DCNN 在图像分类和识别上取得了很显著的提高 回顾从2014到2016这两年多的时间 先后涌现
  • 【无标题】

    1 直达软件 由直达国际的子公司上海直达软件有限公司出品 提供期货交易全套解决方案的专业软件 全球化交易平台 结算系统 风险管理平台及程序化交易等产品 为公司客户提供稳定 快速的交易系统 2 易盛极星 易盛极星 是由郑州商品交易所的全资子公
  • BigDecimal 如何在一个区间的比较

    BigDecimal 如何在一个区间的比较 背景 由于BigDecimal 的精度比较高 在计算的时候有时候存入数据库的时候会进行四舍五入 会对后面的结果判断存在误差 所以比较的结果会在一个区间的 public static boolean
  • vim编辑文件使用案例

    1 前置知识点了解 操作流程 编辑文件指令 vim 文件名 点击键盘 i 键 模式由默认的 命令模式 变成 插入模式 编辑文件内容 完成后点击键盘 Esc 键 模式由 插入模式 变成 命令模式 同时点击键盘 shift 键 模式由 命令模式
  • python接口自动化(四)--接口测试工具介绍(详解)

    简介 工欲善其事必先利其器 通过前边几篇文章的介绍 大家大致对接口有了进一步的认识 那么接下来让我们看看接口测试的工具有哪些 目前 市场上有很多支持接口测试的工具 利用工具进行接口测试 能够提供测试效率 例如 假 入让你一天完成100个接口
  • docker-compose常见问题

    一 新版本网络桥接 问题 docker errors InvalidArgument host network mode is incompatible with port 1 24 0以前可以network mode host和ports
  • Python List 按照多个关键字排序

    最近刷刷题遇到的 发现还没有一模一样的答案 自己做个解答 以列表有两列为例 我们需要按照两列排序 可以利用sorted和lambda组合 l a 2 c 1 d 4 b 2 sorted l key lambda x x 1 x 0 rev
  • 小程序实现h5页面的微信支付php,微信小程序webview组件交互,内联h5页面并网页实现微信支付实现解析...

    前言 小程序支持webview以后 我们开发的好多h5页面 就可以直接在小程序里使用了 比如我们开发的微信商城 文章详情页 商品详情页 就可以开发一套 多处使用了 我们今天来讲一讲 在小程序的webview里实现微信支付功能 因为微信不允许