h5使用js拉起微信支付
近期,业务需求对接了微信支付,做个总结。web网页想要拉起微信支付,有两种方法: H5下单支付
, JSAPI支付
。首先纯前端做不了微信支付,必须配合后端才能通过微信的下单请求。接下来说说这两种方法的区别。
H5微信下单支付
这种支付方式是用户在浏览器端打开网页,通过下单等操作,与后端交互,后端向微信端下单获取到 支付链接地址
。然后返回给前端,前端通过打开这个链接地址跳转到微信APP,进行支付后返回到浏览器端。
下单流程图(来自微信官方)
- 电脑端做扫码支付
由于,前端下单后,后端获取到微信的支付链接地址
。发送给前端,前端可以通过qrcode
第三方库来转换成二维码在前端显示。这里以vue2.x版本
项目为例。
- 安装依赖
# 以你的项目文件夹 打开 cmd 命令
npm i qrcode -D #安装依赖
- 使用
<template>
<div class="qrcode">
<img :src="payImg" alt="支付二维码" />
</div>
</template>
<script>
import QRCode from "qrcode";
export default {
data(){
return {
payImg: null,
}
},
methods:{
getUrlSrc(words) {
return new Promise((res, rej) => {
var QRCodeOpts = {
errorCorrectionLevel: "H",
type: "image/jpeg",
quality: 0.8,
width: 400,
margin: 1,
};
QRCode.toDataURL(words, QRCodeOpts, function (err, url) {
if (err) {
console.log(err);
return rej(err);
}
res(url);
});
});
},
},
mounted(){
// 调用方法 生成二维码图片
this.getUrlSrc("https://weixin.....")
.then(url => {
// 显示到img元素上
this.payImg = url
})
.catch(err => {
// 报错了。。。
alert(err)
})
}
}
</script>
- 注意事项
此方法支付不能在微信内访问页面拉起支付。必须在 外部浏览器
跳转 微信返回的支付地址
才能打开。(否则会提示:请从微信外打开订单,进行支付)。
JSAPI下单支付
这种支付方式适用 微信公众号
,或 微信内置浏览器
内打开的网页来拉起微信支付。通过与后端交互,后端获取到微信下单所需要的参数(openid至关重要)返回给前端,前端通过此参数直接调用微信的JSAPI,就可以拉取支付了。
- 网页需要获取
code
下单发送给后端。
推荐使用 静默授权
获取到 code
后发送给后端,后端通过微信接口获取到微信用户的 openid
。获取code方法。先要获取到code,然后把这个code发送给后端,后端去通过微信的接口获取到openid(微信用户的openid是唯一的)。
- 通过调用微信浏览器内置的API拉起支付
// 判断是否在微信浏览器内
if (/MicroMessenger/i.test(window.navigator.userAgent)) {
WeixinJSBridge.invoke('getBrandWCPayRequest', {
// 此参数需要通过后端发送到前端 不推荐前端生成
"appId": "wx2421b1c4370ec43b", //公众号ID,由商户传入
"timeStamp": "1395712654", //时间戳,自1970年以来的秒数
"nonceStr": "e61463f8efa94090b1f366cccfbbb444", //随机串
"package": "prepay_id=up_wx21201855730335ac86f8c43d1889123400",
"signType": "RSA", //微信签名方式:
"paySign": "...." //微信签名
},
function(res) {
// get_brand_wcpay_request:cancel 支付过程中用户取消
// get_brand_wcpay_request:fail 支付失败
if (res.err_msg == "get_brand_wcpay_request:ok") {
// 使用以上方式判断前端返回,微信团队郑重提示:
//res.err_msg将在用户支付成功后返回ok,但并不保证它绝对可靠。
}
});
}
- 注意
微信公众号需要在设置 网页授权域名
, jsAPI域名
为你的网站地址,否则会出现地址验证失败。
h5使用js拉起微信支付的更多相关文章
- H5使用codovar插件实现微信支付(微信APP支付模式,前端)
H5打包的app实现微信支付及支付宝支付,本章主要详解微信支付,支付宝支付请查看另一篇“H5使用codovar插件实现支付宝支付(支付宝APP支付模式,前端)” ps:本文只试用H5开发的,微信 AP ...
- 两种js方法发起微信支付:WeixinJSBridge,wx.chooseWXPay区别
原文链接:https://www.2cto.com/weixin/201507/412752.html 1.为什么会有两种JS方法可以发起微信支付? 当你登陆微信公众号之后,左边有两个菜单栏,一个是微 ...
- 【微信H5支付】微信公众号里H5网页点击调取微信支付
最近在公众号里开发了下单支付H5网页,需要在H5里调用微信支付界面.开发思路和代码整理如下: todo...
- .NET Core之微信支付之公众号、H5支付篇
前言 本篇主要记录微信支付中公众号及H5支付全过程. 准备篇 公众号或者服务号(并开通微信支付功能).商户平台中开通JSAPI支付.H5支付. 配置篇 公众号或者服务号中 -------开发----- ...
- 浅析微信支付:微信支付简单介绍(小程序、公众号、App、H5)
本文是[浅析微信支付]系列文章的第二篇,主要讲解一下普通商户接入的支付方式以及其中的不同之处. 上篇文章讲了本系列的大纲,没有看过的朋友们可以看一下. 浅析微信支付:前篇大纲 微信支付是集成在微信客户 ...
- 微信小程序web-view(webview) 嵌套H5页面 唤起微信支付的实现方案
场景:小程序页面有一个web-view组件,组件嵌套的H5页面,要唤起微信支付. 先讲一下我的项目,首先我是自己开发的一个H5触屏版的商城系统,里面含有购物车,订单支付等功能.然后刚开始,我们公众号里 ...
- 微信支付 第三篇 微信调用H5页面进行支付
上一篇讲到拿到了 预支付交易标识 wx251xxxxxxxxxxxxxxxxxxxxxxxxxxxxx078700 第四步,是时候微信内H5调起支付了! 先准备网页端接口请求参数列表 微信文档中已经明 ...
- 微信支付之扫码支付、公众号支付、H5支付、小程序支付相关业务流程分析总结
前言 很久以来,一直想写一篇微信支付有关的总结文档:一方面是总结自己的一些心得,另一方面也可以帮助别人,但是因种种原因未能完全理解透彻微信支付的几大支付方式,今天有幸做一些总结上的文章,也趁此机会,将 ...
- 怎样调通微信支付及微信发货通知接口(Js API)
怎样调通微信支付及微信发货通知接口(Js API) 微信支付提供了一个支付測试页面,微信支付正式使用须要測通支付.发货通知接口 .告警接口.维权接口.告警接口.维权接口非常easy.支付界面调通也相对 ...
- [5] 微信公众号开发 - 微信支付功能开发(网页JSAPI调用)
1.微信支付的流程 如下三张手机截图,我们在微信网页端看到的支付,表面上看到的是 "点击支付按钮 - 弹出支付框 - 支付成功后出现提示页面",实际上的核心处理过程是: 点击支付按 ...
随机推荐
- debug技巧之远程调试
一.前言 大家好啊,我是summo,今天给大家分享一下我平时是怎么调试代码的,不是权威也不是教学,就是简单分享一下,如果大家还有更好的调试方式也可以多多交流哦. 当我们的应用发布到线上之后,就不能随意 ...
- avue-crud字段之间的动态交互效果以及接口数据的获取赋值
一.form表单下拉表单类型字段数据获取 1.通过配置系统字典接口获取数据并渲染 { label: "经纪人", prop: "broker", type: & ...
- SASS 插值语句 #{ }的使用
在之前我们已经使用用 / 来进行计算,但如下情况不一样 例如 p{ font: 16px/30px Arial, Helvetica, sans-serif; } 如果需要使用变量,同时又要确保 / ...
- springboot 整合mail 发送邮件
springboot 整合mail 发送邮件 pom.xml <properties> <java.version>1.8</java.version> <p ...
- 在唯一密钥属性“name”设置为“XXX”时,无法添加类型为“add”的重复集合项
我是在调试时,更改了项目url出现的问题,没有改端口号,只是改了"/"后面的地址 这个是我是改哈端口号就好了,改了端口号就重新建立虚拟目录了. 感觉是因为端口号没变,但项目url变 ...
- Django 视图views的基本使用
在 Django 中,视图函数是一个 Python 函数或者类,开发者主要通过编写视图函数来实现业务逻辑.视图函数首先接受来自浏览器或者客户端的请求,并最终返回响应,视图函数返回的响应可以是 HTML ...
- golang errgroup 的超时检测
errgroup 的超时检测通常是一种事后得到结果的方式. errgroup本身并不直接支持超时控制,而是依赖于与之关联的context.Context来实现超时和取消功能. 当context超时时, ...
- 【译】Visual Studio 17.10 发布了新版扩展管理器
我们将更新的扩展管理器带给所有用户!在过去的一年里,我们已经将更新后的扩展管理器作为可选的预览功能提供,并一直期待您的反馈.基于您令人难以置信的反馈,我们现在准备从 Visual Studio 17. ...
- node.js常用命令总结
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时环境,用于构建快速.可扩展的网络应用程序.它使用事件驱动.非阻塞 I/O 模型,使其非常适合构建数据密集型的实时应用 ...
- javascript 生成器和迭代器
前置知识 生成器函数会返回一种称为Generator的迭代器 迭代器是一个对象,定义一个序列,并在终止时返回一个返回值 Symbol.iterator为每一个对象定义了默认的迭代器,可以被for..o ...